zoukankan      html  css  js  c++  java
  • Java class,Object,Class的区别

    代码:

    http://www.cnblogs.com/hongdada/p/6060487.html

    package com.company;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            Class a= Test.class;
            Class b=new Test().getClass();
            Class c=Class.forName("com.company.Test");
            System.out.println(a==b);
            System.out.println(b==c);
            System.out.println(a);
            System.out.println(a.getName());
            System.out.println("===========");
            //Class的性质
            Class d=a.getClass();
            System.out.println(d);
            System.out.println(d.getName());
            System.out.println("===========");
            Class n1=a.getSuperclass();
            System.out.println(n1);
            System.out.println(n1.getName());
            System.out.println("===========");
            Class n2=d.getSuperclass();
            System.out.println(n2);
            System.out.println(n2.getName());
            System.out.println("===========");
            Class n3=Object.class;
            System.out.println(n3);
            System.out.println(n3.getName());
        }
    }
    class Test{}
    true
    true
    class com.company.Test
    com.company.Test
    ===========
    class java.lang.Class
    java.lang.Class
    ===========
    class java.lang.Object
    java.lang.Object
    ===========
    class java.lang.Object
    java.lang.Object
    ===========
    class java.lang.Object
    java.lang.Object
    View Code

    从上面的代码可以看出,Class一般是在反射的时候用到的,并且Class是Object的子类

    Class n4=new Class();  

    Class是一个特殊的类,不可以直接实例化。

    类型Class与关键字class容易分不清

    网上有这样的问题

    所有的类都是Class类的实例,Object是类,那么Object也是Class类的一个实例。
    所有的类都最终继承自Object类,Class是类,那么Class也继承自Object。

    可以看出第二条是对的,

    对于对一条,看代码

    package com.company;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            Class c = Object;
            System.out.println(c);
            System.out.println(c.getName());
        }
    }
    class Test{}

    执行的时候会报错,直接找不到符合变量Object,如果Object是Class的一个实例的话,不应该出现这样的问题,所以第一条应该是错误的。

    按我的理解,

    Class只是一个名字比较特殊的类,是关键字class修饰的类,一般应用于反射,只是名称比较特殊而已,可以通过Class类型来获取其他类型的元数据(metadata),比如字段,属性,构造器,方法等等,可以获取并调用。

    class是一个关键字,是用来修饰类

    Object是一个特殊的类,所有的类都继承该类,包括Class也继承Object。

    类是一个语法概念,是一个抽象的概念,所有class修饰的都属于这个概念。所有类都有一个(属性,好像也不是属性)class返回含有该类元数据的Class类的实例。(有点不好描述,就是比如Class a=Test.class)

    https://www.zhihu.com/question/30301819

  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/hongdada/p/6249144.html
Copyright © 2011-2022 走看看