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

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");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,141评论 0 62
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,754评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,687评论 0 11
  • 响应式布局 横屏portrait竖屏landscape 行内样式@media screen and (min-...
    奶瓶SAMA阅读 209评论 0 0
  • 包包一直是能够解决女生各种疑难杂症的必杀技, 治得了拖延症恐惧症选择症困难症, 缓解得了姨妈疼痛甚至生产痛 解决得...
    鲜觉FreshDesign阅读 336评论 0 0