Java的反射機制

2021-08-15 14:22:53 字數 1518 閱讀 9842

類物件,就是用於描述這種類,都有什麼屬性,什麼方法的。

獲取類物件有3種方式

1. class.forname

2. hero.class

3. new hero().getclass()

在乙個jvm中,一種類,只會有乙個類物件存在。所以以上三種方式取出來的類物件,都是一樣的。

注: 準確的講是乙個classloader下,一種類,只會有乙個類物件存在。通常乙個jvm下,只會有乙個classloader。因為還沒有引入classloader概念, 所以暫時不展開了。

package reflection;

import charactor.hero;

public class testreflection catch (classnotfoundexception e)

}}

無論什麼途徑獲取類物件,都會導致靜態屬性被初始化,而且只會執行一次。(除了直接使用 class c = hero.class 這種方式,這種方式不會導致靜態屬性被初始化)

四、在靜態方法上加synchronized,同步物件是什麼

當synchronized修飾靜態方法的時候, 同步物件就是這個類的類物件。

如**中的例子,當第乙個執行緒進入method1的時候,需要占用testreflectionstatic.class才能執行。

第二個執行緒進入method2的時候進去不,只有等第乙個執行緒釋放了對testreflectionstatic.class的占用,才能夠執行。 反推過來,第二個執行緒也是需要占用testreflectionstatic.class。 那麼testreflectionstatic.class就是method2的同步物件。

換句話說,靜態方法被修飾為synchronized的時候,其同步物件就是當前類的類物件。

package reflection;

public class testreflectionstatic

};thread1.setname("第乙個執行緒");

thread1.start();

//保證第乙個執行緒先呼叫

thread.sleep(1000);

thread thread2=new thread()

};thread2.setname("第二個執行緒");

thread2.start();

}public static void method1() catch (interruptedexception e) }}

/*對於method2而言,必然有個同步物件,通過觀察發現,

當某個執行緒在method1中,占用了testreflectionstatic.class之後

就無法進入method2,推斷出,method2的同步物件,就是testreflection.class

*/public static synchronized void method2() catch (interruptedexception e)

}}

java反射機制

private string getmethod catch instantiationexception e1 catch illegalacces ception e1 try catch illegalargumentexception e catch illegalacces ception...

Java反射機制

1.反射是指程式在執行時,可以通過反射機制拿到任何乙個類的內部所有資訊。2.可以獲得類的所有屬性資訊,包括私有屬性,並對其進行操作 3.可以獲得物件所對應的類 4.可以拿到本類,或父類中的方法,並且對其進行操作。常用方法 getname 獲得類對應的名稱 getdeclaredfields 獲得類中...

java 反射機制

當我們編寫的類生成的位元組碼檔案中的二進位制位元組流被類載入器載入到記憶體當中時,會在方法區產生乙個class物件,作為訪問這些類資訊的入口。假如我們編寫乙個person類,獲取class物件一般有3種方式 class有4個獲取字段資訊的方法,包括靜態變數和例項變數 所有的public欄位,包括其父...