搞懂Java的Class类

搞懂Java的大Class

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);
   }
}

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定义

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如何使用?

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

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

综上所述,我们知道了

  • Class就是一个普通的类,就是用来描述一个类的信息的(比如类有几个字段,几个方法,名字叫什么等等 )
  • 可以通过 3 种方法来获取Class的对象,也就是某个类的字节码
  • 有个某个类的字节码以后,我们就知道知道这个类的许多信息了
  • Class一般是在运行时使用,你只要告诉我类名,我就可以知道这个类中有多少方法,有多少字段,怎么调用等等
  • Filed,Method(还有其它的,我们只说这2个),分别是描述类的字段和类的方法的
posted @ 2021-06-25 20:17  蔚蓝的海洋  阅读(1945)  评论(1编辑  收藏  举报