Java的反射机制也会是面试中较常问到的点。建议可以从基本定义,语法和实际应用3方面作答。
1、基本定义
反射机制是在运行状态中,
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2、基本语法
1)获取Class对象
一般有3种形式:
Class<?> class1 = Class.forName("全限定类名");
Class<?> class2 = new TestReflect().getClass();
Class<?> class3 = TestReflect.class;
System.out.println("类名称 " + class1.getName());//将打印出全限定类名(包名.类名)
2)实例化一个类的对象
方法一:newInstance
Class<A> class1 = Class.forName("全限定类名");
A a = class1.newInstance();
//调用a的set方法
方法二:构造函数
Constructor<A> cons[] = class1.getConstructors();//该类的全部构造函数
A a = (A) cons[0].newInstance();//无参
a = (A) cons[1].newInstance("value1", "value2");//带参
3)获取父类和接口(单继承多实现)
父类:
Class<A> clazz = Class.forName("全限定类名");
Class<?> parentClass = clazz.getSuperclass();
System.out.println("clazz的父类为:" + parentClass.getName());
接口:
Class<?> intes[] = clazz.getInterfaces();//该类所有接口
for (int i = 0; i < intes.length; i++) {
System.out.println((i + 1) + ":" + intes[i].getName());
}
4)获取一个类全部属性:
Class<A> clazz = Class.forName("全限定类名");
Field[] field = clazz.getDeclaredFields();
for (int i = 0; i < field.length; i++) {
// 权限修饰符
int mo = field[i].getModifiers();
String priv = Modifier.toString(mo);
// 属性类型
Class<?> type = field[i].getType();
System.out.println(priv + " " + type.getName() + " " + field[i].getName() + ";");
}
5)获取一个类全部方法:
Class<A> clazz = Class.forName("全限定类名");
Method method[] = clazz.getMethods();
for (int i = 0; i < method.length; ++i) {
Class<?> returnType = method[i].getReturnType();//返回值类型
Class<?> para[] = method[i].getParameterTypes();//参数类型
String Modify = Modifier.toString(method[i].getModifiers());//修饰符
}
6)调用某个类的方法
Class<A> clazz = Class.forName("全限定类名");
Method method = clazz.getMethod("方法名", {参数类型1.class,参数类型2.class,……});
method.invoke(clazz.newInstance(), {参数值1,参数值2,……});
3、反射机制的应用举例:结合工厂模式
interface Animal { public abstract void eatFood(); } class Monkey implements Animal { @Override public void eatFood() { System.out.println("monkey eat peach ..."); } } class Panda implements Animal { @Override public void eatFood() { System.out.println("Panda eat bamboo ..."); } } class Factory { public static Animal getInstance(String ClassName) { Animal animal = null; try { animal = (Animal) Class.forName(ClassName).newInstance(); } catch (Exception e) { e.printStackTrace(); } return animal; } }
我们来调用一下~
public static void main(String[] args) { Animal animal = Factory.getInstance("com.nineclient.Panda"); if(animal != null) { animal.eatFood(); } }
运行结果:
Panda eat bamboo ...
从以上3个点答反射机制,基本上就行了~~
相关推荐
下面通过一个简单的示例展示如何使用Java反射机制: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionDemo { public ...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,打破了通常编译时静态绑定的限制。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段值,甚至...
4. 多态机制:Java语言通过方法重写和方法重载实现多态性。 类和接口 1. 抽象类和接口的对比:抽象类和接口都是抽象的概念,抽象类可以包含具体实现,而接口只能包含抽象方法。 2. 普通类和抽象类的区别:普通...
"反射机制面试题知识点总结" 一、数组初始化方式 在 Java 中,数组可以通过多种方式进行初始化。首先,可以使用 `new` 关键字来创建一个数组,并指定其长度和类型,例如 `int i[] = new int[12];`、`Class c[] = ...
Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结 : Java 集合常见知识点&面试题总结(上) (必看 ) Java 集合常见知识点&...
Java 反射机制与 IO 流 Java 中的反射机制和 IO 流是两个非常重要的概念。在本文中,我们将详细探讨 Java 中的反射机制和 IO 流,包括字节流和字符流的区别、Java 序列化的实现等。 一、Java 反射机制 Java 反射...
这份压缩包文件包含了一系列关于Java面试的文档和文本,旨在帮助你全面了解并掌握面试中可能遇到的问题。以下是一些主要的Java知识点,根据这些文档标题可以预见到的内容: 1. **Java基础**:Java面试题-COREJAVA...
Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结: Java 集合常见知识点&面试题总结(上) (必看 ) Java 集合常见知识点&...
Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结: Java 集合常见知识点&面试题总结(上) (必看 ) Java 集合常见知识点&...
11. **反射机制**:Java反射允许程序在运行时动态获取类信息并操作类的属性和方法,增加了程序的灵活性。 12. **序列化**:序列化是将对象转换为字节序列的过程,便于存储和传输,实现Serializable接口的对象可以被...
- **反射机制**:在运行时获取类的信息并操作对象,包括Class类、Constructor、Method和Field的使用。 以上只是Java基础面试题的一部分,实际的面试可能会涵盖更多细节,如设计模式、JVM原理、数据库操作、并发...
这份名为"面试题汇总:Markdown编写,作为Java知识库提供给Java面试必考小程序使用.zip"的压缩包,显然是为了帮助Java求职者准备面试而设计的。它包含了丰富的Java知识和面试常见问题,以Markdown格式编写,易于阅读...
本篇文章将深入探讨Java面试中常见的基础问题及其答案,涵盖了从Java基础到高级特性的各个方面。 1. **Java语言特点**:Java具有简单性、面向对象、健壮性、安全性、可移植性、高性能、多线程、动态性等特点,这些...
2. **反射机制**:反射允许程序在运行时动态获取类的信息并操作类的对象,这对于构建高度灵活的应用程序非常有用。 3. **泛型**:泛型提供了编译时类型安全的方法来避免运行时类型转换错误,同时提高了代码的复用性...
9. **Java反射和注解**:反射允许在运行时动态操作类和对象,而注解则提供了元数据信息,这两者在很多高级场景中都有重要作用。 10. **Spring框架**:作为企业级应用开发的主流框架,Spring的IoC容器、AOP、MVC模式...
"Java常见笔试、面试系列深度剖析第三讲"可能涵盖了一系列关键概念,旨在帮助求职者或开发者更好地理解和掌握Java的核心特性。其中,"反射详解"是这次讲解的重点内容之一。反射在Java中扮演着至关重要的角色,它允许...
12. **反射与注解**:Java反射机制允许程序在运行时动态访问类的信息,注解则为代码提供了元数据,这两者在实际开发中都有广泛应用。 13. **并发编程**:Java并发库提供了丰富的工具,如ExecutorService、Future、...
3. **JAVA核心面试知识整理**:这部分内容可能涵盖Java基础,如内存模型、垃圾收集、类加载机制、多态、封装、继承、接口、异常处理、集合框架(List、Set、Map的区别和使用)、IO流、NIO、反射、枚举、注解等。...
- **反射机制**:说明反射的用途及其实现方式,探讨其性能影响及应用场合。 - **自定义注解**:讲解自定义注解的使用场景及其实现过程。 - **List与Map区别**:比较List和Map的使用场景,以及ArrayList与LinkedList...