Java的反射机制在Java编程语言中是十分的重要的,本篇文章,我为大家总结了Java编程语言中反射的知识点,包括反射的基本概念、使用反射获取class对象和怎么使用获取了的class对象的功能。
一、反射的基本概念
1、反射的概念
将类的各个组成部分封装成其他对象,这就是反射的机制.
通过上图,我们可以通过反射获得Person类的Class对象,通过获得Class对象来获得其中的成员变量,构造方法和成员方法,这个也是我们使用反射的目的。
2、使用反射的好处
可以在程序的运行过程中操作这些对象,获得类对象的属性,方法等.
可以解耦,以此来提高程序的可扩展性
3、补充
反射:框架设计的灵魂,反射是框架设计的关键点
那么知道了反射,框架又是什么呢
框架:半成品软件,我们在开发的过程中可以在框架的基础上使用一些封装好的类进行软件开发,这样就可以简化编码了.
二、获取Class对象
1、获取Class对象的方式
Class.forname(“全类名”):将字节码文件加载进内存,返回class对象
类名.class:通过类名的属性class获取
对象.getclass():因为getclass()方法在object类中定义,又因为所有类都会继承object类,所以所有类都有这种方法
2、演示上面三种获取对象的方式
Person类
public class Person {
}
Main类
public class Main {
public static void main(String[] args) throws Exception {
Class person = Class.forName("test.Person");
Class person1 = Person.class;
Person p = new Person();
Class person2 = p.getClass();
System.out.println(person);
System.out.println(person1);
System.out.println(person2);
}
}
程序运行结果
结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个
三、使用class对象功能
1、class对象具体功能方法介绍
2、具体功能演示
因为所有的方法使用方式类似,在这里我就只演示获取成员变量的方法了
Person类
public class Person {
public String name;
private int age;
public String sex;
}
Main类
public class Main {
public static void main(String[] args) throws Exception {
Class person = Class.forName("test.Person");
Field[] fields = person.getFields();
System.out.println("getFields():只能获得公有的属性");
for(int i = 0;i<fields.length;i++){
System.out.println(fields[i]);
}
System.out.println("-----------------------------");
Field[] fields1 = person.getDeclaredFields();
System.out.println("getDeclaredFields():能获得所有的属性");
for(int i = 0;i<fields1.length;i++){
System.out.println(fields1[i]);
}
System.out.println("-----------------------------");
Field field = person.getField("name");
System.out.println("getField():获得单个公有属性");
System.out.println(field);
}
}
程序运行结果
getFields():只能获得公有的属性
public java.lang.String test.Person.name
public java.lang.String test.Person.sex
-----------------------------
getDeclaredFields():能获得所有的属性
public java.lang.String test.Person.name
private int test.Person.age
public java.lang.String test.Person.sex
-----------------------------
getField():获得单个公有属性
public java.lang.String test.Person.name
总结
到此本篇关于 Java 的反射机制知识点的总结以及反射的获取方法的文章就介绍结束了,想要了解更多相关 Java 反射的其他详细内容请搜索W3Cschool以前的文章或继续浏览下面的相关文章,也希望大家以后多多支持!