//反射指有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; }
}