了解Java的反射,使用Java的反射!
java反射概念
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制
对象的编译类型和运行类型:
Object obj=new Date(); //编译类型 Object,运行类型Date
在实际应用 中,我萌初学者常需要用到强制类型转换,或则使用instanceof判断该类的实际类型,
如果某个参数是某个函数返回值,而又不知道他的类型,怎么解决?
其实应该指出,类也是一种对象,那么该对象怎么描述的? 其描述的类是 Class;
Class类:用于描述一切类/接口(枚举是一种类,注解是一种接口)
Class实例:就是JVM中的一份字节码
Class类提供范型来区分是哪一个类的字节码
Class<Date> clz1=Date.class;//clz1表示是Date的字节码; Class<String> clz2=String.class;//clz2表示是String的字节码
获取Class的实例的方法
- 类名.class(就是一份字节码)
- 每一个对象都有一个getClass方法;obj.getClass(),返回对象的运行类型;
- 通过Class.forName(“全限定名”)获得实例,全限定名既包名+类名;(常用此种方法获得Class实例)
public static void main(String[] args) { //first way to get the class's object //很少用 已知类的class直接获得字节码流 Class<User> 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();
———————————–反射的实用用法举例——————————–
*获取构造器*
阅读更多- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
- Spring Framework 5.0:使用注解的方式来加载Bean、入门注解、了解java反射
- java 反射的一些使用总结
- 在Java中使用反射分析类结构
- JAVA反射使用手记
- 通过反射动态使用Java类(转)
- 在Java中使用反射分析类结构
- JAVA反射使用手记
- java反射的使用
- 使用JAVA的反射机制反射带有数组参数的私有方法
- java反射调用配置文件构造类对象,使用其方法
- JAVA反射使用手记
- JAVA反射使用手记
- JAVA反射使用手记
- 使用Java5特性来简化反射编程
- 使用Java5特性来简化反射编程
- 在Java中使用反射分析类结构
- 使用 java 的反射 和 comparator 实现java bean 的简单排序
- JAVA反射使用手记
- 使用Java5特性来简化反射编程