Java反射
一、Class类
1. 我们创建的类也是对象,即类本身是java.lang.Class类的实例对象
2. java.lang.Class类的构造方法是私有的,所以类不需要new出来
3. java.lang.Class类的实例对象有三种表示方式:
Class<?> c=A.class; // 任何一个类都有一个隐藏的静态成员变量class
Class<?> c=a.getClass(); // 已知该类的对象,获取类
Class<?> c=Class.forName("类的全名")
4. 可以通过得到的Class创建该类的对象
A a=(A)c.newInstance();
二、类加载
1. 用new去创建对象的类,是静态加载类,编译时就需要加载所有可能使用到的类
2. 用Class<?> c=Class.forName("类的全名")得到的类,是动态加载类,运行时才会加载
3. 功能性的类尽量使用动态加载
三、获取类型信息和Class类的基本API
1. 获取类型:Class c=String.class;
2. c.getName();
3. Method[] m=c.getMethods(); m.invoke();
4. Field[] f=c.getDelaredFields();
四、集合泛型的本质
1. 集合中的泛型,是用于防止错误类型的元素输入的,只在编译阶段有效
2. 在编译之后运行期间,JVM会将集合中的对象都看作基类,而对象的实际类型信息就丢失了,即泛型擦除
3. 所以用反射可以在泛型集合中加入类型不对的元素,例如List<String>中,加入add(1),就可以在一个list里存储多种不同的类型
原文地址:https://www.cnblogs.com/june0816/p/6774529.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释