java反射
2021-01-28 13:17
标签:底层实现 类对象 ack demo1 eth name ons 知识 实现 前两天大师傅给面试,仿佛接受洗礼一般。 学习java底层是很重要的,要把自己的知识点补齐。 感谢dkk师傅,送我的java安全学习连接。 在这也分享给大家:https://javasec.org/javase/Reflection/Reflection.html Java反射( 通过使用反射我们可以: 获取到任何类的成员方法( 还可以动态创建Java类实例、调用任意的类方法、修改任意的类成员变量值等。 Java反射机制是Java语言的动态性的重要体现,也是Java的各种框架底层实现的灵魂。 ? 参考:https://javasec.org/javase/Reflection/Reflection.html 可参考下图: 先把Person.java写好 java反射 标签:底层实现 类对象 ack demo1 eth name ons 知识 实现 原文地址:https://www.cnblogs.com/h3zh1/p/12838276.htmljava反射……未整理完
java反射机制简介
Reflection
)是Java非常重要的动态特性,
Methods
)、成员变量(Fields
)、构造方法(Constructors
)等信息,此处强调所有权限修饰都可得到。学习时建立的一个简要的目录结构
获取Class(类)对象的三种方法
Person.java
package com.human;
public class Person {
public String a;
protected String b;
private String name;
private int age;
String c;
public Person(){
}
public Person(String name ,int age){
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void eat(){
System.out.println("eat……nothing");
}
public void eat(String food){
System.out.println("eat……"+food);
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name=‘" + name + ‘\‘‘ +
", a=‘" + a + ‘\‘‘ +
", b=‘" + b + ‘\‘‘ +
", c=‘" + c + ‘\‘‘ +
‘}‘;
}
}
ReflectDemo1.java
package com.reflect;
import com.human.Person;
public class ReflectDemo1 {
public static void main(String[] args) throws Exception{
/*
1. class.forName获取类对象
*/
Class cls1 = Class.forName("com.human.Person");
System.out.println(cls1);
/*
2. 类名.class获取类对象
*/
Class cls2 = Person.class;
System.out.println(cls2);
/*
3. getClass方法获取类对象
*/
Person p = new Person();
Class cls3 = p.getClass();
System.out.println(cls3);
/*根据上述的三个输出,我们知道了三种的到类对象的函数*/
/*
根据等于号的传递性,我们现在可以明确:
class这个字节码文件,再一次程序中的只加载一次,
这也是为什么三个cls都相同的原因。
*/
System.out.println(cls1==cls2);
System.out.println(cls2==cls3);
}
}