//反射指有classes文件,ide
public class ReflectionDemo {this
public static void main(String[] args) throws ReflectiveOperationException {.net
Student s=new Student(); Student s1=new Student(); //第一种方式 //Class c=s.getClass();//获取的classes文件 //第二种方式 //Class c3=Student.class; //第三种方式,建议使用这种方式 Class c4=Class.forName("day2.jihe.Student"); //获取构造方法,不是私有的 Constructor []cc=c4.getConstructors(); //获取全部的构造方法 Constructor[]mao=c4.getDeclaredConstructors(); for(Constructor con:cc) { System.out.println(con); } //获得无参的构造方法 Constructor co=c4.getConstructor(); //拿到Student的实例 Object obj=co.newInstance(); System.out.println(obj); //带参数的构造方法的使用
// Class c5=Class.forName("day2.jihe.Student");code
// Constructor co1=c5.getConstructor(String.class,String.class);get
// System.out.println(co1);io
// Object ob1=co1.newInstance("mao","dong");class
// System.out.println(ob1);test
// Student s10=(Student) ob1;变量
// System.out.println(s10.getAge()+" "+s10.getAge());object
// //获取有参数的私有带参数构成方法
// Class c6=Class.forName("day2.jihe.Student");
// Constructor con6=c6.getDeclaredConstructor(String.class);
// con6.setAccessible(true);//私有的都须要如此设置
// Object obj6=con6.newInstance("mao");
// System.out.println(obj6);
//经过反射获取全部公共的成员变量
// Class c7=Class.forName("day2.jihe.Student");
// Field []field=c7.getFields();
// for (Field f:field) {
// System.out.println(f);
// // }
//获取单个的公共的成员变量
// Class c8=Class.forName("day2.jihe.Student");
// Field f=c8.getField("name");
// Constructor co8=c8.getConstructor();
// Object obj8=co8.newInstance();
// f.set(obj8, "北京");
// System.out.println(obj8);
//获取全部的方法
// Class c9=Class.forName("day2.jihe.Student");
// Method[] me=c9.getDeclaredMethods();
// for (Method i:me) {
// System.out.println(i);
// }
//调用某个无参数的方法,调用有参数的方法,与调用有参数的构造方法相似
// Class c10=Class.forName("day2.jihe.Student");
// Constructor co10=c10.getConstructor();
// Object obj10=co10.newInstance();
// Method m10=c10.getMethod("test");
// m10.invoke(obj10);
//调用有参数的方法 Class c11=Class.forName("day2.jihe.Student"); Constructor con11 =c11.getConstructor(); Object obj11=con11.newInstance(); Method m11=c11.getMethod("test1", String.class); Object objectString=m11.invoke(obj11, "tte"); System.out.println(objectString);
} }
//Student类
public class Student {
public String name; public String age; private String sex; public Student() { } public Student(String name, String age) { this.name = name; this.age = age; } Student(String name){ this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } [@Override](https://my.oschina.net/u/1162528) public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } public void test() { System.out.println("调用五参数的成员方法"); } public String test1(String str) { return "反射方法的使用"+str; }
}