1、JDK 和 JRE 有什么区别?
JDK(Java Development Kit),Java开发工具包
JRE(Java Runtime Environment),Java运行环境
JDK包含JRE,JDK中有一个叫JRE的目录,包括两个文件夹bin和lib,bin是JVM,lib是JVM工作所需的类库。
2、== 和 equals 有什么区别?
对于基本类型,==比较值;
对于引用类型,==比较地址;
equals不能用于基本类型的比较;
如果equals没有重写,equals相当于==;
若重写equals方法,equals比较对象的内容;
3、final 在 java 它的作用是什么?
(1)用于修饰引用
若引用为基本数据类型,则引用为常量,该值不能修改;
如果引用为引用数据类型,如对象和数组,则可以修改对象和数组本身,但不能修改指向对象或数组地址的引用。
如果引用时代成员变量,必须当场赋值,否则编译会报错。
(2)用来修饰一种方法
当使用final修改方法时,这种方法将成为不能被子类重写的最终方法。然而,这种方法仍然可以继承。
(3)用于修饰
使用final修改类别时,该类别成为最终类别,无法继承。
比如常用的String类就是最终类。
4、java 中的 Math.round(-1.5) 等于多少?
Math提供了三种与取整有关的方法:ceil、floor、round
(1)ceil:向上取整;
Math.ceil(11.3) = 12;
Math.ceil(-11.3) = 11;
(2)floor:向下取整;
Math.floor(11.3) = 11;
Math.floor(-11.3) = -12;
(3)round:四舍五入;
加0.5,然后向下取整。
Math.round(11.3) = 11;
Math.round(11.8) = 12;
Math.round(-11.3) = -11;
Math.round(-11.8) = -12;
5、String 属于基础数据类型吗?
不属于。
八种基本数据类型:byte、short、char、int、long、double、float、boolean。
6、String str="i"与 String str=new String(“i)一样吗?
String str="i“它将被分配到常量池中。常量池中没有重复元素。如果常量池中存储了I,则将I的地址赋予变量。如果没有,创建一个,然后赋予变量。
String str=new String(“i)将对象分配到堆中,即使内存相同,也会重新创建一个新的对象。
7、如何反转字符串?
将对象封装到stringbuilder中,调用reverse方法进行反转。
8、String 常用的方法有哪些?
(1)String类常见的获取功能
length:获取字符串长度;
charAt(int index):获取指定索引位置的字符;
indexOf(int ch):在字符串中首次出现指定字符的索引返回;
substring(int start):从指定位置截取字符串,默认到末尾;
substring(int start,int end):截取字符串,从指定位置到指定位置结束;
(2)String类常见的判断功能
equals(Object obj): 比较字符串的内容是否相同,区分大小写;
contains(String str): 判断字符串中是否包含传递的字符串;
startsWith(String str): 判断字符串是否从传递的字符串开始;
endsWith(String str): 判断字符串是否以传递的字符串结束;
isEmpty(): 判断字符串的内容是否为空”;
(3)String类常见的转换功能
byte[] getBytes(): 将字符串转换为字节数组;
char[] toCharArray(): 将字符串转换为字符数组;
String valueOf(char[] chs): 将字符数组转换为字符串。valueof可以将任何类型转换为字符串;
toLowerCase(): 将字符串转换成小写;
toUpperCase(): 将字符串转换为大写;
concat(String str): 拼接字符串;
(4)其他常见的String功能
replace(char old,char new) 交换指定字符
replace(String old,String new) 交换指定字符串
trim() 清除两端的空格
int compareTo(String str) 将ASCII进行比较 码表 减法运算从第一个字母开始 返回是减法的结果。如果前几个字母根据两个字符串的长度进行减法,则返回是减法的结果。如果连接到一个字符串 返回是0。
9、new String("a") + new String("b") 会创建多少个对象?
对象1:new StringBuilder()
对象2:new String("a")
对象3:常量池中的“a"
对象4:new String("b")
对象5:常量池中的“b"
深入分析:Stringbuilder中的tostring():
对象6:new String("ab")
强调一下,toString()调用,在字符串常量池中,未生成“ab"
附加题
String s1 = new String("1") + new String("1");//s1变量记录地址为:new String
s1.intern();//在字符串常量池中生成“11”。如何理解:jdk6:创建一个新的对象“11”,有一个新的地址;jdk7:此时,“11”并没有在常量池中创建,而是在指向堆空间中创建了new String(11)地址;
String s2 = "11";
System.out.println(s1 == s2);//jdk6:false;jdk7:true
10、如何反转字符串?
将其添加到Stringbuilder中,然后调用reverse()。
11、String 常用的方法有哪些?
equals、length、contains、replace、split、hashcode、indexof、substring、trim、toUpperCase、toLowerCase、isempty等等。
12、普通类和抽象类有什么区别?
抽象类不能实例化;
抽象可以有抽象的方法,只需要说明,不需要实现;
抽象类必须是抽象类;
抽象子类必须实现抽象子类中的所有抽象方法,否则子类仍然是抽象子类;
抽象方法不能声明为静态,也不能声明为static、final修饰。
13、接口和抽象有什么区别?
(1)接口
接口用interface装饰;
接口不能实例化;
类可实现多个接口;
①在java8之前,界面中的方法是抽象的,省略了public abstract。②java8之后;静态方法可以在界面中定义,静态方法必须有方法体,普通方法没有方法体,需要实现;
(2)抽象类
abstract用于抽象类装饰;
抽象类不能实例化;
抽象只能单独继承;
抽象方法和非抽象方法可以包括在抽象类中,非抽象方法需要方法;
如果一个类继承了抽象类,①如果所有的抽象方法都实现了,子类可能不是抽象的;②如果没有所有的抽象方法,子类仍然是抽象的。
14、java 中 IO 流分为多少种?
(1)按流量划分,可分为输入流和输出流;
(2)按单位划分,可分为字节流和字符流;
字节流:inputStream、outputStream;
字符流:reader、writer;
15、BIO、NIO、AIO 有什么区别?
(1)同步阻塞BIO
连接一个线程。
JDK1.4之前,在建立网络连接时,采用BIO模式。首先启动服务端socket,然后启动客户端socket。在向服务端通信并向客户端发送请求后,首先判断服务端是否有线程响应。如果没有,它将继续等待或被拒绝。如果是这样,它将等待请求结束后才能继续执行。
(2)同步非阻塞NIO
NIO主要是为了解决BIO的大并发问题。BIO是每个请求分配一个线程。当请求过多时,每个线程占用一定的内存空间,服务器瘫痪。
JDK1.4开始支持NIO,适用于连接数量多、连接短的架构,如聊天服务器,并发仅限于应用。
请求一个线程。
(3)异步不会阻塞AIO
有效地要求一个线程。
JDK1.7开始支持AIO,适用于连接数量多、连接长的结构,如相册服务器,充分调用OS参与并发操作。