作者在之前工作中,面试过很多求职者,发现有很多面试者对Java的 Class 搞不明白,理解的不到位,一知半解,一到用的时候,就不太会用。

想写一篇关于Java Class 的文章,没有那么多专业名词,希望用通俗的语言能把Java的 Class 这个概念讲明白,理解了Class后,Java的反射也就好理解多了。

Class很容易,保证看了就明白,我们先来熟悉一个最基础的概念,什么是类?

什么是类?

这个想必所有的学过面向对象编程语言的同学应该都知道,下面给出正式一点的描述类就是具备某些共同特征的实体的集合

比如下面定义一个 Student 类

class Student{String name;int age;public void learn(){System.out.println("正在学习");}public int getAge(){return age;}public void hello(String message){System.out.println(message);}
}

所有的学生都有一姓名,都有年龄,都要去学习,这些都学生的共性

那么既然所有的学生都有一些公共的特性,那么我们Java(其它语言也一样)语言中,所有的类是不是也都有公共的特性呢?

是不是不太明白?所有的类都有公共的特性? 是的?没听错
我们再定义一个类Book,如下

class Book{private float price;private String author;
}

所有的书都有 价格,作者等公共的特性(这里为了简单,例子尽可能代码少点)

所以,不管是上面的Student,Book类,还是Java语言中的自带类比如String

所有的类,都有下面的一些共性:

  • 所有的类,都有一个类名:比如上面的 Student, BookString类,再加上包名,假如包名是 com.test , 那么这些类的名字就是com.test.Student , com.test.Book, com.test.String
  • 所有的类,都有0个或者多个字段,比如上面的 name,age,price,author
  • 所有的类,都有0个或者多个方法,比如上面的learn()
  • 所有的类,都有修饰符,比如public,private,protected
  • 所有的类,都有0个或者多个静态方法
  • 等等等

Class到底是什么?

通过上面的分析我们知道,所有的类都有一些公共特性,那么我们就定义一个类,来描述这些公共特性,我们暂且把这个类起个类名,叫 Info

其实我们这里的Info类,就是java中的Class,java中的Class其实就是个普通的类而已,和其它的类没什么不一样的。不信看看Class定义

是不是就是一个普通的类,我们把继承关系去掉,是不是就是下面这样了

public class Class {....
}

可不就是个普通的类嘛,只不过类名也叫Class,和java中的关键字class,只是首字母大写了而已,要我说当初就不应该起名叫Class,应该叫Type,就不会有那么多人误解了,就不会有人把Classclass这两个弄的晕头转向的傻傻分不清了。

总之一句话:Class就是一个普通的类,这个类描述的是所有的类的公共特性

Class类能干什么?

了解Class类能干什么之前,我们先来扩展一些其它的东西

既然上面我们知道了,所有的类都是有公共特性的,我们定义了一个叫Class的类来描述这些公共特性

那么是不是所有的类的方法,所有的类的字段,是不是也有公共的特性?
答案是的

是不是有点迷糊? 不要怕,很简单,举个例子就知道了。
还是上面的Student,Book类,

  • 所有的类的字段,都有名字。
    比如Book类中的price字段,它的名字是不是"price"
  • 所有的类的字段,都有类型。
    比如Book类中的price字段,它的类型是 float
  • 所有的类的字段,都有修饰符。
    比如Book类中的price字段,它的修饰符是 private

所以这些类的字段公共的特性,我们也可以定义一个类来描述,这个类就是Field
我们看一下JDK中关于Field的定义

是不是和Class类一样,Field类也是一个普通的类

同理,类中所有的方法,是不是也有公共的特性?
答案:是的

  • 所有的类的方法,都有方法名
    比如Student类中的getAge()方法,它的方法名是 "getAge"
  • 所有的类的方法,都有返回值类型
    比如Student类中的getAge()方法,它的返回值是 int类型
  • 所有的类的方法,都有参数。(无参数也是算是特殊的参数吧)
    比如Student类中的hello(String message)方法,有一个参数,参数的类型是值是 String类型
  • 所有类的方法,都有修饰符号。
    比如Student类中的getAge()方法,它修饰符号是 public

