美文网首页
反射——对于慕课的学习笔记

反射——对于慕课的学习笔记

作者: 冰凝雪国 | 来源:发表于2017-05-26 11:31 被阅读0次
Class类:

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

  1. 在面向对象的世界里,万事万物皆对象:
    java语言中,静态的成员、普通数据类型不是对象;而类本身也是一个对象,类是java.lang.Class类的实例对象(Student、Dept类是Class类的实例对象)。
  2. 这个对象如何表示?
package shiyan;

public class ClassDemo1 {
    public static void main(String[] args) {
        /**
         * Dept类本身也是一个对象,是Class类的实例对象
         * 任何一个类都是Class类的实例对象(那Class类又是谁的对象呢?)
         */
        //一般情况下我们这样表示Dept类的对象
        Dept dept1 = new Dept();
        Dept dept2 = new Dept();
        /**
         * 那Class类的实例对象如何表示呢?
         * 显然不能通过new的方式,Class类的构造方法是private的
         */
        //Class的实例对象有3种表示方式
        
        //第一种 --- 实际上说明了任何一个类都有一个隐藏的静态成员变量class
        Class c1 = Dept.class;
        
        //第二种 --- 根据该类的对象调用getClass()方法
        Class c2 = dept1.getClass();
        Class c4 = dept2.getClass();
        
        //第三种 --- 根据类名得到Class类的实例对象
        Class c3 = null;
        try {
            c3 = Class.forName("shiyan.Dept");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
        //一个类只能是Class类的一个实例对象
        System.out.println(c1 == c2);//true
        System.out.println(c2 == c3);//true
        System.out.println(c2 == c4);//true
        
        //我们可以通过Class的实例(类(Dept)的类类型)创建类(Dept)的实例
        try {
            Dept dept3 = (Dept)c1.newInstance();//前提需要有一个无参构造方法
            dept3.print(); 
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

class Dept{
    void print(){
        System.out.println("123456");
    }
}

相关文章

网友评论

      本文标题:反射——对于慕课的学习笔记

      本文链接:https://www.haomeiwen.com/subject/pjfmzttx.html