Java基础面试知识点总结

Java 基础

1. JDK 和 JRE 有什么区别

JDK 是Java的开发工具包,包含各种类库,并且包含了JRE,javac是jdk中的。
JRE 是 java 程序的运行环境,安装过程中自动添加PATH.

2. == 和 equals 的区别是什么?

一,对于 == ,比较的是值是否相等如果比较的是基本的数据类型的变量,则直接比较其存储的值是否相等,如果比较的是引用数据类型,则比较的是所指向的对象的地址值。
二,equals不能作用于基本数据类型,它比较的是是否相同的对象,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象地址值,String和Date等类对equals方法进行重写,比较的则是所指向的对象内容。

3. 两个对象的HashCode()相同,则equals()也为true,对嘛?

首先,两个对象equals相等,hashcode 一定相等;但是hashcode相等时,equals不一定相等。
其次,两个不同的对象,因为可能存在哈希碰撞,所以hashcode可能是相等的,但是显然equal不为true,还有就是,在objiect类中,euqals方法还是用的 == 来判断的, 对于对象而言比较的是地址值,所以equals相等hashcode一定一样,反之就不一定了。

4.final 在 Java 中有什么作用?

final 关键字可作用于类,类属性和方法;
作用于类上时,该类不能被继承;
作用于属性时,该属性不能被重新复制;
作用于方法时,该方法不能被重写;

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

Math的 round 方法是四舍五入,如果参数是负数,则往大的数如,Math.round(-1.5) = -1;

6.String 属于基础的数据类型吗?

不是,String是一个类,是引用数据类型。

7.Java 中操作字符串都有哪些类?他们之间有什么区间?

有String,String Builder ,String Buffer
1.String是不可变的,每次对String的操作都会产生一个String对象
2.String Builder和String Buffer是可变的,能够被多次修改,并不会产生新的对象。
3.StringBuilder 是线程不安全的,StringBuffer是线程安全的。
4.StringBuilder的处理速度比StingBuffer要快;

8. String str = “i” 与 String str = new String(“i”)一样吗?

他们的值相等,用equals得到true,但是他们是两个对象,如果用==判断返回false。
且str="i"是直接在常量池中引用字符串,而new String(“i”) 是在堆中根据i再创建一个对象。

9. 如何将字符串反转?

  1. 通过StringBuilder 的 reverse() 方法可以直接反转 StringBuilder sb = new StringBuilder(“abc”); sb.reverse().toString();
  2. 通过String的toCharArray 方法可以获得字符串每一个字符并且转换为字符串数组然后循环从后往拼接即可。
  3. 递归的方法反转(当只有一个字符时,返回原字符;当有两个以上的字符时,返回结果为第二个字符开始的字符串+第一个字符)
    public String reverseString(String str){
    if((null == str) || str.length() < 2){
    return str;
    }
    return reverseString(str.subString(1)) + str.charAt(0);
    }

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

charAt(int index)返回指定索引处的字符
length() 返回字符串长度
split() 根据给定的正则表达式拆分字符串
toString() 返回此对象本身

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

抽象类可以没有抽象方法,但是如果一个类已经声明为抽象类,那么它也不能再实例化,不能直接构造该类对象。

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

  1. 抽象类不能被实例化,普通类反之。
  2. 抽象类的访问权限限于public和protected,如果为private的话,就不能被子类继承了。
  3. 如果一个类继承于抽象类,则它必须实现父类的抽象方法,如果不想实现,那么子类也必须是抽象类。

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

不能,final修饰的类是不能被继承的,如果抽象类不能继承,就没意义了。

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

  1. 抽象类可以有构造方法,接口不能有结构方法。
  2. 抽象类可以包含非抽象方法,接口则不能。
  3. 抽象类方法访问权是public,protected,接口中只能是public。
  4. 只能单继承,但是可以多实现。

15.Java 中 IO 流分为几种?

大的方面来说有两种:字节流和字符流
字符流继承于 InputStream,OutputStream
字符流继承于Reader,Writer

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

1.BIO 表示同步阻塞式IO,交互方式是同步,阻塞方式,即客户端有连接请求时服务端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的开支。
2.NIO表示同步非阻塞IO,客户端发送的连接请求都会注册到多路复用器轮询到连接有I/O请求时才启动一个线程处理。
3.AIO表示异步非阻塞IO,客户端的I/O请求都是由操作系统先完成IO操作后再通知服务器应用来启动线程处理。

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

String getName():返回File对象所表示的文件名或文件路径。
String getPath(): 返回File对象所对应的相对路径。
boolean exists():判断File对象的文件或者目录是否存在。
boolean isDirectory():判断File 对象是否是目录。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二手Java程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值