搞懂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個),分別是描述類的字段和類的方法的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM