获取一个类的class文件对象的3种方法:
比如一个Person类:
1.对象获取方法:
Person p = new Person();
Class c = p.getClass();
2.类名获取方法:
Class c =Person.class;
3.Class类的静态方法获取forName:
Class c = Class.forName("cn.demo.Person")
//注:该方法的Person类一定要写全,连同包名。
反射获取Class文件对象中的构造方法:
public class reflectDemo{
public static void main(String[] args) throws ClassNotFoundException{
Class c = Class.forName("cn.demo.Person")
Constructor[ ] cons =c.getConstructors();
for(Constructor con :cons){
system.out.println(con);
}
}
}
//只想获取空参的,可以这样写:
Constructor [ ] con =c.getConstructor();
//运行空参数的构造方法,可以这样写:
Object obj = con.newInstance();
system.out.println(obj.toString());
//得到结果如下:
Person[name=null, age=0]
//如果想要调用Person类中的eat()方法,可以这样写:
Person p = (person)obj;
p.eat();
2.获取有参的构造方法:
public class reflectDemo{
public static void main(String[] args) throws ClassNotFoundException{
Class c = Class.forName("cn.demo.Person")
Constructor con = c.getConstructor(String.class,int.class);
Object obj = con.newInstance("张三",20);
system.out.println(obj);
//输出结果为:Person[name=张三,age=20]
}