java反射的理解

概念:
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,
对于任意一个对象,都能够条用她的任意一个方法和属性,
这种动态的获取信息以及动态调用对象的方法的功能成为java的发射机制

Java反射的功能

  1)可以判断运行时对象所属的类
  2)可以判断运行时对象所具有的成员变量和方法
  3)通过反射甚至可以调用到private的方法
  4)生成动态代理

实现Java反射的类

  1)Class:它表示正在运行的Java应用程序中的类和接口
  2)Field:提供有关类或接口的属性信息,以及对它的动态访问权限
  3)Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
  4)Method:提供关于类或接口中某个方法信息
  注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/属性/构造方法/访问权限)
都需要它来实现

类classloader加载方式
  • 1)Bootstrap ClassLoader 此加载器采用c++编写,一般开发中很少见。
  • 2)Extension ClassLoader 用来进行扩展类的加载,一般对应的是jre\lib\ext目录中的类
  • 3)AppClassLoader 加载classpath指定的类,是最常用的加载器,同时也是java中默认的加载器。
    例子:
    package lxh.reflect;
    import java.lang.reflect.*;
    public class ReflectDemo {
    /**
    • 为了看清楚Java反射部分代码,所有异常我都最后抛出来给虚拟机处理

public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException, NoSuchMethodException {

System.out.println("demo1:通过Java反射机制得到类的包名和类名");
demo1();

System.out.println("--------------------");
System.out.println("demo2:验证所有的类都是Class类的实例对象");
demo2();

System.out.println("--------------------");
System.out.println("demo3:通过Java反射机制,用 Class 创建类对象,这也就是反射存在的意义所在");
demo3();

System.out.println("---------------------");
System.out.println("demo4:通过Java反射机制得到一个类的构造函数,并实现创建带参实例对象");
demo4();

System.out.println("------------------------");
System.out.println("demo5:通过Java反射机制操作成员变量, set 和 get");
demo5();

System.out.println("-------------------------");
System.out.println("demo6:通过Java反射机制得到类的一些属性:继承的接口、父类、函数信息、成员信息、类型等");
demo6();

System.out.println("--------------------------");
System.out.println("demo7:通过Java反射机制调用类方法");
demo7();

System.out.println("");
System.out.println("demo8:通过Java反射机制得到类加载器信息");
demo8();

}

/**
* demo1:通过Java反射机制得到类的包名和类名

public static void demo1() {
Person person = new Person();
System.out.println(“包名:” + person.getClass().getPackage().getName());
System.out.println(“完整类名:” + person.getClass().getName());
}

/**
* demo2:验证所有的类都是Class类的实例对象

public static void demo2() throws ClassNotFoundException {
//定义两个类型都未知的Class,设置初值为null,看看如何给它们赋值成Person类
Class

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值