JAVA基础篇-反射与克隆
2026/5/4 6:53:03 网站建设 项目流程

反射

1、java反射的作用是什么?

反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法

2、Java反射创建对象效率高还是通过new创建对象的效率高?

通过new创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低。

3、如何创建反射?

使用new关键字
使用Java反射机制,反射构造器
Class cl = Class.forName("com.gun.classforName.Users");
使用克隆方式创建对象Cloneable
UserDto dto2 = dto.clone();
使用序列化Serializable

/** * 序列化方式创建对象 * @author jkl * */ public class TestSerializable { public static void main(String[] args) throws Exception { HolleDto dto = new HolleDto(); dto.setId(2022); dto.setAge(35); dto.setName("王米兰"); outPutStream(dto); HolleDto dto2 = outPutStreamBack(); System.out.println(dto==dto);// 返回 true : 表明两个对象是相对的 System.out.println(dto.equals(dto2));//返回: false System.out.println(dto.hashCode());// 865113938 System.out.println(dto2.hashCode()); //1808253012 System.out.println(dto.toString());// HolleDto [id=2022, name=王米兰, age=35] System.out.println(dto2.toString()); // HolleDto [id=2022, name=王米兰, age=35] } //序列化对象 public static void outPutStream(HolleDto dto){ String path = "G:\\spring-work\\java-juc\\myguyuyun\\holle.txt"; File file = new File(path); FileOutputStream fos; try { fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(dto); } catch (IOException e) { e.printStackTrace(); } } //反序列化对象 public static HolleDto outPutStreamBack( ) throws ClassNotFoundException{ String path = "G:\\spring-work\\java-juc\\myguyuyun\\holle.txt"; HolleDto dto = null ; File file = new File(path); FileInputStream fis ; ObjectInputStream ois; try { fis = new FileInputStream(file); ois = new ObjectInputStream(fis); dto =(HolleDto) ois.readObject(); } catch (IOException e) { e.printStackTrace(); } return dto; } }

4、反射的实现方式都有什么?

答:获取Class对象,有4种方法:(1)Class.forName(“类的路径”);(2)类名.class;(3)对象名.getClass();(4)基本类型的包装类,可以调用包装类的Type属性来获得该包装类的Class对象。

5、实现java反射的类有什么?

答:(1)Class:表示正在运行的Java应用程序中的类和接口,注意所有获取对象的信息都需要Class类来实现; ​ (2)Field:提供有关类和接口的属性信息,以及对它的动态访问权限; ​ (3)Constructor:提供关于类的单个构造方法的信息以及它的访问权限; ​ (4)Method:提供类或接口中某个方法的信息。

6、反射机制的优缺点:

优点:(1)能够运行时动态获取类的实例,提高灵活性; (2)与动态编译结合Class.forName(‘com.mysql.jdbc.Driver.class’);//加载MySQL的驱动类 缺点:使用反射性能较低,需要解析字节码,将内存中的对象进行解析。 ​其解决方案是:通过setAccessible(true)关闭JDK的安全检查来提升反射速度;多次创建一个类的实例时,有缓存会快很多;ReflflectASM工具类,通过字节码生成的方式加快反射速度。

7、Java反射API有几类?

答:反射 API 用来生成 JVM 中的类、接口或则对象的信息。 ​ (1)Class 类:反射的核心类,可以获取类的属性,方法等信息。 ​ (2)Field 类:Java.lang.reflec 包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。 ​ (3)Method 类:Java.lang.reflec 包中的类,表示类的方法,它可以用来获取类中的方法信息或者执行方法。 ​ (4)Constructor 类:Java.lang.reflec 包中的类,表示类的构造方法。

8、反射使用步骤(获取Class对象、调用对象方法)

答:(1)获取想要操作的类的Class对象,他是反射的核心,通过Class对象我们可以任意调用类的方法。 ​ (2)调用 Class 类中的方法,既就是反射的使用阶段。 ​ (3)使用反射 API 来操作这些信息。

9、Java反射机制的作用有什么?

答:作用有(1)在运行时判断任意一个对象所属的类;(2)在运行时构造任意一个类的对象;(3)在运行时判断任意一个类所具有的成员变量和方法;(4)在运行时调用任意一个对象的方法。

10.什么是反射?

反射是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制

11.哪里用到了反射机制?

JDBC中,利用反射动态记载了数据库驱动程序 Web服务器中利用反射调用了Servlet的服务方法 很多框架都用到了反射机制,注入属性,调用方法,spring

12.什么叫对象序列化?什么是反序列化?实现对象序列化需要那些工作?

对象序列化,将对象中的数据 编码为 字节序列的过程 反序列化:将对象的编码字节重新反向解码为对象的过程 JAVA提供了API实现了对象的序列化和反序列化的功能,使用这些API时需要遵循一些约定: 1.被序列化的对象类型需要实现序列化的功能,此接口是标志接口,没有声明任何的抽象方法,JAVA编译器识别这个接口,自动的为这个类添加序列化和反序列化方法。 为了保持序列化过程的稳定,建议在类中添加序列化版本号。 不想让字段放在硬盘上就加transient ​ 以下情况需要使用 Java 序列化: 想把的内存中的对象状态保存到一个文件中或者数据库中时候; 想用套接字在网络上传送对象的时候; 想通过RMI(远程方法调用)传输对象的时候。

13.什么是动态代理?有哪些应用?

动态代理是运行时动态生成代理类。 动态代理的应用有 Spring AOP数据查询、测试框架的后端 mock、rpc,Java注解对象获取等。

14.如何实现动态代理?

JDK 原生动态代理和 cglib 动态代理。 JDK 原生动态代理是基于接口实现的,而 cglib 是基于继承当前类的子类实现的。

克隆

1.为什么要使用克隆

克隆的对象可能包含一些已经修改过的属性,而new 出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“对象”就靠克隆方法了。

2.如何实现克隆

实现cloneAble 接口并重写 Object类中的 clone() 方法。

实现 Serialzable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。

3.深拷贝和浅拷贝的区别

浅拷贝:当对象被复制时值复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。

深拷贝:除了对象本身被复制外,对象所包含的所有的成员变量也将复制。

提供一个详细介绍深拷贝和浅拷贝的地址:https://juejin.cn/post/6844904197595332622

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询