Java-反射剖析

     JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法(哪怕是private限定);对于任意一个对象,都能够调用它的任意一个方法和属性“(即使有些属性没有提供Set Get方法);这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
     要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类型的对象

获取类的字节码(class)文件对象的三种方式
     一:Object类的getClass()方法
     二:静态属性class
     三:Class类中静态方法forName() ----常用

 

 public static Class forName(String className); //className: 这个表示的是一个类对应的全类名(就是需要加上包名)

通过反射获取无参构造方法 

A:获取所有构造方法
	public Constructor<?>[] getConstructors() 获取所有的构造方法不包含私有的
	public Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法 包括私有的
B:获取单个构造方法
	public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取单个的构造方法 不包含私有的
	public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 获取单个的构造方法包含私有的
C:案例演示:	通过反射获取无参构造方法并使用
A:案例演示:	通过反射获取私有构造方法并使用
	// 获取字节码文件对象
	Class clazz = Class.forName("com.click369.Student") ;
	Constructor con = clazz.getDeclaredConstructor(String.class , int.class) ;
	// 值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
	con.setAccessible(true) ; 取消语法检查不然会报错 因为私有的外界不能直接访问
	Object obj = con.newInstance("张三" , 23) ;
	System.out.println(obj);
案例演示:通过反射获取所有成员变量
A:获取所有成员变量
	public Field[] getFields() 获取所有的成员变量包含从父类继承过来的
	public Field[] getDeclaredFields() 获取所有的成员变量 包含私有的 也包含从父类继承过来的成员变量
B:获取单个成员变量
	public Field getField(String name)
	public Field getDeclaredField(String name)
C:案例演示:	通过反射获取成员变量并使用
package org.westos.demo;


public class Student {
        //定义成员变量
        public String name;
        private int age;
        public char sex;
        private Student() {
        }
}

-----------------------------------------------------------------------------------------
package org.westos.demo;
import java.lang.reflect.Field;


publ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值