乐趣区

关于jvm:搞懂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 个),别离是形容类的字段和类的办法的
退出移动版