day15-枚举,类加载器,反射
枚举
-
为什么有枚举
- 为了简洁的表示一些固定的值,Java就给我们提供了枚举。
-
定义格式
-
是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。
-
格式
-
public enum s { 枚举项1,枚举项2,枚枚举项3; }
-
定义枚举类要用关键字enum
-
-
定义一个枚举类,用来表示春、夏、秋、冬这四个固定值。
-
-
枚举的特点
类加载器
概述
-
负责将.class文件(存储的物理文件)加载在到内存中
-
类加载的过程
-
类加载器的分类
-
成员方法
-
System.out.println("--------获得系统类加载器"); ClassLoader classLoader1 = Test1.class.getClassLoader(); System.out.println(classLoader1); ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); System.out.println(systemClassLoader); System.out.println("--------通过系统类加载器获得 获得平台类加载器"); //获得类路径classpath路径下的文件 InputStream is = ClassLoaderDemo2.class.getClassLoader().getResourceAsStream("prop.properties"); Properties prop = new Properties(); prop.load(is); System.out.println(prop); is.close();
-
把class问价加载到内存中
反射
-
- 获得字节码对象
类加载时机
-
- 用到就加在,不用不加载
反射获取构造方法
- 使用
- public
- private
- public的无参构造jdk8以后就过时了
- public
反射获取成员变量
-
设置值
反射获取方法
-
和获取构造方法,成员变量差不多,需要注意的是遇到私有方法要暴力反射。
-
总结获取方法
-
通过字节码想要获取方法的话需要如下操作
-
public class Teacher { public static void main(String[] args) throws Exception { //类.class Class<Teacher> teacherClass = Teacher.class; //得到对象 Teacher teacher = teacherClass.newInstance(); Method method1 = teacherClass.getMethod("method");//方法名 //得到方法 method1.invoke(teacher); } public void method(){ System.out.println("aaa"); } } /* System.out.println(teacherClass); class com.day15.demo3.Teacher System.out.println(teacher); com.day15.demo3.Teacher@4d7e1886 */
-
-
通过打点获取方法
-
public class Teacher { public static void main(String[] args) throws Exception { //类.class Class<Teacher> teacherClass = Teacher.class; //得到对象 Teacher teacher = teacherClass.newInstance(); teacher.method(); } public void method(){ System.out.println("aaa"); } }
-
-