Java面试题(1)

1、 JDK和JRE的区别?

  • JDK:Java开发工具包。提供了java的开发环境和运行环境。
  • JRE:java运行环境,为java的运行提供了所需要的环境。
    具体来说JDK包含了JRE,同时包含了编译java源码的编译器javac,还包含了调试分析工具。如果我们只需要去跑java程序,我们只需要去安装JRE就可以,如果是编写Java程序安装JDK。

2、== 和equals的区别是?

==:

分为堆基础类型和引用类型,对两者的作用是不同的。

  • 基础类型:比较的是值是否相同。
  • 引用类型:比较的是引用是否相同。

equals:
equals本质上是==,只不过String和Integer重写了equals方法,把它变成了值比较。
equals方法的码源是:

public boolean equals(Object obj){
	return (this == obj);
}

通过源码就可以看初equals方法的本质就是==。

两个对象的hashcode()相同,则equals()也一定为true,对不?

不对,因为在散列表中hashcode()相等即为键值对的哈希值相等,然而hash值相等并不一定键值对相等。

final关键字的作用?

  • final修饰类,类不能被继承。
  • final修饰的方法不能被重写
  • final被修饰的变量为常量,常量必须初始化,初始化后的值不能被修改。

java 中 Math.round(-1.5)等于?

等于-1,因为在数轴上取值事,向上取整。

String 是基础类型吗?

不属于,基础类型有8种:byte,short,int,long,double,float,char,boolean,而String属于对象。

Java中操作字符串有哪些类?它们有哪些区别?

操作字符串的类有:String、StringBuffer、StringBuilder。

String与StringBuffer和StringBuilder的区别在于,String申明的是一个不可变的对象,每次操作都会创建一个新的String对象,而StringBuffer和StringBuilder可以在原来对象的基础上进行操作,对象没有改变,所以在经常使用字符串的修改的情况下不要去使用String。

StringBuffer和StringBuilder的最大的区别在于
StringBuffer的线程是安全的,而StringBuilder的线程是不安全的,但是StringBuilder的性能要优于StringBuffer,在单线程的环境下推荐使用StringBuilder,而在多线程的情况下推荐使用StringBuffer,这样就确保了安全性问题。

String对象为什么是不可变的?

因为String类是被final关键字修饰字符数组来保存字符串的。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L;

String s= “i” 和 String s = new String(“i”)一样吗?

不一样, 在内存分配上是不一样的。String s = “i” JVM会将其分配到常量池中,而第二个会被分配到堆内存中。

如何实现字符串反转?

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

String 类的常用方法?

  • indexOf():返回字符串的索引。
  • charAt():返回指定索引处的字符。
  • replace():字符串替换。
  • trim():去除掉字符串两端的空白。
  • split():分割字符串,返回一个分割后的字符串数组。
  • getBytes():返回字符串的byte类型数组。
  • length():返回字符串长度。
  • toLowerCase():将字符串转换为小写字母。
  • toUpperCase():将字符串转成大写字母。
  • substring():截取字符串。
  • equals():字符串比较。

抽象类必须有抽象方法吗?

不需要。

普通类和抽象类的区别?

  • 普通类不包含抽象方法,抽象类可以包含抽象方法。
  • 抽象类不能直接实例化,普通类可以直接实例化。抽象类的实例化需要另一个类去继承抽象类,再实例化子类。

抽象类能使用final修饰吗?

不能,定义了抽象类就是用来继承的,如果我们去用final修饰,这个抽象类就不能被继承。

接口和抽象类的区别?

  • 接口使用的implements实现接口,而抽象类是用来继承的extends。
  • 抽象类可以有构造方法,但是接口没有。
  • 抽象类可以有main方法并且可以运行,接口没有
  • 实现数量:类可以实现多个接口,但是只能继承一个抽象类。
  • 接口的默认是用public修饰,而抽象类以可是任意。

java 中IO流分为哪几种?

按功能来分:输入流、输出流。
按类型来分:字节流和字符流。
字节流和字符流的区别是 字节流按8位传输,以字节为单位,字符流是以16位传输以字符为单位输入输出数据。

BIO、NIO、AIO的区别?

  • BIO:Block IO 同步阻塞式IO,就是我们平时使用的IO,特点是简单方便,并发处理能力低。
  • NIO:New IO 同步非阻塞式IO ,是传统IO的升级,客户端和服务器通过Channel(通道)通信,实现了多路复用。
  • AIO:Asynchronous IO 是NIO的升级,也叫NIO2 ,实现了异步非阻塞式IO,异步IO的操作基于事件和回调机制。

Files的常用方法?

  • Files.exists(): 检测文件路径是否存在
  • Files.createFile():创建文件
  • Files.createDirectory():创建文件夹
  • Files.delete():删除文件或目录
  • Files.copy():复制文件
  • Files.move():移动文件
  • Files.size():查看文件个数
  • Files.read():读取文件
  • Files.write():写入文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值