所以这些类的方法的公共的特性,我们也可以定义一个类来描述,这个类就是Method
我们看下JDK中的定义

同样是一个普通的类

由上面可以,那么Class类就是通过FieldMethod来描述类中的字段和方法
我们来看一下JDK中Class类中,关于Field和Method的成员

这些数组就是保存类中的字段或者方法的。

扯远了,回到开头,Class类能干什么?
既然通过上面我们知道了,Class类中保存的是所有类的公共特性,那么是不是我们通过Class知道某个类中有多少方法,有多少字段,每个字段叫什么名字,每个字段的类型是什么,每个方法的方法名是什么,某个方法有几个参数,等等

答案是肯定的
那如何通过Class知道你说的这些信息呢?
当然是写代码啊,比如我们在程序运行的时候,点击某个按钮,打印出某个类的信息,是可以做到的

Class如何使用?

既然上面我们知道了Class能干什么了?下面我们简单的了解一下,如何使用Class

如何使用Class?

Class就是一个普通的类啊,使用普通的类就是创建一个对象,才能使用啊
很简单啊,我们创建一个Class的对象就行了啊,就可以调用对象的各种方法了啊
使用就是这么简单

如何获取一个Class的对象?

我们先看一下JDK中 Class类的构造函数

就这一个构造函数,还是私有的,所以,我们不能直接new一个对象了

如何获取一个Class的对象?
答案:有以下3种方法,直接上代码

