1.jdk和jre有什么区别?
JDK:Java Development Kit。java开发工具包。它是Java开发运行环境,面向Java程序的开发者。
JRE:Java Runtime Environment。是Java运行环境,包含了java虚拟机,java基础类库。如果不需要开发只需要运行Java程序,那么可以只安装JRE。面向Java程序的使用者。
JDK包含了JRE。同时还包含了编译java源码的编译器javac,很多工具软件,java程序编写所需的文档和demo例子程序。
JRE中包含虚拟机JVM
2.Java三大特性
1.多态 体现在重写,重载,向上转型,运行时绑定
2.继承 子类继承父类,继承属性,方法,实现代码复用
3.封装 属性私有化,方法公开化
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
两个对象equals相等,则它们的hashcode必须相等,反之则不一定。
两个对象==相等,则其hashcode一定相等,反之不一定成立。
4.final 在 java 中有什么作用?
1)修饰类:表示该类不能被继承;
(2)修饰方法:表示方法不能被重写;
(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。
当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变。
当final修饰的是一个引用类型数据时, 也就是修饰一个对象时, 引用在初始化后将永远指向一个内存地址, 不可修改.但是该内存地址中保存的对象信息, 是可以进行修改的。
5.java 中的 Math.round(-1.5) 等于多少?
Math.round(-1.5)的返回值是-1。四舍五入的原理是在参数上加0.5然后做向下取整
Math.round(3.16):3
Math.round(3.50):4
Math.round(3.6):4
Math.round(-4.5):-4
Math.round(-4.499):-4
Math.round(-4.6):-5
6.八大基础的数据类型是什么?
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
7. Java中操作字符串都有哪些类,他们之间有什么区别
String
StringBuffer
StringBuilder
1.这三个类存储的本质都是一个char类型数组.不同的是String类型的数组长度是3,而另外两个数组的长度都是19且默认值为0
3.这三个类都是以char[]的形式保存的字符串
3.String类型的字符串是不可变的,对String类型的字符串做修改操作都是相当于重新创建对象
4.StringBuffer和StringBuilder进行增删操作都是对同一个对象做操作.
5.StringBuffer中的方法大部分都使用synchronized关键字修饰,线程安全
6.StringBuilder中的方法没有synchronized,线程不安全,性能更高
7.在单线程环境下使用StringBuilder,多线程环境下使用StringBuffer.如果使用的这个字符串几乎不做修改操作,使用String。因为不调用new关键字声明String类型的变量的话它不会在堆内存中创建对象,直接指向String的常量池,并且可以复用.效率更高.
8.String str="i"与 String str=new String(“i”)一样吗?
不一样。
String str="i";
这句话的意思是把“i”这个值在内存中的地址赋给str,如果再有String str3="i";那么这句话的操作也是把“i”这个值在内存中的地址赋给str3,这两个引用的是同一个地址值,他们两个共享同一个内存。
而String str2 = new String("i");
这句话是将new String("i");的对象地址赋给str2,需要注意的是这句话是新创建了一个对象。如果再有String str4= new String("i");那么相当于又创建了一个新的对象,然后将对象的地址值赋给str4,虽然str2的值和str4的值是相同的,但是他们依然不是同一个对象了。
9.如何将字符串反转?
StringBuffer sBuffer = new StringBuffer("ad1289323bb");
StringBuffer newBuffer = sBuffer.reverse();
10.String 类的常用方法都有那些?
equals:字符串是否相同
equalsIgnoreCase:忽略大小写后字符串是否相同
compareTo:根据字符串中每个字符的Unicode编码进行比较
compareToIgnoreCase:根据字符串中每个字符的Unicode编码进行忽略大小写比较
indexOf:目标字符或字符串在源字符串中位置下标
lastIndexOf:目标字符或字符串在源字符串中最后一次出现的位置下标
valueOf:其他类型转字符串
charAt:获取指定下标位置的字符
codePointAt:指定下标的字符的Unicode编码
concat:追加字符串到当前字符串
isEmpty:字符串长度是否为0
contains:是否包含目标字符串
startsWith:是否以目标字符串开头
endsWith:是否以目标字符串结束
format:格式化字符串
getBytes:获取字符串的字节数组
getChars:获取字符串的指定长度字符数组
toCharArray:获取字符串的字符数组
join:以某字符串,连接某字符串数组
length:字符串字符数
matches:字符串是否匹配正则表达式
replace:字符串替换
replaceAll:带正则字符串替换
replaceFirst:替换第一个出现的目标字符串
split:以某正则表达式分割字符串
substring:截取字符串
toLowerCase:字符串转小写
toUpperCase:字符串转大写
trim:去字符串首尾空格
11.抽象类必须要有抽象方法吗?
抽象类不一定有抽象方法;但是有抽象方法的类一定是抽象类。(有抽象方法就是抽象类,是抽象类可以没有抽象方法)
java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。
12.普通类和抽象类有哪些区别?
1.普通类中不可含有抽象方法,可以被实例化;普通类不能包含抽象方法,抽象类可以包含抽象方法
2. 抽象类,则抽象类中所有的方法自动被认为是抽象方法,没有实现过程,不可被实例化;抽象类的子类,除非也是抽象类,否则必须实现该抽象类声明的方法
13.抽象类能使用 final 修饰吗?
抽象类就是要子类继承然后实现内部方法的。但是final修饰的类是不能再被继承和修改的。所以不能用final修饰。
14.接口和抽象类有什么区别?
实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
构造函数:抽象类可以有构造函数;接口不能有。
main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
15. java 中 IO 流分为几种?
按流向分类:
输入流
输出流
按处理数据不同分类:
字节流:二进制,可以处理一切文件,包括:纯文本、doc、音频、视频等。
字符流:文本文件,只能处理纯文本。
按功能不同分类:
节点流:包裹源头。
处理流:增强功能,提高性能。
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
按操作方式分类:
按操作对象分类:
16.BIO、NIO、AIO 有什么区别?
BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
17.== 和 equals 的区别是什么?
== 等于比较运算符,如果进行比较的两个操作数都是数值类型,即使他们的数据类型不相同,只要他们的值相等,也都将返回true.如果两个操作数都是引用类型,那么==比较的是两个变量的内存地址。
equals()方法是Object类的方法,在Object类中的equals()方法体内实际上返回的就是使用==进行比较的结果。但是equals()可以被重写。
String类比较特殊。因为它创建爱你的对象实在常量池中。一个常量只会有一个地址,所以用==比较也是可以的。
18.& 和 && 的区别是什么?
1.都是逻辑与,左右两边同时满足可返回true
2.&&:短路与。既&& 左边条件不满足,不会判断右边条件。而& 无论左边条件是否满足,都不会判断右边条件。
3.&可用于位运算。左右两边的条件不是布尔类型而是数字时,会进行位运算。 例如:2 & 3 这就会进行位运算