了解Java的反射,使用Java的反射!

java反射概念
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制
对象的编译类型和运行类型

Object obj=new Date(); //编译类型 Object,运行类型Date

在实际应用 中,我萌初学者常需要用到强制类型转换,或则使用instanceof判断该类的实际类型,
如果某个参数是某个函数返回值,而又不知道他的类型,怎么解决?

其实应该指出,类也是一种对象,那么该对象怎么描述的? 其描述的类是 Class
Class类:用于描述一切类/接口(枚举是一种类,注解是一种接口)
Class实例:就是JVM中的一份字节码
Class类提供范型来区分是哪一个类的字节码

Class clz1=Date.class;//clz1表示是Date的字节码;
Class<String> clz2=String.class;//clz2表示是String的字节码

获取Class的实例的方法

  1. 类名.class(就是一份字节码)
  2. 每一个对象都有一个getClass方法;obj.getClass(),返回对象的运行类型;
  3. 通过Class.forName(“全限定名”)获得实例,全限定名既包名+类名;(常用此种方法获得Class实例)
public static void main(String[] args) {
    //first way to get the class's object
    //很少用 已知类的class直接获得字节码流
    Class clz1=User.class;
    System.out.println(clz1);

    try {
    //包名+类名;Class 的forName(String s1)
        Class clz2=Class.forName("com.reflect.test.User");
        System.out.println(clz2);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    //对象的getClass方法
    Date date=new Date();
    Class clz3=date.getClass();
    System.out.println(clz3);
}


对于对象来说,其Class对象可以通过以上3中方式获得

JDK内置9大Class实例

*byte,int,long,double,char,boolean,float,short,*void关键字
而对于基本数据类型,他们的Clas实例获得?其实他们都有class属性;
如 Class clz=int.class;boolean.class;….
Class cla=void.class;

System.out.println(int.class); // int
System.out.println(void.class);//void

//八大基本类型包装类有一个常量 TYPE,表示该包装类对应基本类型的Class实例  
System.out.println(Integer.class); //class java.lang.Integer
System.out.println(Integer.TYPE==int.class);//true

Class中: Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions.:即数组Class实例是->所有的相同元素数组和
相同的维数共用一个Class实例;

String[] arr1={"w"};
        String[] arr2={"qw"};
        String[][] arr3={};
        int[] arr4={};
        Class clz1=String.class;
        Class clz2=arr1.getClass();
        Class clz3=arr2.getClass();
        Class clz4=arr3.getClass();
        Class clz5=arr4.getClass(); 

———————————–反射的实用用法举例——————————–

*获取构造器*

你可能感兴趣的:(Android学习笔记)