什么是注解:
使用@Interface自定义注解时,自动继承了java.lang.annotation.Annotation接口
动态语言:
静态语言:
对象照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留了一个不变的class类型的对象。一个class对象包含了特定某个结构的有关信息
public class Test02 {
public static void main(String[] args) {
Person person = new Student();
Class c1 = person.getClass();
Person person1 = new Person();
Class c2 = person1.getClass();
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
Class c3 = c1.getSuperclass();
System.out.println(c3.hashCode());
//运行结果为:
/* 21685669
2133927002
2133927002*/
}
}
class Person{
public String name;
public Person() {
}
public Person(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name=‘" + name + ‘\‘‘ +
‘}‘;
}
}
class Student extends Person{
public Student(){
this.name="张三";
}
}
public class Test04 {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
Class c1=Class.forName("com.hao.ref.Teacher");
Teacher teacher1 = (Teacher) c1.newInstance();
System.out.println(teacher1); // Teacher{name=‘null‘} 调用newIstance创建对象时,这个类必须要有无参构造。
//通过构造器创建对象
Constructor constructor = c1.getDeclaredConstructor(String.class);
Teacher t2 = (Teacher) constructor.newInstance("黄老二");
System.out.println(t2);
//通过反射操作方法
Teacher t3 = (Teacher) c1.newInstance();
//通过反射获得指定的方法
Method setName = c1.getDeclaredMethod("setName", String.class);
//invoke激活该方法的意思
setName.invoke(t3,"张三丰");
System.out.println(t3);
//通过反射操作字段属性
Teacher t4 = (Teacher) c1.newInstance();
Field name = c1.getDeclaredField("name");
//设置程序安全检测,不能直接访问对象的私有属性
name.setAccessible(true);
//给name属性赋值
name.set(t4,"李四啊");
System.out.println(t4);
}
}
class Teacher{
private String name;
public Teacher() {
}
public Teacher(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Teacher{" +
"name=‘" + name + ‘\‘‘ +
‘}‘;
}
}
原文:https://www.cnblogs.com/xiaopanjava/p/13796431.html