反射
- package com.sk.test;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- public class TestStudent
- {
- public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException
- {
- //1.获取Student类的class对象,方式一
- Student s1 = new Student();
- Class c1 = s1.getClass();
- //2.获取Student类的class对象,方式二
- Class c2 = Student.class;
- //3.获取Student类的class对象,方式三(常用)
- Class c3 = Class.forName("com.sk.test.Student");
- //获取Student类的所有属性
- Field[] f1 = c3.getDeclaredFields();
- for (Field f : f1)
- {
- System.out.println("Sutdetn类的属性:" + f);
- }
- System.out.println("==========================================================");
- //获取Student类的所有构造方法
- Constructor[] con1 = c3.getDeclaredConstructors();
- for (Constructor con : con1)
- {
- System.out.println("Student类的构造方法:" + con);
- }
- System.out.println("==========================================================");
- //获取Student类的所有方法(getDeclaredMethods()包括public,private,protected,default 但不包括父类Object的方法)
- Method[] m1 = c3.getDeclaredMethods();
- for (Method m : m1)
- {
- System.out.println("Student类的方法:" + m);
- }
- System.out.println("==========================================================");
- //获取Student类的所有方法(getMethods()包括Student类及其父类Object的所有public方法,但不包括非public方法)
- Method[] m2 = c3.getMethods();
- for (Method m : m2)
- {
- System.out.println("Student类及其父类所有的public方法:" + m);
- }
- System.out.println("==========================================================");
- //创建Student类的对象
- Student s2 = (Student)c3.getConstructor().newInstance();
- Student s3 = (Student)c3.getDeclaredConstructor(String.class,int.class).newInstance("王尼玛",25);
- //获取Student类的toString方法
- Method m3 = c3.getDeclaredMethod("toString");
- //通过Method类中的invoke()方法 执行toString方法
- String str = (String)m3.invoke(s3);
- System.out.println(str);
- }
- }
- package com.sk.test;
- public class Student
- {
- private String name;
- private int age;
- 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(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public Student() {
- super();
- }
- @Override
- public String toString() {
- return "Student [name=" + name + ", age=" + age + "]";
- }
- }
来源: https://www.oschina.net/code/snippet_2861972_58538