其他资料
每日速记10道java面试题01-CSDN博客
每日速记10道java面试题02-CSDN博客
目录
一、你使用过java的反射机制吗?如何应用反射?
二、什么是泛型?泛型的作用是什么?
三、java的泛型擦除是什么?
四、Java 中的深拷贝和浅拷贝有什么区别?
五、什么是 Java 的 Integer 缓存池?
六、java的类加载过程是怎样的?
七、String s = new String("abc")会创建几个对象?
八、如果一个线程在 Java 中被两次调用 start0) 方法,会发生什么?
九、java的IO流是什么?
十、java的基本数据类型有哪些?
‘‘’
一、你使用过java的反射机制吗?如何应用反射?
Java 的反射机制是指在运行时获取类的结构信息(如方法、字段、构造函数)并操作对象的一种机制。
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性,并且能改变它的属性。
Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。其本质是JVM得到Class对象之后,再通过Class对象进行反编译,从而获取对象的各种信息。
java反射的优点:
可以动态地获取类的信息,不需要在编译时就知道类的信息。
可以动态地创建对象,不需要在编译时就知道对象的类型。
可以动态地调用对象的属性和方法,在运行时动态地改变对象的行为。
应用场景有:
spring就是使用反射机制来读取配置文件,实现依赖注入和aop。
二、什么是泛型?泛型的作用是什么?
泛型允许类、接口和方法在定义时使用一个或多个类型参数,这些类型参数在使用时可以被指定为具体的类型。
类型安全:运行时异常转为编译时异常,提早发现异常,确保类型安全
代码重用:方法或者类,可以使用泛型,使方法和类能够处理多种不同的数据类型。而不用每个数据类型都写一个方法或者类。
三、java的泛型擦除是什么?
java的泛型擦除是指java编译器在编译过程中将所有的泛型信息删除的过程,这样做的目的是为了保证java版本的兼容性,因为在java5之前一些集合比如ArrayList和LinkedList都是非泛型化的,java5之后这两个集合都是泛型化的,为了保证这两个java版本的兼容性,就有这个泛型擦除。
会在编译的时候将<E>替换成Object,并通过插入类型转换指令保持类型安全和多态性。
四、Java 中的深拷贝和浅拷贝有什么区别?
深拷贝:不仅拷贝对象本身和基本类型成员变量,堆内的引用对象也会复制一份(相互独立不干扰)
浅拷贝:仅拷贝对象本身和基本类型成员变量,共享堆内的引用对象(仅复制引用地址)
五、什么是 Java 的 Integer 缓存池?
java的Interger缓存池为了提高性能和减少内存,在-128到127以内的对象会被缓存并复用,例如:interger a =127,这时候就会将a放进interger缓存池,在interger b =127的时候,并不是重新创建创建一个对象,而是去interger缓存池查找有没有这个值的缓存对象,有的话直接拿过来用,没有才去重新创建并存入缓存池。
六、java的类加载过程是怎样的?
Java的类加载过程包括加载、链接和初始化三个主要步骤。
1.在加载阶段,通过类加载器将类文件加载到内存中,生成一个Class对象。
2.在链接阶段,包括 验证 、 推备 和 解析 三个子阶段,确保类的字节码安全并为静态变量分配内存和进行符号引用解析。
3.最后在初始化阶段,执行类的初始化逻辑,将静态变量和静态代码块的初始化操作整合并执行。
七、String s = new String("abc")会创建几个对象?
1.首先,new会先在堆内存中创建一个String对象(第一个对象,称它为new String对象吧),并让s引|用指向该对象。
2.JVM用字面量”abc“去字符串常量池中尝试获取“abc”对应的String对象的引用。
2.1 如果获取成功,则让new String对象引用常量池中的"abc”
2.2 如果获取失败,则在堆内存中创建一个"abc"的String对象(第二个对象),并把它的引用保存在字符串常量池。然后让newString对象引用常量池中的"abc"。
所以,使用new String方法时,会创建1个或者2个对象。
八、如果一个线程在 Java 中被两次调用 start0) 方法,会发生什么?
会报错!因为在 Java 中,一个线程只能被启动一次!所以尝试第二次调用 start0) 方法时,会抛出 legalThreadStateException 异常。这是因为一旦线程已经开始执行,它的状态不能再回到初始状态。线程的生命周期不允许它从终止状态回到可运行状态。
九、java的IO流是什么?
Java的I/O流是用于处理数据输入输出的类库,可以从各种位置读取数据,也可以将数据写入特定位置I/O流分为两大类:
字节流:处理8字节数据,适合处理二进制文件,比如图片、视频。承担任务的类有Inputstream和Outputstream类及其子类。
字符流:处理16字节数据,适合处理文本文件。承担任务的类有Reader和Writer及其子类。
十、java的基本数据类型有哪些?
四种八类
1.整型
o byte 1字节
oshort 2字节
o int 4字节
o long 8字节
2.浮点型
o float 4字节
odoble 8字节
3. 字符型
ochar 2字节
4.布尔型
oboolean 不定