public void text2() throws Exception{
Class clazz = Person.class;
//通过反射,创建Person类对象
Constructor cons = clazz.getConstructor(String.class, int.class);
Object obj = cons.newInstance("tom", 12);
System.out.println(obj.toString());
//通过反射,调用对象的属性和方法
Field age = clazz.getDeclaredField("age");
age.set(obj,10);
System.out.println(obj.toString());
//调用方法
Method show = clazz.getDeclaredMethod("show");
show.invoke(obj);
//通过反射可以调用已有结构
//调用私有的构造器
Constructor cons1 = clazz.getDeclaredConstructor(String.class);
cons1.setAccessible(true);
Person p1 = (Person)cons1.newInstance("jerry");
//调用私有属性
Field name = clazz.getDeclaredField("name");
name.setAccessible(true);
name.set(p1,"afaf");
System.out.println(p1);
//调用私有方法
Method showNation = clazz.getDeclaredMethod("showNation", String.class);
showNation.setAccessible(true);
String nation=(String) showNation.invoke(p1,"数据");
System.out.println(nation);
}
import java.io.Serializable;
import java.util.Objects;
public class Person implements Serializable,Comparable {
public static final long serialVersionUID = 4255541L;
private String name;
public int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
private Person(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void show(){
System.out.println("ddd");
}
public String showNation(String nation){
System.out.println("ddd"+nation);
return nation;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Object o) {
if (o instanceof Person){
Person person=(Person) o;
int compare=-this.name.compareTo(person.name);
if (compare!=0){
return compare;
}else {
return Integer.compare(this.age,person.age);
}
}{
throw new RuntimeException();
}
}
}