Java面试题库——反射机制

server/2024/10/23 10:23:28/

1.Java中什么是反射?

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

2.Java中如何创建Class对象?

java">//1:使用 Class.forName 静态方法
Class class1 = Class.forName("xxx.xxx.TestReflection");//2:使用类的.class 方法
Class class2 = TestReflection.class;//3:实例对象的 getClass() 方法
TestReflection testReflection = new TestReflection();
Class class3 = testReflection.getClass();

java__18">3.什么是 java 序列化?什么情况下需要序列化?

序列化:将java对象转换成字节流的过程。
反序列化:将字节流转换成Java对象的过程。
当Java对象需要在网络上传输或者持久化存储到文件中时,就需要对Java对象进行序列化处理。
序列化的实现:类实现Serializable接口。

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

动态代理是指在运行时动态地创建代理类的机制。
在运行时,创建一个新的类,即创建动态代理,可以调用和扩展目标类的方法。动态代理的类是自动生成的。
应用:Spring的AOP,加事务,加权限,加日志

5.怎么实现动态代理?

基于接口的动态代理:代理对象实现了一个或多个接口,通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口实现。代理对象的方法调用会被转发给InvocationHandler对象处理
基于类的动态代理:代理对象是目标对象的子类,通过字节码生成库(如CGLIB、Byte Buddy等)动态生成代理类。代理对象继承了目标对象的行为,并可以重写或增加目标对象的方法

6.创建反射对象的方式有哪些?

java">//1:通过Class对象获取
Class class1 = Class.forName("reflection.Student");
Student student = (Student) class1.newInstance();//2:通过类对象获取
Constructor constructor = class1.getConstructor();
Student student1 = (Student) constructor.newInstance();

7.反射可以获取对象的哪些信息?

反射获取类的构造器:getConstructors();
反射获取类的成员变量:getFileds();
反射获取类的方法:getMethods()。

8.类实例化顺序是什么样的?(会在笔试考打印顺序)

父类静态代码块/静态域->子类静态代码块/静态域 -> 父类非静态代码块 -> 父类构造器 -> 子类非静态代码块 -> 子类构造器

9.Java中创建对象的方式有哪些?

java">//方法一 关键字new:通过使用关键字new来创建对象,调用类的构造函数初始化对象 
MyClass obj = new MyClass();//方法二 反射(Reflection):通过反射机制创建对象,可以在运行时动态地创建对象实例。需要使用Class类和Constructor类来实现 
Class<?> clazz = MyClass.class; 
Constructor<?> constructor = clazz.getConstructor(); 
MyClass obj = (MyClass) constructor.newInstance();//方法三 Unsafe类:提供了一种使用底层操作直接创建对象的机制,但需要注意的是,Unsafe类属于JDK内部类,它的使用并不推荐,因为直接使用它可能导致不安全和不稳定的代码
// 获取Unsafe实例
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
Unsafe unsafe = (Unsafe) field.get(null);
// 获取对象的Class对象
Class<?> clazz = MyClass.class;
// 创建对象实例
MyClass obj = (MyClass) unsafe.allocateInstance(clazz);
// 调用对象的方法
obj.sayHello();//方法四 克隆(Clone):如果一个类实现了Cloneable接口,就可以通过调用clone()方法创建对象的副本
MyClass obj = new MyClass(); 
MyClass cloneObj = (MyClass) obj.clone();//方法五 对象反序列化(Object Deserialization):如果一个对象被序列化到文件或网络流中,可以通过反序列化操作将其还原成对象
FileInputStream fileIn = new FileInputStream("object.ser");
ObjectInputStream in = new ObjectInputStream(fileIn); 
MyClass obj = (MyClass) in.readObject();

10.Java中什么是内部类?

在Java中,可以将一个类的定义放在另一个类的内部,这就是内部类。内部类本身就是类的一个属性,与其它属性的定义方式一致。

11.内部类有哪些分类?

