1、JDK和JRE的区别?
JDK是java的开发和运行环境, JRE是java的运行环境;
JDK包含了JRE,除此之外还包含了可以编译java源码的编译器javac;
若只是运行java程序,安装JRE就可以,开发java程序需要安装JDK。
2、==和equals的区别
在Object类中,equals方法的本质就是==。
public boolean equals(Object obj) {
return (this == obj);
}
基本数据类型,==是值比较;而对于引用类型, ==是引用比较。
equals方法默认是引用比较,但是很多类重写了equals方法,比如String类和Integer类等,所以更多情况下equals是值比较。
3、两个对象的HashCode()相同,则equals也一定为true对吗?
不对 。两个对象的HashCode()相同,则equals不一定为true。
hashcode相同只是表明哈希值一样,但是不代表键值对相等。
equals相等,那么它们的hashCode一定相等。
4、final在Java中的作用
final修饰一个类的时候,此类不可以被继承;
final修饰的方法不可以被重写;
final修饰的变量为常量,必须有初始值,并且不可以被修改;
5、final、finally、finalize的区别
final用于修饰类、方法和变量;分别表示类不可继承,方法不可覆盖,变量不可被修改;
finally是处理异常语句块中的一部分,表示总是执行;
finalize是Object类中的一个方法,在垃圾回收器执行的时候,就会调用被回收对象的此方法;
6、Math中的取整方法
ceil、floor、round
ceil是向上取整;
floor是向下取整;
round是在原有的基础上+0.5向下取整;
7、String输入基本数据类型吗
不属于。java的八大基本数据类型分别是:
byte、short、int 、long、double、float、boolean、char
而String属于对象类型。
8、Java中操作字符串都有哪些类,区别是什么
操作字符串的类有三个:String、StringBuffer、StringBuilder
String是不可变字符串,每次操作都会生成新的String对象。
StringBuilder和StringBuffer是可变字符串,不过StringBuffer是线程安全的,StringBuilder不是线程安全的;在StringBuffer类中的许多方法都使用了synchronized关键词修饰。
但是StringBuilder的性能要高于StringBuffer。
单线程环境下推荐使用StringBuilder;多线程环境下推荐使用StringBuffer。
9、String str = “i” 和String str = new String(“i”)中的两个str一样吗
不一样。
String str = "i"只是声明了一个变量,值为i,会被分配到常量池中;
但是String str = new String(“i”)是创建了一个对象,这个对象引用的内存地址中的值是i,会被分配到堆内存中;
10、如何将字符串反转
使用StringBuffer或者StringBuilder类中reverse()方法
11、String类中的常用方法都有哪些
length(): 返回字符串的长度
substring():截取其字符串
trim():取出字符串两端的空白
replace():替换字符串
indexOf():返回指定字符的索引
charAt():返回指定索引的字符
split():分割字符串,返回的是数组
equals():字符串比较
getBytes():返回字符串的byte数组
toLowerCase():字符串转小写
toUpperCase():字符串转大写
12、抽象类中必须有抽象方法吗
不需要。抽象类中可以有抽象方法,不需要必须有抽象方法。
13、抽象类与普通类的区别
抽象类中可以有抽象方法,普通类中不可以有抽象方法;
抽象类不可以被实例化对象,普通类可以实例化对象;
14、抽象类和接口的区别
- 抽象类中可以有一般方法、构造方法和抽象方法;接口只可以有抽象方法;
- 接口使用interface修饰,可以有多个类实现;抽象类使用abstract修饰,单继承
- 抽象类中可以有普通成员变量;接口中不可以有普通成员变量;
- 抽象类中的方法可以是public、protected修饰;接口中的方法只能是public修饰,并且默认是public abstract
- 抽象类中可以有静态方法;接口中不可以有静态方法
15、抽象类可以用final修饰吗
不可以。抽象类本身就是为了被继承,如果用final修饰的话,就表明不可以被继承。互相矛盾
16、java中的IO流分为几种
按功能来分:输入流input、输出流output
按类型来分:字节流、字符流
字节流是操作8个字节;字符流操作16个字符
17、BIO、NIO、AIO的区别
BIO是同步阻塞式IO,就是我们常用的传统IO,特点是模式简单,使用方便,并发处理能力低;
NIO是同步非阻塞式IO,是传统IO的升级版,客户端和服务端通过Channel(通道)通讯,实现了多路复用;
AIO是异步非阻塞式IO,是NIO的升级版,异步IO的操作基于事件和回调机制;
18、Files的常用方法
Files.exists() 查看文件路径是否存在
Files.copy() 复制文件
Files.delete() 删除文件
Files.read() 读取文件
Files.write() 写入文件
Files.createDirectory() 创建文件夹
Files.createFile() 创建文件
Files.move() 移动文件