Java基础笔记-第十三记


Java- 反射一

//一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是
//类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,
//如果想要知道内容中所对应的类型,有以下三种方式获取
//1、 类名.class 如: Class cls1 = java.lang.String.class;
//2、对象.getClass() 如:Class cls2 = new String().getClass();
//3、Class.forName(类名) 如:Class cls3 = Class.forName("java.lang.String");

//在Java中有九个预定义的Class 对象
//Boolean、Character、Byte、Short、Integer、Long
//Float、Double、Void

//class的isPrimitive()方法表示判断某个class是否是预定义的类型
System.out.println(void.class.isPrimitive());  //结果为true
System.out.println(int.class.isPrimitive());   //结果为true
System.out.println(Integer.class.isPrimitive());//结果为false

//int 和 Integer 两个类之间的class 不存在对等关系
//但两者之间的类型是一致的
System.out.println(int.class == Integer.class);
System.out.println(int.class == Integer.TYPE);

//结论: 只要是在源程序中出现的类型,都有各自的Class实例


//反射:就是把Java类中的各种成分映射成相应的Java类。
//例如:一个Java类中的用一个Class类的对象来表示,一个类中的组成部分:
//成员变量,方法,构造方法,包等等信息也用Java类来表示,就像汽车是一个类,
//汽车中的发动机,变速箱也是一个类。
//表示Java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,
//构造方法,修饰符,包等等信息,这些信息就是用相应类的实例对象来表示,例如:
//Field,Method,Contructor,Package

//得到某个类所有的构造方法:
Constructor constructors[] = Class.forName("java.lang.String").getConstructors();

//得到某个类的某一个构造方法
//由于构造方法有多个,可根据方法中的参数来指定相应的方法
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);

//创建实例对象:
//普通创建方法
String str = new String("abc");
//使用反射来创建
String str2 = (String)constructor.newInstance(new StringBuffer("abc"));


//通过反射获取对象的成员变量
Point point = new Point(3,5);
Field fieldY = Point.class.getField("y");
//要注意,使用反射获取到的成员变量,在该对象中的值并不是 5, 仅仅只是一个
//如果想要通过该对象获取 成员变量的值,使用 get()方法获取point对象中相应的值。
System.out.println(fieldY.get(point));

//使用反射获取point对象中私有的值
Field fieldX = Point.class.getDeclaredField("x");
fieldX.setAccessible(true); //设置该属性是否可以获取
System.out.println(fieldX.get(point)); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值