反射_构造方法_成员方法_成员变量

定义:获取当前某个类的字节码文件

获取一个类的字节码文件对象有几种方式:

1.Object的getClass()方法:

                对象名.getClass()

2.任意Java类型的class属性--->内置的,就相当于任意数组(引用类型数组,基本数组---都会有length属性) 可以jdk提供的类或者我们自定义的类

                类名.class();

3.Class.forName("包名.类名"); 字符串数据----特点--->可以放在配置文件

类的加载过程---->需要类的所有结构(成员变量/构造方法/成员方法)进行校验

构造方法:

通过字节码文件对象,获取这个类 构造方法的类对象:Constructor---给创建当前类实例

getConstructors():获取当前这个类的所有的公开的构造方法

getDeclaredConstructors():获取当前类的所有构造方法(公共的,受保护的,私有的,默认的)

getDeclaredConstructor(参数类型的class):获取指定构造方法

setAccessiable(true):取消对非公共的构造方法/成员方法取消java语言检查

newInstance(实参):创建当前实例对象

Class c=Class.forName("com.qf.reflect_04.Person");
//Constructor con=c.getConstructor();
Constructor con=c.getDeclaredConstructor(String.class,int.class);
con.setAccessiable(true);
Object o=con.newInstance("luya",20);
System.out.println(o);

成员方法

获取指定的公共的成员方法类对象Method:

public Method getDeclaredMethod(String name,Class<?>... parameterTypes):

        参数1:方法名,参数2:参数类型的字节码文件

Method m2 = clazz.getDeclaredMethod("method", String.class);

传值:调用invoke方法:

m2.invoke(obj,"hello,高圆圆") ;

成员变量

//public Field getDeclaredField(String name):获取指定的字段类对象(获取指定成员变量)---参数为当前成员变量名
        Field ageField = clazz.getDeclaredField("age") ;
        //取消Java语言访问检查
        ageField.setAccessible(true);
        //才能赋值
         //public void set(Object obj, Object value):将指定的value实际参数 作用指定的实例(对象)上

        ageField.set(obj,20) ;
        System.out.println(obj);

要获取Student类的所有构造方法成员方法成员变量,可以使用Java反射机制。下面是示例代码: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Main { public static void main(String[] args) { Class<Student> studentClass = Student.class; // 获取所有构造方法 Constructor<?>[] constructors = studentClass.getConstructors(); System.out.println("Constructors:"); for (Constructor<?> constructor : constructors) { System.out.println(constructor); } // 获取所有成员方法 Method[] methods = studentClass.getMethods(); System.out.println("\nMethods:"); for (Method method : methods) { System.out.println(method); } // 获取所有成员变量 Field[] fields = studentClass.getDeclaredFields(); System.out.println("\nFields:"); for (Field field : fields) { System.out.println(field); } } } class Student { private String name; private int age; private int classId; private String sex; private int score; public Student(String name, int age, int classId, String sex, int score) { this.name = name; this.age = age; this.classId = classId; this.sex = sex; this.score = score; } public String getName() { return name; } public int getAge() { return age; } public int getClassId() { return classId; } public String getSex() { return sex; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } } ``` 输出结果: ``` Constructors: public Student(java.lang.String,int,int,java.lang.String,int) Methods: public int Student.getAge() public void Student.setScore(int) public int Student.getClassId() public int Student.getScore() public java.lang.String Student.getSex() public java.lang.String Student.getName() public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException ... Fields: private java.lang.String Student.name private int Student.age private int Student.classId private java.lang.String Student.sex private int Student.score ``` 注意:这里的示例代码使用了`Student`类来表示学生,你可以根据实际情况进行调整。`getConstructors()`方法获取的是所有公共构造方法,`getMethods()`方法获取的是所有公共成员方法,`getDeclaredFields()`方法获取的是所有成员变量(包括私有成员变量)。如果需要获取非公共的构造方法、方法或变量,可以使用相应的方法,如`getDeclaredConstructors()`、`getDeclaredMethods()`和`getDeclaredFields()`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值