public static void main(String[] args){//第一种Class c1 = String.class;//第二种String s = "hello,world";Class c2 = s.getClass();//第三种,以上面的Book类为例,其实就是动态加载类,注意捕获异常,因为类有可能不存在 try {Class c3 = Class.forName("com.test.Book");} catch (ClassNotFoundException e) {e.printStackTrace();}}

有了 Class的对象我们怎么用

我们直接通过一个demo来演示更加的直接,如下

package com.example.demo;public class Student {private String name;private int age;public static void main(String[] args){//一般我们把Class的对象叫字节码Class c = Student.class;// 外部普通类System.out.println("Student类名是:" + c.getName());System.out.println("Student类的简单类名是:" + c.getSimpleName());System.out.println("Student类有" + c.getDeclaredFields().length + "个字段");/*** ....* 我们可以通过 c (也就是Student这个类的对象,或者你也可以叫做Student类的字节码)* 拿到Student类中所有的方法名,方法数,字段名,字段数量,甚至你还可以通过Method来调用方法* 只要查查API,熟悉了API,就能做到* 暂时我们只打印简单*/}
}

总结一下:
综上所述,我们知道了

  • Class就是一个普通的类,就是用来描述一个类的信息的(比如类有几个字段,几个方法,名字叫什么等等 )
  • 可以通过 3 种方法来获取Class的对象,也就是某个类的字节码
  • 有个某个类的字节码以后,我们就知道知道这个类的许多信息了
  • Class一般是在运行时使用,你只要告诉我类名,我就可以知道这个类中有多少方法,有多少字段,怎么调用等等
  • Filed,Method(还有其它的,我们只说这2个),分别是描述类的字段和类的方法的

关于 Class 的知识就讲到这里,主要是明白 Class 到底是个什么东西,剩下的就自己查一下API,写个demo测试一下就行了。

requestfacade 这个是什么类?_Java 的大 Class 到底是什么?相关推荐

  1. 重庆市计算机专业高考试题,今年重庆高校毕业生达21.1万人 计算机类专业需求大...

    记者24日从重庆市教委获悉,2016年全市普通高校毕业生21.1万人,比2015年增加1万人.对于熟悉和精通计算机.信息技术的大学毕业生将面临更多的工作机会,市场营销.法学.管理.财会等文科类专业的需 ...

  2. 清华大学成立人工智能学堂班,土木类、电子信息类实行全程大类培养

    高考在即,5月18日,清华大学一年一度的校园开放日暨招生信息交流会如期举行.人工智能.大类贯通培养和专业认知,是本次校园开放日的关键词. 关键词1:人工智能 清华大学成立人工智能学堂班 开放日当天,清 ...

  3. Java中的String类占用多大的内存

    写在前面 对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题.很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有 ...

  4. java大嘴鱼游戏代码_Java编写大嘴怪游戏--原创

    第一步:大嘴鱼类 package fish; import java.awt.Color; import java.awt.Graphics; import java.awt.event.Action ...

  5. 邵阳市计算机学校某灿,邵阳市计算机中等专业学校在邵阳市财经商贸类专业技能大赛中喜获佳绩...

    原标题:邵阳市计算机中等专业学校在邵阳市财经商贸类专业技能大赛中喜获佳绩 邵阳新闻在线讯(谢泽良 刘欣)11月15日,由邵阳市教育局主办的2018年邵阳市中职学校技能竞赛财经商贸类Ⅱ项目的比赛在邵阳市 ...

  6. 【AI实战】给类ChatGPT的大语言模型外挂私有知识库

    [AI实战]给类ChatGPT的大语言模型外挂私有知识库 原理 准备 环境 代码 下载 chatglm-6b 模型权重文件 下载 Embedding 模型 GanymedeNil/text2vec-l ...

  7. 什么是大数据,大数据到底应该如何学?

    文章目录 一.食用须知 二.大数据的基本概念 1. 什么是大数据 2. 数据是如何采集的 3. 大数据真的能预测吗 三.什么是大数据开发 四.什么是大数据分析 五.应如何学习大数据 一.食用须知 再更 ...

  8. 云计算、物联网、大数据到底是什么?

    云计算.物联网.大数据到底是什么? 01 云计算 五个基本特征 三个服务模型 四个部署模型 1. 基础设施即服务 2. 平台即服务 3. 软件即服务 02 物联网 03 大数据 1. 三类定义 1)属 ...

  9. 大数据到底应该如何学?

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

最新文章

  1. 2022-2028年中国果壳活性炭行业市场发展调研及竞争战略分析报告
  2. python 柱状图-【python】【数据分析】3D柱状图就是这么好看
  3. 颠覆传统的电商智能助理-阿里小蜜技术揭秘
  4. Unity-2017.2官方实例教程Roll-a-ball(一)
  5. dll侧加载_win7系统开机提示xxxdll模块已加载但找不到入口点的解决方法
  6. python时间控件遮罩层_jquery遮罩层插件
  7. 使用DBATools编写SQL Server对象脚本
  8. 如何打造工业物联网帝国?
  9. android 的a标签,Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)...
  10. 连续状态空间模型离散化
  11. 第5章第25节:如何寻找和下载视频、音频素材 [PowerPoint精美幻灯片实战教程]
  12. 三维文件格式 abc, glTF, fbx, obj, dae, stl, 3ds, ply,...
  13. Axure RP 8的介绍
  14. 提高情商,从这几方面做
  15. gazebo教程(八)场景建模
  16. Ajax的封装(原生)
  17. 农村养老保险系统Mysql_2020年农村养老保险管理系统(在线查询)
  18. 电脑galgame全cg存档怎么用_Galgame十二神器:君与彼女与彼女之恋
  19. VPI使用过程中遇到的问题
  20. NOip2000税收与补贴问题

热门文章

  1. 8080:The Tomcat connector configured to listen on port 8080 failed to start 的解决办法
  2. SpringBoot2.x整合Redis 分布式集群_01
  3. 解决windows下Error:node with name rabbit already running on “XXX” 和管理页面打不开问题
  4. IntelliJ IDEA 2019.1 windows找不到文件‘chrome’
  5. MP 启动注入 SQL 原理分析
  6. 浏览器从输入URL到页面渲染过程 ——页面渲染流程
  7. mongodb php代码实例,php操作mongoDB实例分析
  8. C语言 二维数组定义和使用 - C语言零基础入门教程
  9. C语言 while 循环 - C语言零基础入门教程
  10. 鸿蒙os2.0开发者beta版,鸿蒙 OS 2.0 开发者beta版针对Mate 40系列设备开放