class和Class的区别

  • Java中Class类的作用与深入理解

Java中Class类的作用与深入理解

在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。JVM利用运行时信息选择相应的方法执行。而保存这些信息的类称为Class。可能容易产生混淆,容易想到class。不过二者没什么关系,class不过是描述类的一个关键字。而Class却是保存着运行时信息的类。

   它能做什么?Class类可以帮助我们在程序运行时分析类,说白了就是获取类中的值。可能瞬间就想到了反射,没错!Class一般就是和反射配套使用的,因为我们向Class提供一个类或一个类的类名,Class就可以提供我们很多信息,比如属性/方法/修饰符/构造器/类名等等。然后我们就可以进一步进行反射。不过,还是先来简单了解下Class类的内容和使用方式吧!

我们通常用以下方法来获取Class对象:
String str = new String();
Class cl = str.getClass();
因为这个类包含太多信息,所以我们可以通过它来获得具体一个类的域/方法和构造器。下面列举一些常用的方法:

public static void main(String[] args) throws Exception {
// 以String.class为例
String str = new String();
Class cl = str.getClass();
/**

  • 获取包名+类名

  • java.lang.String
    /
    cl.getName();
    /
    *

  • 只获取类名 - String
    /
    cl.getSimpleName();
    /
    *

  • 获取数组的Class对象

  • 因为所有的Java类都继承自Object,数组也一样.所以数组本身也是个Class, 得到数组的Class自然也可以转回数组.
    /
    cl.getComponentType();
    /
    *

  • 返回构造器数组,包括超类的公有成员.
    /
    cl.getConstructors();
    /
    *

  • 返回方法数组,包括超类的公有成员.
    /
    cl.getMethods();
    /
    *

  • 返回域数组,包括超类的公有成员.
    /
    cl.getFields();
    /
    *

  • 返回全部构造器数组,无论是public/private还是protected,不包括超类的成员.
    /
    cl.getDeclaredConstructors();
    /
    *

  • 返回全部域数组,无论是public/private还是protected,不包括超类的成员.
    /
    cl.getDeclaredFields();
    /
    *

  • 返回全部方法数组,无论是public/private还是protected,不包括超类的成员.
    /
    cl.getDeclaredMethods();
    /
    *

  • 获取类前的修饰符
    */
    cl.getModifiers();
    }
    我们可以通过一个类来获取Class对象,进而获取此类的信息。也可以通过全类名来获取Class对象。
    Class cl = Class.forName(“java.lang.String”);

     有了这个类的Class对象,我们就可以创建这个类的对象。最方便/快速的方法是调用newInstance()。默认情况下,它默认调用无参构造来返回一个对象。
    

String str = (String)(Class.forName(“java.lang.String”).newInstance());

    以下是用Constructor通过获取构造器来创建对象:

// 调用无参的私有构造函数

Constructor c1 = Class.forName(“java.lang.String”)
.getDeclaredConstructor();
c1.setAccessible(true);
String str1 = (String) c1.newInstance();

// 调用有参的私有构造函数

Constructor c2 = Class.forName(“java.lang.String”)
.getDeclaredConstructor(new Class[] { String.class });
c2.setAccessible(true);
String str2 = (String) c2.newInstance(“hello”);

Class不是太难,因为它就是个信息类。在运行时跟踪类,掌握类的全部信息。

class和Class的区别相关推荐

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  2. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  3. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  4. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  5. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  8. python中__dict__与dir()区别

    前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...

  9. java和C#面向对象的区别

    问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...

  10. 判别模型和生成模型的区别

    20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...

最新文章

  1. php多线程 mysql_php通过共享内存,控制mysql连接数,多进程插入数据(pcnt学习四)...
  2. 【Cocos2d实例教程一】xcode5下Cocos2d环境的搭建
  3. MySQL 面试必备:又一神器“锁”,不会的在面试都挂了
  4. Tensorflow2.x.x全卷积神经网络(CNN)
  5. HDU - 7073 Integers Have Friends 2.0 随机化 + 质因子
  6. 计算机主机接线视频教程,电脑主板跳线怎么接?电脑机箱与主板跳线接法图解教程...
  7. 关于cookie使用的几个方法
  8. 常用简单的sql语句
  9. 下列软件包有未满足的依赖关系: cmake-qt-gui : 依赖: cmake (= 3.10.2-1ubuntu2) E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依
  10. CrystalReport runtime的下载地址
  11. 【渝粤教育】国家开放大学2018年春季 0175-22T社会调查研究与方法 参考试题
  12. Java基础6:代码块与代码加载顺序
  13. python 抓取 快代理- 国内高匿代理 IP
  14. R语言分类变量独立性检验(Tests of independence)、使用Fisher精确检验fisher.test函数检验分类变量的独立性( test of independence)
  15. springboot 问卷调查系统
  16. 浅谈无线AP、无线路由器
  17. 计算机软件职称高校四川,四川省人社厅:今年部分高校职称自主评审
  18. [转载]洛谷日报索引
  19. 【转载】几封读者来信的回复
  20. 3.1 Web前端:实战电商页面1:静态布局

热门文章

  1. linux获取完整的man(manpages)linux参考手册/中文man的下载和使用/获取buildin 命令的完整帮助文档/多种man手册/man着色colorful man
  2. Python使用ffmpeg下载m3u8高清视频
  3. 如何用个人电脑利用ipv6搭建网站
  4. unity 项目实践经验 和 架构体系
  5. 南大通用8a产品工具orato8a
  6. FCKEDITO获得获得输入值的基本方法
  7. 如何在不泄露私人信息的情况下共享屏幕
  8. 2016年最新的第三方支付公司排名
  9. 【综述专栏】基于深度学习的深度图补全
  10. 感觉各种知道,问答,百科的真实性和可信性都被网络营销给搞坏了