java常见面试题及自己整理的答案(一)

1.JDK与JRE的区别?
jre是java运行环境,包含jvm与java基础类库。
jdk是java开发环境(包括编译调试等工具),jdk包含jre。

2.== 和 equals 的区别是什么?
对于基本数据类型两者无差别。
对于引用数据类型,equals比较的是对象的值,两个=比较的是对象在堆中的地址。

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,Java 对于 eqauls 方法和 hashCode 方法的规定是如果两个对象 equals 方法相等则它们的 hashCode 值一定要相同,如果两个对象的 hashCode 相同则它们的 equals 方法并不一定相同。

4.final 在 java 中有什么作用?
final修饰类不可被继承,注意final类中的所有成员方法都会被隐式地指定为final方法。
final修饰变量值不可变
final修饰的方法不可覆盖(重写)。

5.java 中的 Math.round(-1.5) 等于多少?
四舍五入,-1

6.String 属于基础的数据类型吗?
不属于,八大基本数据类型分别是 byte,short,int,long,float,doube,char,boolean

7.java 中操作字符串都有哪些类?它们之间有什么区别?
String,StringBuffer,StringBuilder.
三个都是final类。
String每次操作会产生新的对象,而StringBuffer与StringBuilder是对对象本身操作不会产生新的对象。
StringBuffer是线程安全的,缺点操作速度较慢。StringBuilder线程不安全,速度较快

8.String str="i"与 String str=new String(“i”)一样吗?
两者看似都是创建了一个字符串对象,但在内存中确是各有各的想法。
String str= “i”; 在编译期,JVM会去常量池来查找是否存在“i”,如果不存在,就在常量池中开辟一个空间来存储“i”;如果存在,就不用新开辟空间。然后在栈内存中开辟一个名字为str的空间,来存储“i”在常量池中的地址值。
String str = new String(“i”) ;在编译阶段JVM先去常量池中查找是否存在“i”,如果过不存在,则在常量池中开辟一个空间存储“i”。在运行时期,通过String类的构造器在堆内存中new了一个空间,然后将String池中的“i”复制一份存放到该堆空间中,在栈中开辟名字为str的空间,存放堆中new出来的这个String对象的地址值。
也就是说,前者在初始化的时候可能创建了一个对象,也可能一个对象也没有创建;后者因为new关键字,至少在内存中创建了一个对象,也有可能是两个对象。

9.如何将字符串反转?
常用StringBuilder的reverse方法。

10.String 类的常用方法都有那些?

11.抽象类必须要有抽象方法吗?
抽象方法没用方法体且有关键字abstract。
抽象方法的访问修饰符为public或protected,缺省情况为public
拥有抽象方法的类就是抽象类(但抽象类中也可以不包含抽象方法),抽象类要使用abstract关键字声明。抽象类不能被实例化。
子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。)
抽象类不能使用final声明,因为抽象类必须有子类,而final定义的类不能有子类。
外部抽象类不允许使用static声明,而内部的抽象类可以使用static声明。
使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。
抽象类中的static方法可以直接调用。

12普通类和抽象类有哪些区别?
普通类可以实例化调用;抽象类不能被实例化。
普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非子类也是抽象类。

13抽象类能使用 final 修饰吗?
不能,抽象类不能使用final声明,因为抽象类必须有子类,而final定义的类不能有子类。

14接口和抽象类有什么区别?
接口是对动作的抽象,抽象类是对本质的抽象。
抽象类可以有具体的方法和属性, 接口只能有抽象方法和不可变常量(final)
接口是可多实现,抽象类但继承
抽象类实现接口时,接口的方法在抽象类中可以被实现也可以不被实现,而普通实现接口必须实现所有接口方法。

15.java 中 IO 流分为几种?
按数据流的方向不同:输入流,输出流。
按处理数据单位不同:字节流,字符流。
字节流:数据流中最小的数据单元是字节。
字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。
按功能不同:节点流,处理流。
程序用于直接操作目标设备所对应的类叫节点流。
程序通过一个间接流类去调用节点流类,以达到更加灵活方便地读写各种类型的数据,这个间接流类就是处理流。

16BIO、NIO、AIO 有什么区别?
参考简书BIO、NIO、AIO 有什么区别

17Files的常用方法都有哪些?
Files的常用方法都有哪些?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值