Java反射之method,数组与Object关系,泛型参数

本文介绍了Java反射机制,详细阐述了如何获取Class对象,包括Class类、通过类名和对象获取Class实例。接着讨论了反射的基本步骤、构造方法的反射应用、成员变量和方法的反射,特别是对数组、Object的关系及其反射类型的探讨,并展示了如何通过反射获取泛型的实际类型参数。
摘要由CSDN通过智能技术生成


1.反射的基石-->Class

1.1.Class类
 一个类被类加载器加载到内存中,占用一片存储区域,这个空间里面的内容就是类的 字节码 .
 不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示;
 显然可以为这些组织字节码内容的类定义一个类型,它就是Class类型
 
1.2.如何得到各字节码对应的Class类实例对象
 三种方式:
(1)Class cls1=类名.class 相对简单,还是需要明确类名:System.class;
(2)Class cls1=对象.getClass();必须要明确具体的类,并创建对象:new Date().getClass();
(3)Class cls1=Class.forName("完整的类名(带包名)"):Class.forName("java.util.Date")

1.3.九个预定一个Class实例对象
 八个基本类型+void.Class
 Integer.class包装类的字节码

 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  String str1 = "abc";
  Class cls1 = str1.getClass();
  Class cls2 = String.class;
  Class cls3 = Class.forName("java.lang.String");
  System.out.println(cls1==cls2);
  System.out.println(cls1==cls3);
  
  System.out.println(cls1.isPrimitive());//是否基本类型,String不是基本类型
  System.out.println(int.class.isPrimitive());//true
  System.out.println(int.class==Integer.class);//false,Integer.class是包装类的字节码
  System.out.println(int.class==Integer.TYPE);//true,Integer.TYPE是其基本类型的字节码
  
  //数组类型的Class类型实例对象Class.isArray
  System.out.println(int[].class.isPrimitive());//false
  System.out.println(int[].class.isArray());//true
 }


 

 只要在源程序中出现的类型,都有各自的Class实例对,例如 int[],void 等等;

 

2.反射
 就是把JAVA类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值