- 静态内部类:定义在类内部的静态类,就是静态内部类。静态内部类可以访问外部类所有的静态变量,而不可访问外部类的非静态变量;静态内部类的创建方式:new 外部类.静态内部类()。
- 成员内部类:定义在类内部,成员位置上的非静态类,就是成员内部类。成员内部类可以访问外部类所有的变量和方法,包括静态和非静态,私有和公有。成员内部类依赖于外部类的实例,它的创建方式:外部类实例.new 内部类()。
- 局部内部类:定义在方法中的内部类,就是局部内部类。定义在实例方法中的局部类可以访问外部类的所有变量和方法,定义在静态方法中的局部类只能访问外部类的静态变量和方法。局部内部类的创建方式,在对应方法内:new 内部类()。
- 匿名内部类:匿名内部类就是没有名字的内部类,日常开发中使用的比较多。除了没有名字,匿名内部类还有以下特点: 匿名内部类必须继承一个抽象类或者实现一个接口。 匿名内部类不能定义任何静态成员和静态方法。 当所在的方法的形参需要被匿名内部类使用时,必须声明为 final。 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

12.内部类的优点有哪些?

一个内部类对象可以访问创建它的外部类对象的内容,包括私有数据。
内部类不为同一包的其它类所见,具有很好的封装性。当内部类使用private修饰时,这个类就对外隐藏了。
内部类有效实现了“多重继承”,优化了Java单继承的缺陷。
匿名内部类可以很方便的定义回调。

13.匿名内部类如何访问在其外面定义的变量呢?

外部变量必须是 final 或者实质上是 final 的。这意味着变量要么被声明为 final,要么在匿名内部类中没有被重新赋值。原因是匿名内部类可以访问外部变量的值,但是不能修改外部变量的值。因为匿名内部类实例的生命周期可能超过外部方法的生命周期,所以在匿名内部类中修改外部变量的值可能会导致不可预测的结果

http://www.ppmy.cn/server/134150.html

相关文章

linux介绍与基本指令

前言 本次博客将会讲解linux的来源历史、linux操作系统的理解以及它的一些基本指令。 1.linux的介绍 linux的来源 linux的来源最初还是要说到unix操作系统的。 1968年&#xff0c;一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作…

华为配置 之 Console线路配置

目录 简介&#xff1a; 知识点&#xff1a; 配置Console线路密码 1.密码认证模式 2.AAA认证模式 知识点&#xff1a; 总结&#xff1a; 简介&#xff1a; 使用PC模拟器与路由器相连&#xff08;与交换机相连原理一样&#xff09;&#xff0c;在关机状态下&#xff0c;使用…

Java学习笔记(八)

AuthorizationManager AuthorizationManager 是 Spring Security 中用于处理授权的核心接口之一。它负责决定某个特定请求是否被允许访问特定资源。Spring Security 通过这个接口来实现复杂的授权逻辑&#xff0c;以确保用户在系统中拥有适当的权限。 AuthorizationManager接…

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (七):MongoDB的设置

本项目旨在学习如何快速使用 nodejs 开发后端api&#xff0c;并为以后开展其他项目的开启提供简易的后端模版。&#xff08;非后端工程师&#xff09; 由于文档是代码写完之后&#xff0c;为了记录项目中需要注意的技术点&#xff0c;因此文档的叙述方式并非开发顺序&#xff0…

3D虚拟服装试穿技术:迈向元宇宙与AR电商的新时代

随着电子商务的不断进化,消费者对于在线购物体验的需求也在不断提升。在这样的背景下,3D虚拟服装试穿技术正逐渐成为连接现实世界与数字世界的桥梁,为用户带来前所未有的沉浸式购物体验。本文将介绍一种创新的3D虚拟服装试穿系统——GS-VTON,它旨在克服现有技术局限,并提供…

Flutter Container组件

Over the past few years, I’ve been fortunate to collaborate with interior designers, and there’s a distinct flair to their approach to crafting captivating interiors. It’s not just about arranging furniture randomly; they meticulously plan layouts, sele…

液态神经网络 LNN

神经网络 (NN) 是 机器学习 模仿人脑结构和运算能力以从训练数据中识别模式的算法。 通过处理和传输信息的互连人工神经元网络&#xff0c;神经网络可以执行复杂的任务&#xff0c;例如 人脸识别, 自然语言理解&#xff0c;以及无需人工协助的预测分析。 尽管神经网络是一种强…

context.getExternalFilesDir()与返回的路径对照 Android 存储路径

从Android 10开始&#xff0c;对于数据访问权限要求的越来越严&#xff0c;app对于私有目录的使用越来越多&#xff0c;进而对context.getExternalFilesDir()的使用也多了&#xff0c;下面是对应传不同参获取的返回路径&#xff1a; getExternalCacheDir(); 路径为&#xff…