手记

【九月打卡】第十四天+反射类的使用

课程名称:反射

课程章节:第一章

主讲老师:Cedar


课程内容:

Class类的使用

  1. class:面向对象的世界,万事万物都可以是对象

    1. 类是对象,类是java.lang.Class类的实例对象。

    2. 类如何表示

    3. Class.forName("类的全称")

    4. 功能性的类一般使用动态加载,可以避免爆雷

    1. public class ClassDemo1 {
         public static void main(String[] args) throws Exception {
      //        普通模式:实例化对象
             Foo foo = new Foo();
      //        任何一个类都是Class的实例对象
      //        1:第一种表示方式,实际告诉我们任何一个类都有一个隐含的静态成员变量class
             Class c1 = Foo.class;
      //        2:第二种表达方式  已知该类对象,通过getClass方法
             Class c2 = foo.getClass();
             /**
              * c1,c2表示了Foo类的类类型
              * 万事万物皆对象
              * 类也是对象,是Class类的实例对象
              * 这个对象我们成为该类的类类型
              */
      //        3:第三种表达方式
             Class c3 = null;
             c3 = Class.forName("com.example.study.Reflect.Foo");
      //        不管c1,c2,c3都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象
             System.out.println(c1 == c2);
             System.out.println(c2 == c3);

      //        我们可以通过类的类类型创建该类的对象实例--->通过c1,c2,c3创建Foo对象
             Foo foo1 = (Foo) c1.newInstance(); //需要有无参构造方法
             foo1.hh();
         }
      }
    1. new 创建对象,是静态加载类,在编译时刻就需要加载所有的可能使用到的类

    2. 通过动态加载类可以解决静态类加载不到的问题——这样编译不会爆出任何错误

    1. 不仅代表了类的类类型,还代表了动态加载类

    2. 要学会区分编译,运行

    3. 编译时刻加载类是静态加载类,运行时加载类是动态加载类

课程收获:

之前一直光知道反射,却不知道反射如何使用,现在知道了动态加载类的优势以及编译的话,是会让静态加载爆出一系列问题,很多时候,动态加载会更好的处理和解决问题!


革命尚未成功,同志还需努力!

0人推荐
随时随地看视频
慕课网APP