A. java中的靜態內部類的特點是什麼
需要了解2個概念:內部類和靜態修飾符static1)首先,用內部類是因為內部類與所在外部類有一定的關系,往往只有謹核該外部類調用此內部類。所以沒有必要專門用一個Java文晌鎮件存放這個類。2)靜態都是用來修飾類的內部成員的。比如靜態方法,靜態成員變數,靜態常量。
它唯一的作用就是隨著類的載入(而不是隨著對象的產生)而產生,以致可以用類名+靜態成員名直接獲得。這樣靜態內部類就宴晌粗可以理解了,因為這個類沒有必要單獨存放一個文件,它一般來說只被所在外部類使用。
並且它可以直接被用 外部類名+內部類名 獲得。以下舉例說明怎麼使用:Student類有個叫School的內部類(非靜態)Student stu = new Student();stu.School sch = new stu.School();sch就是School的一個對象。假如School是內部靜態類:Student.School sch = new Student.School()。
B. java 中靜態內部類欄位什麼時候初始化是在外部類載入的時候就初始化嗎
首先分析下名字:靜態內部類
靜態是static。靜態的方法或者參數是隨著類的載入而產生的(感覺應該是JVM啟動時static屬性就載入了。)。這就是為什麼不用實例化類,就可以調用它的原因。
內部類:用內部類是因為內部類與所在外部類有一定的關系,往往只有該外部類調用此內部類。其他類不會調用。所以沒必要另寫一個類。外部類可以調用內部類。而內部類不能調用外部類的方法。
所以我覺得
靜態內部類中的屬性,方法,是在外部類載入的時候初始化的。
希望對您有幫助。如果有問題請自行
谷歌
度娘.
C. Java:靜態內部類調用外部類的方法
static 用在類前面只是表示這個內部類與外面的類之間沒有實例之間的引用關系,是可以在內部類中直接創建外面的類的實例的。編譯器不會為我們自動創建關聯引用,但我們可以創建非關聯的實例。
這個時候相當於只是給了特定的可見性控制。
你創建兩個內部類,一個 static,一個非 static 然後在 eclipse 的 navigator 視圖中打開你的類觀察,那個非 static 類,編譯器自動創建了一個成員變數用來在外部類和內部類之間建立關聯。
D. java 中靜態內部類欄位什麼時候初始化
不是的,只有在載入內部類的時候才初始化 //有問題可以繼續交神瞎租流x0dx0a樓主只要看懂一下的代碼x0dx0a那麼對於類的載入x0dx0a基本上就沒問神埋題了x0dx0a最後類的載入過程的解釋x0dx0apublic class Test6 {x0dx0a public static void main(String[] args){x0dx0a new B();x0dx0a new A.C();x0dx0a }x0dx0a}x0dx0ax0dx0aclass A{x0dx0a private P p1 = new P("A--p1");x0dx0a static P p3 = new P("A--p3");x0dx0a public A(){x0dx0a System.out.println("A()");x0dx0a }x0dx0a private P p2 =new P("A--p2");x0dx0a static{x0dx0a new P("A--static"); x0dx0a }x0dx0a {new P("A{...}");}x0dx0a x0dx0a public static class C {x0dx0a private P p1 = new P("C--p1");x0dx0a static P p3 = new P("C--p3");x0dx0a public C(){x0dx0a System.out.println("C()");x0dx0a }x0dx0a private P p2 =new P("C--p2");x0dx0a static{x0dx0a new P("C--static"); x0dx0a }x0dx0a {new P("C{...}");}x0dx0a }x0dx0a}x0dx0ax0dx0aclass B extends A {x0dx0a private P p1 = new P("B --p1");x0dx0a static P p3 = new P("B -- p3");x0dx0a public B() {x0dx0a System.out.println("B()"); x0dx0a }x0dx0a public P p2 = new P("B -- p2");x0dx0a static {x0dx0a new P("B -- static");x0dx0a }x0dx0a x0dx0a {new P("B{...}");}x0dx0a}x0dx0ax0dx0aclass P {x0dx0a public P(String s) {x0dx0a System.out.println(s);x0dx0a } x0dx0a}x0dx0a/*x0dx0a x0dx0a有父類的情況x0dx0a1. 載入父類x0dx0a 1.1 為靜態屬性分配存儲空間並賦初始值 x0dx0a 1.2 執行靜態初始化塊和靜態初始化語句(從上至下)x0dx0a2. 載入子類x0dx0a 2.1 為靜態屬性分配存儲空間x0dx0a 2.2 執行靜態游兆初始化塊和靜態初始化語句(從上至下)x0dx0a3. 載入父類構造器x0dx0a 3.1 為實例屬性分配存數空間並賦初始值 x0dx0a 3.2 執行實例初始化塊和實例初始化語句x0dx0a 3.3 執行構造器內容x0dx0a4. 載入子類構造器x0dx0a 4.1 為實例屬性分配存數空間並賦初始值 x0dx0a 4.2 執行實例初始化塊和實例初始化語句x0dx0a 4.3 執行構造器內容x0dx0a5 回到main()x0dx0a內部類的載入過程也一樣x0dx0a*/
E. Java 靜態內部類作用
1、變值許可權修飾作用,在定義內部類的時候,可以在其前面加上一個許可權修飾符static。此時這個內部類就變為了靜態內部類。
2、在某些特殊的情況下,少了這個靜態內部類還真是不行。如在進行代碼程序測試的時候,如果在每一個Java源文件中都設置一個主方法(主方法是某個應用程序的入口,必須具有),那麼會出現很多額外的代碼。
3、最主要的時這段主程序的代碼對於Java文件來說,只是一個形式,其本身並不需要這種主方法。但是少了這個主方法又是萬萬不行的。在這種情況下,就可以將主方法寫入到靜態內部類中,從而不用為每個Java源文件都設置一個類似的主方法。
這對於代碼測試是非常有用的。在一些中大型的應用程序開發中,則是一個常用的技術手段。
例如:
對於兩個類,擁有相同的方法:
class People{
run();
}
interface Machine{
run();
}
此時有一個robot類:
class Robot extends People implement Machine.
此時run()不可直接實現。
interface Machine{
void run();
}
class Person{
void run(){
System.out.println("run");
}
}
class Robot extends Person{
private class MachineHeart implements Machine{
public void run(){
System.out.println("heart run");
}
}
public void run(){
System.out.println("Robot run");
}
Machine.getMachine(){returnnew MachineHeart();
}
class Test{
publicstaticvoid main(String[] args){
Robot robot=new Robot();
Machine m=robot.getMachine();
m.run();
robot.run();
}
}
F. Java中static的作用
1.static 成員變數
在 Java 中還支持用 static 修飾的內部類,稱為靜態內部類。靜態成員內部類的特點主要是它本身是類相關的內部類,所以它可以不依賴於外部類實例而被實例化。靜態內部類不能訪問其外部類的實例成員(包括普通的成員變數和方法),只能訪問外部類的類成員(包括靜態成員變數和靜態方法)。即使是靜態內部類的實例方法(非靜態成員方法)也不能訪問其外部類的實例成員。
G. java 內部類為什麼不能用靜態方法
靜態的對象,在內存中實默認實例派察化塵咐茄的,在載入的時候就會存放到內存中。也就是可以直接調用而不需要手動實例化。理解這個就不難理解樓主說的問題了。首先內部的靜態類他是不能直接被實例化的。你必須實例化外部類才能實例簡畝化它。而外部類不是默認載入的,他只有在手動實例化之後才有內存分配。這時問題出現了。既然靜態對象是默認載入,那麼靜態內部類應該先於外部類被載入到內存中。那麼這是又和我們之前的一個結論相反(首先內部的靜態類他是不能直接被實例化的。你必須實例化外部類才能實例化它。)所以這種寫法是錯誤的。
H. java中靜態內部類什麼時候載入
只有在載入內部類的時候才初始化
看懂以下的代碼,那麼對於類的載入,基本上就沒問題了,最後類的載入過程的解釋
public class Test6 {
public static void main(String[] args){
new B();
new A.C();
}
}
class A{
private P p1 = new P("A--p1");
static P p3 = new P("A--p3");
public A(){
System.out.println("A()");
}
private P p2 =new P("A--p2");
static{
new P("A--static");
}
{new P("A{...}");}
public static class C {
private P p1 = new P("C--p1");
static P p3 = new P("C--p3");
public C(){
System.out.println("C()");
}
private P p2 =new P("C--p2");
static{
new P("C--static");
}
{new P("C{...}");}
}
}
class B extends A {
private P p1 = new P("B --p1");
static P p3 = new P("B -- p3");
public B() {
System.out.println("B()");
}
public P p2 = new P("B -- p2");
static {
new P("B -- static");
}
{new P("B{...}");}
}
class P {
public P(String s) {
System.out.println(s);
}
}
/*
有父類的情況
1. 載入父類
1.1 為靜態屬性分配存儲空間並賦初始值
1.2 執行靜態初始化塊和靜態初始化語句(從上至下)
2. 載入子類
2.1 為靜態屬性分配存儲空間
2.2 執行靜態初始化塊和靜態初始化語句(從上至下掘森前)
3. 載入父類構造器
3.1 為實例屬性分配存數空間並賦初始值
3.2 執判清行實例初始化塊和實例初始化語句
3.3 執行構造春滑器內容
4. 載入子類構造器
4.1 為實例屬性分配存數空間並賦初始值
4.2 執行實例初始化塊和實例初始化語句
4.3 執行構造器內容
5 回到main()
內部類的載入過程也一樣
I. java中的靜態內部類有什麼特點
特點:
1、靜態內部類無需依賴於外部類,它可以獨立於外部對象而存在。
2、靜態內部類,多個外部類的對象可以共享同一個內部類的對象。
3、使用靜態內部類的好處是加強了代碼的封裝性以及提高了代碼的可讀性。
4、普通內部類不能聲明static的方法和變數,注意這里說的是變數,常量(也就是final static修飾的屬性)還是可以的,而靜態內部類形似外部類,沒有任何限制。
有問題歡迎提問,滿意請採納,謝謝!
J. java的靜態類型有什麼特點
靜態屬性:隨著類的載入而載入,該屬性不屬於某個對象,屬於整個類
靜態方法:直接使用類名春譽調嘩謹用,靜態方法里不能訪問亂森基非靜態成員變數
靜態類:不能直接創建對象,不可被繼承