我总结了72份面试题,累计3170页,斩获了30+互联网公司offer(含BATJM)
首战告捷,这份Java面试神技Plus版,让我成功拿到了阿里、京东、字节跳动等大厂offer
膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了
作者在之前工作中,面试过很多求职者,发现有很多面试者对Java的Class
搞不明白,理解的不到位,一知半解,一到用的时候,就不太会用。
想写一篇关于JavaClass
的文章,没有那么多专业名词,希望用通俗的语言能把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
,Book
,String
类,再加上包名,假如包名是 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
,就不会有那么多人误解了,就不会有人把Class
,class
这两个弄的晕头转向的傻傻分不清了。
总之一句话:Class就是一个普通的类,这个类描述的是所有的类的公共特性
Class类能干什么?
了解Class类能干什么之前,我们先来扩展一些其它的东西
既然上面我们知道了,所有的类都是有公共特性的,我们定义了一个叫Class
的类来描述这些公共特性
那么是不是所有的类的方法,所有的类的字段,是不是也有公共的特性?
答案是的
是不是有点迷糊? 不要怕,很简单,举个例子就知道了。
还是上面的Student
,Book
类,
所有的类的字段,都有名字。
比如Book
类中的price
字段,它的名字是不是"price"
所有的类的字段,都有类型。
比如Book
类中的price
字段,它的类型是float
所有的类的字段,都有修饰符。
比如Book
类中的price
字段,它的修饰符是private
所以这些类的字段公共的特性,我们也可以定义一个类来描述,这个类就是Field
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
我们看一下JDK中关于Field的定义
是不是和Class
类一样,Field
类也是一个普通的类
同理,类中所有的方法,是不是也有公共的特性?
答案:是的
所有的类的方法,都有方法名
比如Student
类中的getAge()
方法,它的方法名是"getAge"
所有的类的方法,都有返回值类型
比如Student
类中的getAge()
方法,它的返回值是int
类型
所有的类的方法,都有参数。(无参数也是算是特殊的参数吧)
比如Student
类中的hello(String message)
方法,有一个参数,参数的类型是值是String
类型
所有类的方法,都有修饰符号。
比如Student
类中的getAge()
方法,它修饰符号是public
所以这些类的方法的公共的特性,我们也可以定义一个类来描述,这个类就是Method
我们看下JDK中的定义
同样是一个普通的类
由上面可以,那么Class
类就是通过Field
和Method
来描述类中的字段和方法
我们来看一下JDK中Class
类中,关于Field和Method
的成员
这些数组就是保存类中的字段或者方法的。
扯远了,回到开头,Class类能干什么?
既然通过上面我们知道了,Class类中保存的是所有类的公共特性,那么是不是我们通过Class知道某个类中有多少方法,有多少字段,每个字段叫什么名字,每个字段的类型是什么,每个方法的方法名是什么,某个方法有几个参数,等等
答案是肯定的
那如何通过Class知道你说的这些信息呢?
当然是写代码啊,比如我们在程序运行的时候,点击某个按钮,打印出某个类的信息,是可以做到的
Class如何使用?
既然上面我们知道了Class
能干什么了?下面我们简单的了解一下,如何使用Class
如何使用Class?
Class就是一个普通的类啊,使用普通的类就是创建一个对象,才能使用啊
很简单啊,我们创建一个Class的对象就行了啊,就可以调用对象的各种方法了啊
使用就是这么简单