| | reflect
提供类和接口,以获得关于类和对象的反射信息
1.实现了反射的类:
Class类:代表一个类。
Field 类:代表类的成员变量(成员变量也称为类的属性)。
Method类:代表类的方法。
Modifier类:代表修饰符。
Constructor 类:代表类的构造方法。
Array类:提供了动态创建数组,以及访问数组的元素的静态方法
2.java反射机制:
1)在Java运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法?
2) 对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的信息,以及动态调用类的方法的功能来源于JAVA的反射。从而使java具有动态语言的特性。
3.代码示例
1)注意事项:
a.运行jdk环境版本:jdk1.8.0_131
b. 编译工具:Idea 2018 版本
2)Contructor类实现反射:
代码示例:
package com.liujie.demo.Demo2;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Demo2 {
public static void main(String[] args)throws SecurityException,
NoSuchMethodException, IllegalArgumentException, InstantiationException,
IllegalAccessException, InvocationTargetException {
//反射String类的所有构造方法
Class clz= Student.class;
System.out.println("所有构造方法");
//Constructor[] cons=clz.getConstructors();
Constructor[] cons=clz.getDeclaredConstructors();
for (Constructor con : cons) {
System.out.println("Constructor构造方法为:"+con+"访问修饰权限:"+ Modifier.toString(con.getModifiers()));
}
//找无参的构造方法 Student s = new Student();
Constructor con = clz.getDeclaredConstructor();
Object obj = con.newInstance();
System.out.println("++++++++++++++++++");
System.out.println(obj);
//找带string,int类型参数的构造方法 Student s = new Student("zhangsan",12)
con = clz.getDeclaredConstructor(String.class, int.class);
obj = con.newInstance("zhangsan", 12);
System.out.println(obj);
con = clz.getDeclaredConstructor(String.class);
obj = con.newInstance("zhangsi");
System.out.println(obj);
}
}
控制台运行结果:
心得:
在程序员这行,既然你进来了,你就得准备好满满的热情,等待竞争强烈的互联网企业猛烈的风雨摧残,
平均程序员一万多的工资毕竟也不是擒手就来的
原文:https://www.cnblogs.com/xiaojieDeam/p/13542915.html