1.JDK和JRE区别?
JRE:即Java程序的运行时环境,包含了Java虚拟机,Java基础类库。
JDK:即Java语言编写的程序所需要的开发工具包。JDK包含了JRE,同时还包括Java源码的编译器javac、监控工具jconsole、分析工具jvisualvm等
2.==和equals的区别?
==是关系运算符,equals()是方法,结果都返回布尔值
object的==和equeal()比较的都是地址,作用相同
==作用:
基本类型,比较值是否相等
引用类型,比较内存地址值是否相等
不能比较没有父子关系的两个对象
equals()方法的作用:
JDK中的类一般已经重写了equals(),比较的是内容
自定义类如果没有重写equals(),将调用父类(默认Object类)的equals()方法,Object的equeals()比较使用this==obj
可以按照需求逻辑,重写对象的equals()方法(重写equals方法,一般必须重写hashCode方法)
3.什么是装箱?什么是拆箱?
装箱:基本类型转变为包装器类型的过程。
拆箱:包装器类型转变为基本类型的过程。
JDK1.5以前是不支持自动装箱拆箱的,定义Integer对象,必须Integer i = new Integer(5)
JDK1.5开始,提供了自动装箱的功能,定义Integer对象可以这样Integer i = 5;
自动拆箱int n = i
装箱和拆箱的执行过程?
装箱是通过调用包装器类的valueOf方法实现的
拆箱是通过调用包装器类的xxxValue方法实现的,xxx代表对应的基本数据类型
如int装箱的时候自动调用Integer的valueOf(int)方法;Integer拆箱的时候自动调用Integer的intValue方法
4.final在Java中的作用
final语义是不可改变的。
被final修饰的类,不能够被继承
被final修饰的成员变量必须要初始化,赋初值后不能再重新赋值(可以调用对象方法修改属性值)对基本类型来说是其值不可边;对引用变量来说其引用不可变,即不能再指向其他的对象
被final修饰的方法不能重写
5.final与static
都可以修饰类、方法、成员变量
都不能用于修饰构造方法
static可以修饰类的代码块,final不可以
static
static修饰表示静态或全局,被修饰的属性和方法属于类,可以用类名.静态属性/方法名 访问
static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行改代码块,只会被执行一次
static修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,只会被创建一次
static修饰的变量可以重新赋值
static方法中不能用this和super关键字
static方法必须被实现,而不能是抽象的abstract
static方法不能被重写
final
final修饰表示常量、一旦创建不可改变
final标记的成员变量必须在声明的同时赋值,或在该类的构造方法中赋值,不可以重新赋值
final方法不能被子类重写
final类不能被继承,没有子类,final类中的方法默认是final的
6.return与finally的执行顺序对返回值的影响
对于try和finally至少一个语句块包含return语句的情况:
finally语句块会执行
finally没有return,finally对return变量的重新赋值修改无效
try和finally都包含return,return值会以finally语句块return值为准
7.Math.round(-1.5)等于多少?
JDK中java.lang.Math类
ceil():向上取整,返回小数所在两整数间的较大值,返回类型是double,如-1.5返回-1.0
floor():向下取整,返回小数所在两整数间的较小值,返回类型是double,如-1.5返回-2.0
round():朝正无穷大方向返回参数最接近的整数,可以换算为参数+0.5向下取整,返回值是int或long,如-1.5返回-1
8.String属于基础的数据类型吗?
不属于。
Java中8种基础的数据类型:byte、short、char、int、long、float、double、boolean但是String类型却是最常用到的引用类型
String类的常用方法:
equals:字符串是否相同
equalslgnoreCase:忽略大小写后字符串是否相同
compareTo:根据字符串中每个字符的Unicode编码进行比较
compareTolgnoreCase:根据字符串中每个字符的Unicode编码进行忽略大小写比较
indexOf:目标字符或字符串在源字符中位置下标
lastIndexOf:目标字符或字符串在源字符串中最后一次出现的位置下标
valueOf:其他类型转字符串
9.Java中操作字符串都有哪些类?
Java中,常用的对字符串操作的类有String、StringBuffer、StringBuilder
String:final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象
StringBuffer:对字符串的操作的方法都加了synchronized,保证线程安全
StringBuilder:不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append()、replace()、delete()等方法修改字符串
10.throw和throws的区别
throw:
表示方法内抛出某种异常对象(只能是一个)
位于方法体内部,可以作为单独语句使用
如果异常对象是非RuntimeException则需要在方法申明时加上该异常的抛出,即需要加上throws语句或者在方法体内try catch处理该异常,否则编译报错
执行到throw语句则后面的语句块不在执行
throws:
方法的定义上使用throws表示这个方法可能抛出某些异常(可以有多个)
用于声明在该方法内抛出了异常
必须在方法参数列表的后面,不能单独使用
需要由方法的调用者进行异常处理