1、新建个实体类
// An highlighted block package test.reflect; public class Student { private int id; public String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(){} public Student(String name){ this.name = name; } public void print(){ System.out.println("id:"+this.id+"--name:"+this.name+"--age:"+this.age); } }2、通过反射获取类的信息
// An highlighted block package test.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 反射获取类信息 * */ public class demo01 { public static void main(String[] args) { String path = "test.reflect.Student"; try{ Class clazz = Class.forName(path); System.out.println("包名+类名:"+clazz.getName());//类的包名+类名 System.out.println("类名:"+clazz.getSimpleName());//类名 //获取属性信息 Field[] field = clazz.getFields();//获取public修饰属性 Field[] fields = clazz.getDeclaredFields();//获取所有属性 Field fieldid = clazz.getDeclaredField("id");//获取指定属性 for(Field f : field){ System.out.println("public属性:"+f.getName()); } for(Field f : fields){ System.out.println("所有属性:"+f.getName()); } System.out.println("指定属性:"+fieldid); //获取方法信息 Method[] methods = clazz.getDeclaredMethods(); for(Method mm:methods){ System.out.println("所有方法:"+mm); } Method m = clazz.getDeclaredMethod("getId", null); System.out.println("指定方法:"+m); //获取构造器 Constructor[] constructors = clazz.getDeclaredConstructors(); for(Constructor c : constructors){ System.out.println("所有构造器:"+c); } Constructor c1 = clazz.getDeclaredConstructor(String.class); System.out.println("带参构造器:"+c1); Constructor c2 = clazz.getDeclaredConstructor(null); System.out.println("无参构造器:"+c2); }catch(Exception e){ } } } 包名+类名:test.reflect.Student 类名:Student public属性:name 所有属性:id 所有属性:name 所有属性:age 指定属性:private int test.reflect.Student.id 所有方法:public void test.reflect.Student.setId(int) 所有方法:public int test.reflect.Student.getAge() 所有方法:public void test.reflect.Student.setAge(int) 所有方法:public java.lang.String test.reflect.Student.getName() 所有方法:public int test.reflect.Student.getId() 所有方法:public void test.reflect.Student.setName(java.lang.String) 所有方法:public void test.reflect.Student.print() 指定方法:public int test.reflect.Student.getId() 所有构造器:public test.reflect.Student() 所有构造器:public test.reflect.Student(java.lang.String) 带参构造器:public test.reflect.Student(java.lang.String) 无参构造器:public test.reflect.Student()3、通过反射操作类
// An highlighted block package test.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 反射调用方法操作类 * */ public class demo02 { public static void main(String[] args) { String path = "test.reflect.Student"; try { Class clazz = Class.forName(path); Student student = (Student) clazz.newInstance();//调用无参构造器 System.out.println(student.hashCode()); 通过反射调用构造方法 Constructor c1 = clazz.getDeclaredConstructor(String.class); Student s2 = (Student) c1.newInstance("周星星"); System.out.println(s2.getName()); System.out.println("=========================="); //通过反射调用普通方法 Student s3 = (Student) clazz.newInstance(); Method method = clazz.getDeclaredMethod("setId", int.class); method.invoke(s3, 100); System.out.println(s3.getId()); System.out.println("=========================="); //通过反射操作属性 Student s4 = (Student) clazz.newInstance(); Field f1 = clazz.getDeclaredField("age"); Field f2 = clazz.getDeclaredField("id"); Field f3 = clazz.getDeclaredField("name"); f1.setAccessible(true); f2.setAccessible(true); f3.setAccessible(true); f1.set(s4, 20); f2.set(s4, 1); f3.set(s4, "张无忌"); s4.print(); } catch (Exception e) { e.printStackTrace(); } } } 21174459 周星星 ========================== 100 ========================== id:1--name:张无忌--age:20