JAVA程序员笔记 第19篇——反射、动态代理、多线程

本文介绍了JAVA中的反射机制,详细讲解了Class类及其使用,探讨了动态代理的实现,同时深入浅出地阐述了多线程的概念、CPU分时调度原理,并提供了多线程创建的两种方式以及并发编程的应用示例。
摘要由CSDN通过智能技术生成

反射(Reflex)

JAVA反射机制能够使java拥有动态性。 在运行状态中,能够获取能某个类的所有属性和方法;
对于任意一个对象,能够调用它的任意一个方法和属性;这种能够 动态地 获取的信息、调用对象的方法的功能称为java的反射机制。
用到反射,必须认识到:类对象(Class类)每一个字节码文件对应的Class类型的对象

Class类

在java中,类是最小的单位。而Class 类 表示正在运行的 Java 程序中的类或接口。当JVM读取到类时,会发生类加载(类加载知识,见以前笔记),生成Class类的对象。
那么,可以通过构造方法自己创建类对象吗?
当然。。。。不能,Class没有公共构造方法(被私有化了),Class对象只能在类加载时,由虚拟机JVM以及通过 类加载器中的 defineClass方法 自动构造。

反射的使用

 // 类对象的获取方式有三种
        // 1.  类.class
        	//获取User的类对象
       		 Class<User> clz = User.class;
        // 2.  对象.getClass()
        		clz.g.getClass()
        // 3.  Class.forName("类全名")  类全名:包名 + 类名
				Class<?> clz3 = Class.forName("java.lang.String") ;

常用API

 //获取User的类对象
        Class<User> clz = User.class;

        //快速 通过 无参构造方法,创建对象
        User user = clz.newInstance();
        System.out.println(user);

        Object o = clz.getDeclaredConstructor().newInstance();

        //获取 User 类的 所有 构造方法
        Constructor<?>[] constructors = clz.getConstructors();

        Constructor<?> constructor = constructors[1];

        //参数计数
        int parameterCount = constructor.getParameterCount();
        System.out.println(parameterCount);

        //参数类型
        Class<?>[] parameterTypes = constructor.getParameterTypes();

        for(Class<?> clzz : parameterTypes){
   
            System.out.println(clzz.getName());
        }

可以通过反射运行配置文件内容

public class User{
   
	public void show(){
   
		System.out.println("is show()");
	}
}

配置文件

className = Day31_Reflex..User
methodName = show

通过反射越过泛型检查


public class Test03{
   
	public static void main(String[] args) throws Exception{
   
		ArrayList<String> list = new ArrayList<String>();
		list.add("HOU");
		list.add("hou");

		//获取ArrayList的类对象,通过反射获得add()方法,添加数据
		Class listClass = list.getClass(); 
		//获取add方法
		Method method = listClass.getMethod("add", Object.class);
		
		method .invoke(list 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值