RuntimeException异常和受检异常之间的区别:是否强制要求调用者必须处理此异常,如果强制要求调用者必须进行处理,那么就使用受检异常,否则就选择非受检异常(RuntimeException)。一般来讲,如果没有特殊的要求,我们建议使用RuntimeException异常。
什么时候会发生空指针异常?
答:对值为空的变量进行操作时
你知道有哪些避免空指针异常的方法?
答:对值为空的变量进行操作时先判断是否为空
throw和throws有什么区别?
答:throw用于在方法中抛出异常,throws写在方法名称后面,用于声明抛出的异常类型
try里面return,finally还会执行吗?
答:会的,除了System.exit(0)finally都会执行
int和Integer有什么区别?
答:int是java的基本数据类型,Integer是Java的引用数据类型。Integer是int的包装类,它提供了对int的转换和计算等API,操作起来更加方便
什么是包装类型?有什么用?
答:包装类型是对基本数据类型的封装,底层其实就是对基本数据类型的操作提供了API和语法糖
什么是自动装箱和拆箱?
答:基本数据类型转引用数据类型为自动拆箱,反之为自动装箱
你怎么理解Java中的自动类型转换和强制类型转换?
答:小转大自动转换,拓展变量的内存字节。大转小强制转换,缩小内存字节损失精度
你怎么理解Java中的类型提升?
答:语法糖
你怎么理解强、软、弱、虚引用?
答:
switch是否能用在long上?
答:可以,switch支持int、byte、short、char以及对应的包装类,和String类型
switch case支持哪几种数据类型?
答:如上
String的底层实现是怎样的?
答:char数组,以及字符串常量池
String是可变的吗?为什么?
答:不可变,java中的字面量字符串都存放在字符串常量池中,无法改变,只能引用
为什么不能用 + 拼接字符串?
答:因为如果用+号拼接字符串JVM编译时会进行优化,转变为StringBuilder拼接。单个表达式使用问题不大,但是如果是多个表达式或者在循环内使用会频繁创建StringBuilder对象大大降低性能
StringBuffer和StringBuilder有什么区别?
答:前者线程安全效率低,后者线程不安全效率高,
StringJoiner有什么用?
答:用于做字符串拼接的工具类
//间隔符是, StringJoiner joiner1 = new StringJoiner(","); joiner1.add("1").add("2").add("3"); System.out.println(joiner1.toString()); //1,2,3 //以[开头中间的间隔符是,以]结尾 StringJoiner joiner2 = new StringJoiner(",", "[", "]"); joiner2.add("1").add("2").add("3"); System.out.println(joiner2.toString()); //[1,2,3] //拼接sql 的in条件的时候, 使用这个就方便很多了 StringJoiner joiner3 = new StringJoiner("','", "'", "'"); joiner3.add("1").add("2"); //'1','2'
普通类和抽象类有什么区别?
答:抽象类被abstract所修饰,
静态内部类和普通内部类有什么区别?
答:普通内部类持有外部外部类的应用,可以调用外部类的属性及方法,而静态内部类没有持有外部内引用,无法调用外部内的方法及属性。静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成 员(方法,属性)。 非静态内部类能够访问外部类的静态和非静态成员。静态内部类不能访问外 部类的非静态成员,只能访问外部类的静态成员。
实例化方式不同:
静态内部类:不依赖于外部类的实例,直接实例化内部类对象
非静态内部类:通过外部类的对象实例生成内部类对象
静态方法可以直接调用非静态方法吗?为什么?
答:不能,因为静态方法的加载顺序优先于非静态方法,且静态方法属于类,无需对象实例,非静态方法则需要类的实例才能调用
静态变量和实力变量有什么区别?
答:静态变量属于类,无需创建对象通过类名即可调用,而实例变量需要类创建实例才可以调用。加载角度而言只要JVM加载了静态变量所处的类,静态变量就以及可以使用,为分配了空间。而实例变量需要创建对象之后才会为其分配空间
内部类可以访问其外部类的成员吗?
答:非静态内部类可以,因为它持有者外部内的引用。
接口和抽象类有什么区别?