詳解基於Java class物件說明、Java 靜態變數宣告與賦值說明
Jun 23, 2017 pm 01:50 PM
java
下面小編就為大家帶來一篇基於Java class物件說明、Java 靜態變數宣告與賦值說明(詳解)。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧
先看下JDK中的說明:
##
java.lang.Object java.lang.Class<T> Instances of the class Class represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects. Class has no public constructor. Instead Class objects are constructed automatically by the Java Virtual Machine as classes are loaded and by calls to the defineClass method in the class loader. The following example uses a Class object to print the class name of an object: void printClassName(Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass().getName()); } It is also possible to get the Class object for a named type (or for void) using a class literal. System.out.println("The name of class Foo is: "+Foo.class.getName()); 在一个运行着的JAVA应用中,类的任何实例都可以用Class对象来指代,Class可以指代所有的类和接口。枚举属于类,注解属于接口,均可以用Class指代。每个数组均属于反射的Class对象,数组中的每个元素和维度也同样拥有Class对象。Java基本类型(boolean, byte, char, short, int, long, float, and double)以及关键字void也都可以用Class指代。 Class类不存在构造函数,当类被加载过程中由JVM通过调用类加载器中的defineClass方法自动构造。 下面的例子是将一个对象通过Class对象打印出类名。 void printClassName(Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass().getName()); } 通过class关键字指定类型也是可以得到Class对象的 System.out.println("The name of class Foo is: "+Foo.class.getName());
登入後複製
/** * * 旨在测试Class对象和Instance之间的关系; * 旨在测试静态变量的声明和赋值过程; * @author zzy * */ public class ObjClass { private enum tmpEnum {A, B, C}; public static void main(String[] args){ int[] tmpArray = {1,2,3}; Class classType; try { // 通过类名直接获取Class对象,JVM中没有加载。 classType = InClass.class; System.out.println(".class: " + classType); System.out.println(".class finish."); // Java加载类 classType = Class.forName("InClass"); System.out.println("Class.forName: " + classType); System.out.println("Class.forName: finish."); // 创建实例 InClass newClassType = new InClass(); classType = newClassType.getClass(); System.out.println("new Object.getClass: " + classType); System.out.println("new Object.getClass: finish."); // 数组对象 classType = tmpArray.getClass(); System.out.println("Array.getClass:" + classType.getSimpleName()); System.out.println("Array.getClass: finish."); // 枚举对象 classType = tmpEnum.class; System.out.println("enum.class:" + classType); System.out.println("enum.class: finish."); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class InClass{ // 对静态变量声明之前赋值 { staticPara = 10; } public static int staticPara; // 构造函数 public InClass(){ System.out.println("construction..."); } // 静态代码块 static { System.out.println("static function..."); } // 静态变量赋值 { staticPara = 20; } { System.out.println("normal function, staticPara:" + staticPara); } // 静态变量赋值 { staticPara = 30; } }
登入後複製
#
.class: class InClass .class finish. static function... Class.forName: class InClass Class.forName: finish. normal function, staticPara:20 construction... new Object.getClass: class InClass new Object.getClass: finish. Array.getClass:int[] Array.getClass: finish. enum.class:class ObjClass$tmpEnum enum.class: finish.
登入後複製
說明:
1. .class方式取得類別檔案的Class對象,並不需要載入JVM中。 2. Class.forName的方式JVM會載入類,同時會編譯。 如此,類別中的靜態程式碼區塊就會被執行。 3. 建立實例過程中(已經載入到JVM中,也就是說編譯過了),呼叫建構函數,並執行非靜態程式碼區塊。 4. 靜態程式碼對於變數的宣告和賦值順序是沒有影響的(編譯過程處理),所以結果是20。 5. 資料物件和枚舉物件也是可以被Class物件指定的。以上是詳解基於Java class物件說明、Java 靜態變數宣告與賦值說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)