六十八、newInstance()方法
条件:该类必须有无参构造器,如果没有运行时会抛出异常,没有重载的方法
Class c=Student.class();
Object o1=c.newInstance();
Student s=(Student)o1;
或
Student s=(Student) c.newInstance();
六十九、获取public权限的无参数的构造器
Constructor con=c.getConstructor();
Student s=(Student) con.newInstance();
System.out.println(s.name);
七十、调用指定参数的public权限的构造器
Class c=Student.class();
Constructor con1=c.getConstructor(String.class,int.class);
//co.setAccessible(true);//打开权限
Student s1=(Student)con1.newInstance("student",10);
七十一、获取所有public权限的构造器
Constructor [] co=c.getConstructors();
for(int i=0;i<co.length;i++) {
System.out.println(co[i]);
}
七十二、通过反射获取构造器
获取构造器的方式:
c.getConstructor( Class... cl)---获取指定参数的public权限的构造器
c.getConstructors();---获取所有public权限的构造器
c.getDeclaredConstructor(Class... cl);--获取所有权限指定参数构造器
c.getDeclaredConstructors();---获取所有权限的所有构造器
通过构造器创建对象:
如果是私有构造器con.setAccessiable(true),用这个方法打开私有权限
七十三、Filed类的get()、set()方法
Student s=new Student();
Class c=s.getClass();
Field f=c.getField("name");
f.set(s, "小明");
System.out.println(f.get(s));
七十四、获取指定类的所有public权限的属性,包括继承来的
Field [] f=c.getFields();
for(int i=0;i<f.length;i++) {
System.out.println(f[i]);
}
七十五、获取所有权限的指定属性,不包括继承来的
Field f1=c.getDeclaredField("age");
f1.setAccessible(true);
System.out.println(f1.get(s));
七十六、获取指定类中所有权限的所有属性
Field [] f=c.getDeclaredFields();
for(int i=0;i<f.length;i++) {
System.out.println(f[i]);
}
七十七、获取静态属性不用指定对象,getField()方法获取public权限的属性,不带s
System.out.println(c.getField("num").get(null));
null:因为静态数据不以不依赖于对象
七十八、获取public权限的指定参数的方法
Class c= Student.class;
Method m=c.getMethod("sleep");
System.out.println(m); //输出具体的方法名(包括包名)
m.invoke(s); //s是对象
七十九、获取指定类的所有public权限的方法(包括继承过来的):getMethods()
Method [] m1=c.getMethods();
for(int i=0;i<m1.length;i++) {
System.out.println(m1[i]);
}
八十、获取所有权限的指定参数的方法,不包括继承来的方法
Method m3=c.getDeclaredMethod("speak");
m3.setAccessible(true);//打开权限
m3.invoke(s);
八十一、获取本类中所有权限的所有方法(不包括继承来的)
Method m4[]=c.getDeclaredMethods();
for(int i=0;i<m4.length;i++) {
System.out.println(m4[i]);
}
八十二、获取静态方法及执行
Method m=c.getMethod("fun1");
//静态方法传null是可以的
m.invoke(null); //null:因为静态数据不以不依赖于对象
八十三、比较(类型判定)
Class c=Person.class;
Class c1=Student.class;
System.out.println(c.isInstance(c1)); //true
System.out.println(c1 instanceof Student); //true
//报错:类型不兼容时,会报错
System.out.println(str instanceof Student); //false