java反射

小知识:

classClass:class是定义一个类的标示符,Class代表一类什么样的事物,用来表示多个类是否表示同一类的事物,是用来描述类的(比如所有的类都有类的名字,所属那个包等特性)。

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(booleanbytecharshortintlongfloatdouble)和关键字 void 也表示为 Class 对象。

Class没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

以下示例使用 Class 对象来显示对象的类名:

     void printClassName(Object obj) {
         System.out.println("The class of " + obj +
                            " is " + obj.getClass().getName());
     }
Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fieldsmethods的所有信息,并可于运行时改变fields内容或唤起methods

1:关于字节码:

(一):获得某个类的字节码的方式:

常用的有三种 a:类名.Class

            b:某个类的对象.getClass();如:new Data().getClass()

            c:Class.forName(“类名”)

publicclass Number

{

    publicstaticvoid main(String[] args)

    {

        Class clse = String.class;

        System.out.println(clse);

        System.out.println(String.class);

        Date dd = new Date();

        System.out.println(dd.getClass());

        try {

            System.out.println(Class.forName("java.lang.String"));

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    

    }

}

打印出的结果为:

classjava.lang.String

classjava.lang.String

classjava.util.Date

class java.lang.String

 

反射:就是吧java中的各种成分映射成相应的java.

 

构造方法的反射:

Constructor 类的使用,

Constructor cont = Class.forName(“java.lang.String”).getConstructorsString.class).

Class.forName(“java.lang.String”);是获得String这个类的字节码,调用getconstructors方法,构造一个cont对象,这个对象指向String这个类的字节码,String.class是选取构造方法中的哪一个。

反射就一个类,类中有类,类的成分的类。

 

访问私用的字段:

Field fd = 对象.getCalss.getField(“x(字段)”);

如果字段x的修饰符是private 则编译是会出现错误,这是因为x是私有的。用

 Fieldfd = 对象.getCalss.getDeclaredField(“x(字段)”);OK了,

打印的时候也不能和默认的和public修饰的字段一样来打印,要在打印之前,fd.setAccessible(true)一下,就是暴力反射,这样在打印就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值