一、反射机制概述
1、反射机制的作用:
通过Java语言中的反射机制可以操作字节码文件。
可以读和修改字节码文件(类似于黑客)
Java中,反射是一种强大的工具。
2、Java反射机制相关类在:Java.lang.reflect
3、反射机制相关的重要的类有:
java.lang.class:代表整个字节码。class文件
java.lang.reflect.Method:代表字节码中的方法字节码
java.lang.reflect.Constructor:代表字节码中的构造方法字节码
java.lang.reflect.Field:代表字节码中的属性字节码
4、必须掌握的重点就是:
- - 通过反射机制访问对象的属性
- - 通过反射机制调用方法
- - 获取父类和父接口
其它的只需要了解就行。
二、获取class的三种方式
其最重要的一个作用就是可以动态地创建类的对象,获取方法如下
第一种方式:通过Class c1 = Class.forName("java.lang.String");
- public static 类<?> forName(String className)
返回与具有给定字符串名称的类或接口关联的
类
对象。
public class test03{
public static void main(String args[]){
/*Class.forName:
* 1、静态方法
* 2、方法的参数是String类型的
* 3、字符串必须是一个完整的类名,即必须带有包名*/
Class c1 = null;
try {
c1 = Class.forName("java.lang.String");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
System.out.println(c1);//c1代表String.class文件,或者说c2代表String类型
//class java.lang.String
}
}
第二种方式:通过Class x = 对象.getClass();
import java.util.Date;
public class test03{
public static void main(String args[]){
Class c1 = null;
Class c2 = null;
try {
c1 = Class.forName("java.lang.String");
c2 = Class.forName("java.util.Date");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
System.out.println(c1);
//第二种方式:Java中任何一个对象都有一个方法:get.class()
String s = "abc";
Class x = s.getClass(); //x代表String.class文件,或者说x代表String类型
System.out.println(x==c1);//true(==比较的是内存地址,说明两个的内存地址是一样的)
Date date = new Date();
Class y = date.getClass();
System.out.println(y==c2);//true
//(y和c2两个变量中保存的内存地址都是一样的,都指向方法区中的字节码文件)
}
}
第三种方式:Java语言中 任何一种数据类型(包括基本数据类型),都有一个.Class属性
Class c= 任何类型.class;
import java.util.Date;
public class test03{
public static void main(String args[]){
Class c1 = null;
Class c2 = null;
try {
c1 = Class.forName("java.lang.String");
c2 = Class.forName("java.util.Date");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
System.out.println(c1);//c1代表String.class文件,或者说c1代表String类型
//输出:class java.lang.String
//第二种方式:Java中任何一个对象都有一个方法:get.class()
String s = "abc";
Class x = s.getClass(); //x代表String.class文件,或者说x代表String类型
System.out.println(x==c1);//true(==比较的是内存地址,说明两个的内存地址是一样的)
Date date = new Date();
Class y = date.getClass();
System.out.println(y==c2);//true
//第三种方式:Java语言中 任何一种数据类型(包括基本数据类型),都有一个.Class属性
Class z = String.class;
Class w = int.class;
System.out.println(z==x);//true
}
}
在反射机制中,Class是一个非常重要的类,那么如何才能获取Class类呢?总共有以下三种方法可以获取
1)Class.forName("类的路径")
2)类名.Class
3)实例.getClass()
三、面试题
Java创建对象的方式总共有以下几种:
1)通过new语句实例化一个对象
2)通过反射机制创建对象
3)通过clone()方法创建对象
4)通过反序列化的方式创建对象
如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,你的鼓励将是我创作的最大动力!!