反射:允许对成员变量,成员方法和构造方法的信息进行编程访问
(java的提示)
public class getclasss {
//获取class对象的三种方式
public static void main(String[] args) throws ClassNotFoundException {
//最常用
Class clazz1 = Class.forName("com.heima.getclass.Student");
//作为参数
Class clazz2 = Student.class;
//有对象
Student s = new Student();
Class claszz3 = s.getClass();
}
public class getconstructor {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class clazz = Class.forName("com.heima.getclass.Student");
//获取公有构造方法
Constructor[] cons1 = clazz.getConstructors();
for (Constructor con : cons1) {
System.out.println(con);
}
//获取公有及私有构造方法
Constructor[] con2 = clazz.getDeclaredConstructors();
for (Constructor con : con2) {
System.out.println(con);
}
//返回单个的参数方法
Constructor c1 = clazz.getDeclaredConstructor();
System.out.println(c1);
Constructor c2 = clazz.getDeclaredConstructor(String.class,int.class);
System.out.println(c2);
//获取构造方法的权限,public1 private2 protected4 static8
int modifiers = c2.getModifiers();
System.out.println(modifiers);
//暴力反射:临时取消权限校验
c2.setAccessible(true);
Student stu = (Student) c2.newInstance("jb",11);
System.out.println(stu);
}
}
public class getField {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
//获取公有成员变量数组
Class clazz = Class.forName("com.heima.getclass.Student");
Field[] fields = clazz.getFields();
for (Field field : fields) {
System.out.println(field);
}
//获取公有单个变量
Field field = clazz.getField("name");
System.out.println(field);
//获取单个私有变量
Field name = clazz.getDeclaredField("name");
System.out.println(name);
//获取权限修饰符
int modifiers = name.getModifiers();
System.out.println(modifiers);
//获取成员变量名
String n = clazz.getName();
System.out.println(n);
//获取成员变量类型
Class<?> type = name.getType();
System.out.println(type);
//获取对象的值
Student s = new Student("张三",11);
name.setAccessible(true);
String name1 = s.name;
System.out.println(name1);
name.set(s,"里斯");
System.out.println(s);
}
}