首页 > 编程语言 >JAVA进阶-枚举,类加载器,反射

JAVA进阶-枚举,类加载器,反射

时间:2024-09-19 18:23:19浏览次数:3  
标签:JAVA 进阶 System 枚举 println out class 加载

day15-枚举,类加载器,反射

枚举

  • 为什么有枚举

    • 为了简洁的表示一些固定的值,Java就给我们提供了枚举。
  • 定义格式

    • 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。

    • 格式

      • public enum s {
        	枚举项1,枚举项2,枚枚举项3;
        }
        
      • 定义枚举类要用关键字enum

    • 定义一个枚举类,用来表示春、夏、秋、冬这四个固定值。

  • 枚举的特点

    • image-20220704094335178

类加载器

概述
  • 负责将.class文件(存储的物理文件)加载在到内存中

  • image-20220704204713228

  • 类加载的过程

    • image-20220704204759004
  • 类加载器的分类

    • image-20220704205048282
    • image-20220704205342413
  • 成员方法

    • image-20220704205421650

    • 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问价加载到内存中

反射

  • image-20220704144219549
    • image-20220704144227137
  • 获得字节码对象
    • image-20220704145037932
类加载时机
  • image-20220704105004041
    • 用到就加在,不用不加载
反射获取构造方法
  • image-20220704153229596
  • 使用
    • image-20220704153545244
    • public
      • image-20220704153846730
    • private
      • image-20220704154322710
    • public的无参构造jdk8以后就过时了
      • image-20220704155658330
反射获取成员变量
  • image-20220704163655281

  • 设置值

    • image-20220704163741160
反射获取方法
  • image-20220704164018721

  • 和获取构造方法,成员变量差不多,需要注意的是遇到私有方法要暴力反射。

  • 总结获取方法

    • 通过字节码想要获取方法的话需要如下操作

      • 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");
            }
        
        }
        
        

标签:JAVA,进阶,System,枚举,println,out,class,加载
From: https://blog.csdn.net/qinqin__/article/details/142366825

相关文章