美文网首页
Java面试准备 Java基础

Java面试准备 Java基础

作者: 小小弓长张 | 来源:发表于2019-08-05 13:27 被阅读0次

1.JDK和JRE有什么区别

JDK:Java Development Kit 的简称,Java开发工具包,提拱了Java开发环境和Java运行环境。

JRE:Java Runtime Environment 的简称,Java运行环境,为Java的运行提供了所需的环境。

具体来说JDK包含了JRE,同时还包含了编译Java源码的编译器javac,还包含了很多Java程序调试和分析的工具。简单的来说,如果想运行Java程序,只需要安装JRE就可以了,如果要编写Java程序就需要安装JDK。

2. 字符串比较== 和equals的区别是什么

对于基本类型和引用类型 ==的作用效果是不同的。

String x = "string";

String y = "string";

String z = new String("string");

System.out.println(x == y);               //true

System.out.println(x == z);               //false

System.out.println(x .equals(y));       //true

System.out.println(x .equals(z));       //true

因为X和Y指向的是同一个引用,所以== 是true。而new String()方法则从新开辟了内存空间,所以==为false。

而equals方法比较的是值,所以都为true。

equals本质上就是== ,只不过String和Integer等重写了equals方法,把他变成了值比较。

3.两个对象的hashCode()相同,则equals相等?

不对,两个对象的hashCode相等,值不一定相等。

4.final在Java中有什么作用

final修饰的类被称为最终类,该类不能被继承。

final修饰的方法不能被重写。

final修饰的变量为常量,常量必须初始化,初始化后不可以改变值。

5.java中的Math.round(-1.5)等于多少?

等于-1, Math.round()方法是取离整型最近的最大整数。遵循四舍五入。

6.String是基本数据类型吗?

不是,Java的基本数据类型:byte, short, int, long, double, boolean, char, float八种,而string是对象。

7.Java中的字符串有哪些?他们都有那些区别?

有三种,String,StringBufffer,StringBuilder

StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder。

String申明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象。

StringBuffer和StringBuilder存储数据的字符数组没有被final修饰,说明值是可以改变的,抽象类abstraStringBuilder内部提供了一个自动扩容机制,当发现长度不够的时候会自动扩容(默认长度是16),扩展为原数组长度的两倍加2,创建一个新的数组,并将数组的数据复制到新数组,所以对于拼接字符串的效率要比String高。

StringBuffer的很多方法都被syschronized修饰了所以线程是安全的,但是当多线程访问的时候,加锁和释放锁的操作会很频繁,所以效率上要比StringBuilder低。StringBuilder的执行效率很高,但是线程不安全,推荐多线程下使用StringBuffer,单线程使用StringBuilder。

8.String str = "1"和 String str = new String("1")一样吗?

内存的分配方式不一样,String str = "1" , java虚拟机会将其分配到常量池中,如果常量池中有”1“,就返回”1“的址,如果没有就创建”1“,然后返回"1"的地址。而String str = new String("1"),则会被分配到堆内存中新开辟一块空间。

9.如何将字符串反转

使用StringBuffer或者StringBuilder的reverse()方法。

    StringBuffer sb = new StringBuffer();

    sb.append("abcdefg");

    System.out.println(sb.reverse());

10.String的常用方法有哪些?

indexOf();   // 返回指定字符串的索引

chartAt();   //返回指定索引处的字符

replace();  // 字符串替换

trim();  //去掉字符串的前后两端空白

split();  //分割字符串,返回一个分割后的字符串数组

getBytes();  // 返回字符串的byte类型数组

length();  //返回字符串长度

toLowerCase();  //将字符串转换成小写

toUpperCase();   // 将字符串转换成大写

subString();   //截取字符串

equals();  //字符串比较

11.抽象类必须有抽象方法吗

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类。

12.普通类和抽象类,有哪些区别

普通类不能包含抽象方法,

抽象类是不能实例化的,就是不能用new调出构造方法创建对象,普通类是可以实例化的。

如果一个类继承于抽象类,那么该类必须实现父类的抽象方法,如果该类没有实现父类的抽象方法,那么必须将该类定义为抽象类。

13.抽象类能使用final修饰符吗

不能  因为定义抽象类就是让其他类继承的,如果定义为final类就不能被其他类继承。

14.接口和抽象类有什么区别

抽象类的子类使用extends来继承,接口必须使用implement来实现接口。

抽象类可以有构造函数,接口不能有。

类可以实现很多接口,但只能继承一个抽象类。(Java只支持单继承)

接口中的方法默认使用public修饰,抽象类中的抽象方法可以使用public和protected修饰,如果抽象方法修饰符为private,则方法名报错。

15.Java中的IO流分几种

按功能来分:输入流(input)和输出流(output)

按类型来分:字节流和字符流。

字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据。

16.BIO,NIO,AIO有什么区别

BIO:Block IO 同步阻塞式IO,就是我们平常使用的IO。特点是简单方便,并发处理能力低。

NewIO 同步非阻塞IO,是传统的IO升级,客户端和服务端通过Channel(通道)通讯,实现了多路复用。

AsynchronpusIO 是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步的IO操作基于事件和回调机制。

17.Files的常用方法有哪些

Files.exists();  // 检测文件路径是否存在

Files.createDirectory();  // 创建文件夹

Files.createFile(); // 创建文件

Files.delete();    //  删除文件

Files.copy();  // 复制文件

Files.move();   // 移动文件

Files.size();   // 读取文件个数

Files.read();   // 读取文件

Files.write();  //写入文件

相关文章

网友评论

      本文标题:Java面试准备 Java基础

      本文链接:https://www.haomeiwen.com/subject/suhsdctx.html