java面试题答案整理(一)-亚博电竞手机版
1.jdk 和 jre 有什么区别?
jdk是java development kit的缩写,顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。jdk包含了jre,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
jre是java runtime environment的缩写,顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的,还有所有的java类库的class文件,都在lib目录下,并且都打包成了jar。
2. == 和 equals 的区别是什么?
一、对象类型不同
1、equals():是超类object中的方法。在object中。==和equals是等价的。
2、==:是操作符。
二、比较的对象不同
1、equals():用来检测两个对象是否相等,即两个对象的内容是否相等。
2、==:用于比较引用和比较基本数据类型时具有不同的功能。引用类型比较的是地址。
3.两个对象的 hashcode()相同,则 equals()也一定为 true,对吗?
1、如果两个对象相等,则hashcode一定也是相同的
2、两个对象相等,对两个对象分别调用equals方法都返回true
3、两个对象有相同的hashcode值,它们也不一定是相等的
另外,equals方法被覆盖过,则hashcode方法也必须被覆盖为在散列表中,hashcode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
4.final 在 java 中有什么作用?
修饰类:表示该类不能被继承;
修饰方法:表示方法不能被重写;
修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。
5.java 中的 math.round(-1.5) 等于多少?
-1,round方法的源代码是 0.5之后向下取整。
6.string 属于基础的数据类型吗?
string不是基本的数据类型,是final修饰的java类,java中的基本类型一共有8个,它们分别为:
字符类型:byte,char
基本整型:short,int,long
浮点型:float,double
布尔类型:boolean
7.java 中操作字符串都有哪些类?它们之间有什么区别?
string、stringbuffer、stringbuilder
string : final修饰,string类的方法都是返回new string。即对string对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
stringbuffer : 对字符串的操作的方法都加了synchronized,保证线程安全。
stringbuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new stringbuilder对象,调用stringbuilder对象的append、replace、delete等方法修改字符串。
8.string str="i"与 string str=new string(“i”)一样吗?
不一样,因为内存的分配方式不一样。string str="i"的方式,java虚拟机会将其分配到常量池中;而string str=new string("i")则会被分到堆内存中。
9.如何将字符串反转?
利用 stringbuffer 或 stringbuilder 的 reverse 成员方法
利用 string 的 tochararray 方法先将字符串转化为 char 类型数组,然后将各个字符进行重新拼接
利用 string 的 charat 方法取出字符串中的各个字符
10.抽象类必须要有抽象方法吗?
抽象类必须有关键字abstract来修饰。
抽象类可以不含有抽象方法
如果一个类包含抽象方法,则该类必须是抽象类
11.普通类和抽象类有哪些区别?
抽象类不能被实例化
抽象类可以有抽象方法,抽象方法只需申明,无需实现
含有抽象方法的类必须申明为抽象类
抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
抽象方法不能被声明为静态,不能用private,final修饰
12.接口和抽象类有什么区别?
抽象类要被子类继承,接口要被类实现。
接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
接口是设计的结果,抽象类是重构的结果。
抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
13.java 中 io 流分为几种?
14.bio、nio、aio 有什么区别?
bio:block io 同步阻塞式 io,就是我们平常使用的传统 io,它的特点是模式简单使用方便,并发处理能力低。
nio:non io 同步非阻塞 io,是传统 io 的升级,客户端和服务器端通过 channel(通道)通讯,实现了多路复用。
aio:asynchronous io 是 nio 的升级,也叫 nio2,实现了异步非堵塞 io ,异步 io 的操作基于事件和回调机制。
bio:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
nio:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有i/o请求时才启动一个线程进行处理。
aio:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的i/o请求都是由os先完成了再通知服务器应用去启动线程进行处理。
15.files的常用方法都有哪些?
files.exists() 检测文件路径是否存在
files.createfile()创建文件
files.createdirectory()创建文件夹
files.delete() 删除文件或者目录
files.copy() 复制文件
files.move() 移动文件
files.size()查看文件个数
files.read() 读取文件
files.write()写入文件