person 类:
package bao;
public class Person {
private String name;
private int age;
//创建类时尽量造一个空参构造器
public Person() {
super();
}
public Person(String name) {
super();
this.name = name;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = 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 void show(){
System.out.println("我是一个中国人");
}
public void display(String name){
System.out.println("中国人"+name);
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
测试方法:
@Test
//如何获取Class类的实例3种
public void test3() throws ClassNotFoundException{
//第一种 调用运行时类的本身的.class来获取
Class<Person> clazz1=Person.class;
System.out.println(clazz1.getName());
//第二种 调用调用运行时类的对象来获取
Person p1=new Person();
Class clazz2 = p1.getClass();
System.out.println(clazz2.getName());
//第三种 通过调用Class的静态方法获取的
String className="bao.Person";//包名+类名
Class clazz3=Class.forName(className);
System.out.println(clazz3.getName());
//第四种 通过类得加载器进行加载
ClassLoader classloader = this.getClass().getClassLoader();
Class clazz4= classloader.loadClass(className);//第三种也要用到类名
System.out.println(clazz4.getName());
System.out.println(clazz1==clazz2);//true
System.out.println(clazz1==clazz3);//true
System.out.println(clazz1==clazz4);//true
//通过上面也可以看出是运行时类只有一个,只加载一次。
}
//创建运行时类的实例
@Test
public void Test1() throws Exception{
Class<Person> clazz1 = Person.class;//第一种方法
Person p=new Person();
Class clazz2 = p.getClass();//第二种方法
String className="bao.Person";
Class clazz3=Class.forName(className);
/*
* 要想能够创建运行时类的对象,使用 newInstance(),实际上是调用了
* 运行时类的空参构造器。要满足两点:
* 1.要有运行时类的空参构造器
* 2.构造器的权限修饰符要足够。
*
*/
Person p1 = clazz1.newInstance();
Person p2 = (Person) clazz2.newInstance();
Person p3 = (Person) clazz3.newInstance();
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
}