java基礎(chǔ)

JAVA基礎(chǔ)

基本類型

  • enum 枚舉

    Size { SMALL , MEDIUM , LARGE , EXTRA }

    Size s = Size . MEDIUM

    每個(gè)枚舉類型都有一個(gè)靜態(tài)的 values 方法 , 它將返回一個(gè)包含全部枚舉值的數(shù)組。

    ordinal 方法返冋 enum 聲明中枚舉常量的位置 , 位置從 0 開始計(jì)數(shù)。

  • String

    1. String是對(duì)象 不是基本類型,可將變量重新賦值為新的字符串,但不能改變原始String內(nèi)容
    2. 判斷String是否相等用equals,==比較的將是倆個(gè)對(duì)象
  • 常量

    1. 使用final聲明常量為對(duì)象常量,每個(gè)對(duì)象都有。final CTIME = System.currentTimeMillis();
    2. 使用final static聲明的類靜態(tài)變量(類常量) static final CTIME = System.currentTimeMillis();
  • 基本類型包裝類

    基本數(shù)據(jù)類型 包裝類
    byte java.lang.Byte
    boolean java.lang.Boolean
    short java.lang.Short
    char java.lang.Character
    int java.lang.Integer
    long java.lang.Long
    float java.lang.Float
    double java.lang.Double

    轉(zhuǎn)換方法

     Integer i =  Integer.valueOf(1) ; 
     i.intValue();
     Integer i = 123; //由于有自動(dòng)裝包拆包機(jī)制可直接聲明
    

    關(guān)于自動(dòng)裝箱還有幾點(diǎn)需要說明 。 首先 , 由于包裝器類引用可以為 null , 所以自動(dòng)裝箱有可能會(huì)拋出一個(gè) NullPointerException 異常。

    另外,如果在一個(gè)條件表達(dá)式中混合使用 Integer 和 Double 類型 , Integer 值就會(huì)拆箱 ,提升為 double , 再裝箱為 Double。

對(duì)象與類

  • 重載

    類中允許同名函數(shù)不同參數(shù)的方法存在,根據(jù)調(diào)用時(shí)傳遞的參數(shù)類型自動(dòng)執(zhí)行對(duì)應(yīng)的方法。

  • 成員變量初始化

    1. 可直接賦值為常量值,也可為某個(gè)對(duì)象,也可為方法的返回值。

    2. 可通過初始化塊統(tǒng)一初始化,初始化塊將早于構(gòu)造函數(shù)前運(yùn)行

  • static

    1. 屬于類,而不屬于任何獨(dú)立的對(duì)象。
    2. static變量直接賦值 public static int i = 1;
    3. 放到static塊中同一初始化
    4. 可通過對(duì)象句柄調(diào)用靜態(tài)方法,但是不建議。
    static{
        i = 0x123;
          j = "never";
    }
    
  • 構(gòu)造函數(shù)

    1. 所有成員變量無論生命在類中任意位置,都將在構(gòu)造函數(shù)執(zhí)行前得到默認(rèn)初始化。
    2. 構(gòu)造函數(shù)名稱與類名稱一致。
    3. 很多類會(huì)重載一個(gè)無參數(shù)的構(gòu)造函數(shù)用來初始化適當(dāng)?shù)哪J(rèn)值。
    4. 如果類中沒有編寫構(gòu)造函數(shù),系統(tǒng)會(huì)提供一個(gè)無參數(shù)的構(gòu)造函數(shù),如果有一個(gè)有參數(shù)的構(gòu)造函數(shù),但創(chuàng)建對(duì)象時(shí)未傳遞參數(shù)將發(fā)生錯(cuò)誤。
    5. 可通過this(param)調(diào)用其他重載的構(gòu)造函數(shù)。
  • 初始化順序

    1. 所有數(shù)據(jù)域被初始化為默認(rèn)值 ( 0 、 false 或 null ) 。
    2. 按照在類聲明中出現(xiàn)的次序 , 依次執(zhí)行所有域初始化語句和初始化塊 。
    3. 如果構(gòu)造器第一行調(diào)用了第二個(gè)構(gòu)造器,則執(zhí)行第二個(gè)構(gòu)造器主體
    4. 執(zhí)行這個(gè)構(gòu)造器的主體
  • final

    1. 當(dāng)一個(gè)成員變量被聲明為final時(shí),系統(tǒng)將不會(huì)給與默認(rèn)初始化,需要手動(dòng)初始化,初始化后不能修改。對(duì)于其保存的是一個(gè)對(duì)象時(shí),不可修改代表不能將變量替換為其他對(duì)象的句柄,但可以該對(duì)象的屬性進(jìn)行操作。
    2. 當(dāng)一個(gè)類被聲明final時(shí),將不允許繼承,其類的所有方法自動(dòng)變?yōu)閒inal,但不包含成員變量。
    3. 當(dāng)一個(gè)方法被聲明final時(shí),將不允許重寫。
  • 方法參數(shù)

    1. java總是按值傳遞,對(duì)于基本類型的參數(shù)發(fā)生變化后對(duì)原始變量毫無影響,對(duì)于對(duì)象參數(shù)傳遞的是對(duì)象的句柄(概念上不等于引用傳遞,因?yàn)閷?duì)象變量的值就是句柄地址!),對(duì)對(duì)象進(jìn)行的操作將影響外部變量。

      此時(shí)變量a和b不會(huì)發(fā)生任何變化,因?yàn)閍和b在方法內(nèi)部被初始化為局部變量,對(duì)局部變量的修改不會(huì)影響到外部變量,但是對(duì)象的句柄地址與外部變量的地址一致,修改對(duì)象屬性會(huì)生效。

      總結(jié):

      一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類型的參數(shù)(即數(shù)值型或布爾型)。
      一個(gè)方法可以改變一個(gè)對(duì)象參數(shù)的狀態(tài) 。
      一個(gè)方法不能讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象。

    public class a{
        public void swap(object a,object b){
            object temp = a;
              a = b;
              b = temp;
        }
    }
    

    ?

  • finalize

    1. 可以為任何一個(gè)類添加 finalize 方法。
    2. finalize 方法將在垃圾回收器清除對(duì)象之前調(diào)用 。
    3. 在實(shí)際應(yīng)用中,不要依賴于使用finalize 方法回收任何短缺的資源 , 這是因?yàn)楹茈y知道這個(gè)方法什么時(shí)候才能夠調(diào)用。
    1. 一個(gè)類可以使用所屬包中的所有類,其他包中的所有public類
    2. 可以使用完整的包名+類名訪問,也可通過import先導(dǎo)入包
    3. 當(dāng)import的倆個(gè)包擁有同一個(gè)類名時(shí)需要通過完成包名+類名方式訪問。
    4. 靜態(tài)導(dǎo)入 import static java.lang.System . * ,import static java.lang.System.out ;執(zhí)行system下的靜態(tài)方法時(shí)無需加前綴。
    5. 使用package com.xxx.a 聲明當(dāng)前類所屬包,否則將處于默認(rèn)包中(default package),將類放到與包名相同的路徑下,com/xxx/a。
    6. 編譯器在編譯源文件的時(shí)候不檢查目錄結(jié)構(gòu) 。 例如 , 假定有一個(gè)源文件開頭有下列語句 :package con . myconpany ;即使這個(gè)源文件沒有在子目錄 com / mycompany 下 , 也可以進(jìn)行編譯 。 如果它不依賴于其他包 , 就不會(huì)出現(xiàn)編譯錯(cuò)誤 。 但是 , 最終的程序?qū)o法運(yùn)行 , 除非先將所有類文件移到正確的位置上 。 如果包與目錄不匹配 , 虛擬機(jī)就找不到類。
    7. 前面已經(jīng)接觸過訪問修飾符 public 和 private。 標(biāo)記為 public的部分可以被任意的類使用 ; 標(biāo)記為 private 的部分只能被定義它們的類使用。 如果沒有指定 public或 private , 這 個(gè) 部分 ( 類 、 方法或變量 ) 可以被同一個(gè)包中的所有方法訪問。
  • 類路徑

    1. 將JAR文件放在一個(gè)目錄中,例如 : /home/user/archives。
    2. 設(shè)置類路徑(classpath)。 類路徑是所有包含類文件的路徑的集合 。/home/user/classdir : . : / home /user/archives/*,其中" : . :"中的“.”為當(dāng)前路徑。
    3. javac編譯器總是在當(dāng)前的目錄中查找文件,但Java虛擬機(jī)僅在類路徑中有目錄的時(shí)候才查看當(dāng)前目錄如果沒有設(shè)置類路徑,那也并不會(huì)產(chǎn)生什么問題,默認(rèn)的類路徑包含目錄.然而如果 設(shè)置了類路徑卻忘記了包含目錄,則程序仍然可以通過編譯,但不能運(yùn)行。
    4. java - classpath /home/user/classdir : . : / home/user/archives/* app 在運(yùn)行時(shí)設(shè)置class path

繼承

  • 基本概念

    1. extends, super.xxx調(diào)用父類方法,super(param)調(diào)用父類構(gòu)造函數(shù)。

    2. 如果子類的構(gòu)造器沒有顯式地調(diào)用超類的構(gòu)造器,則將自動(dòng)地調(diào)用超類默認(rèn)( 沒有參數(shù) )的構(gòu)造器。如果超類沒有不帶參數(shù)的構(gòu)造器 ,并且在子類的構(gòu)造器中又沒有顯式地調(diào)用超類的其他構(gòu)造器,則Java編譯器將報(bào)告錯(cuò)誤。

    3. 判斷是否應(yīng)該設(shè)計(jì)為繼承關(guān)系,is-a規(guī)則,表明子類的每個(gè)對(duì)象也是父類的對(duì)象,如經(jīng)理也屬于員工。is-a另一種規(guī)則是置換法則,表示出現(xiàn)超類的任意地方都可以用子類對(duì)象替換??梢詫⒆宇惖膶?duì)象賦給超類的變量。

    4. 在 Java 中子類數(shù)組的引用可以轉(zhuǎn)換成超類數(shù)組的引用 ,而不需要采用強(qiáng)制類型。但不建議這么做,所有數(shù)組都要牢記創(chuàng)建它們的元素類型 , 并負(fù)責(zé)監(jiān)督僅將類型兼容的引用存儲(chǔ)到數(shù)組中。

    5. java中方法的名字和參數(shù)列表作為方法的簽名,但返回值不是,如果子類擁有父類同樣簽名的方法將會(huì)覆蓋父類的方法,在覆蓋方法時(shí)一定要保證返回值的兼容性。允許子類返回值為父類返回值的子類型。

    6. private,static,final方法編譯器可以明確知道調(diào)用的是哪個(gè)方法,這種調(diào)用稱為靜態(tài)綁定。否則為動(dòng)態(tài)綁定。

    7. 程序運(yùn)行動(dòng)態(tài)綁定時(shí)虛擬機(jī)需要從子類到父類逐一查找適用的方法,開銷很大,所以虛擬機(jī)會(huì)提前為每個(gè)類建立一個(gè)方法表,虛擬機(jī)查詢方法表簽名找到調(diào)用方法,但用super.xxx()調(diào)用父類方法時(shí)會(huì)查詢父類的方法表。

    8. 如果方法很簡短 、 被頻繁調(diào)用且沒有真正地被覆蓋 , 那么即時(shí)編譯器就會(huì)將這個(gè)方法進(jìn)行內(nèi)聯(lián)處理。 內(nèi)聯(lián)調(diào)用 e.getName()將被替換為訪問 e.name 域 。

    9. 在Java 中,每個(gè)對(duì)象變量都屬于一個(gè)類型 。類型描述了這個(gè)變量所引用的以及能夠引用的對(duì)象類型。所以可以得到可引用的所有類。子類可以轉(zhuǎn)為父類的引用,父類不能轉(zhuǎn)為子類的引用。使用instanceof操作符可以檢測是否可以被引用轉(zhuǎn)換。

  • 多態(tài)

    1. 存在繼承關(guān)系
    2. 子類要重寫(非重載)父類的方法
    3. 父類數(shù)據(jù)類型的引用指向子類對(duì)象。
    4. 那么我們可以根據(jù)以上情況總結(jié)出多態(tài)成員訪問的特點(diǎn):
      成員變量
      編譯看左邊(父類),運(yùn)行看左邊(父類)
      成員方法
      編譯看左邊(父類),運(yùn)行看右邊(子類)。動(dòng)態(tài)綁定
      靜態(tài)方法
      編譯看左邊(父類),運(yùn)行看左邊(父類)。
      (靜態(tài)和類相關(guān),算不上重寫,所以,訪問還是左邊的)
      只有非靜態(tài)的成員方法,編譯看左邊,運(yùn)行看右邊
    5. 多態(tài)后不能使用子類特有的屬性和方法 。
  • 抽象類

    1. 包含抽象方法的類也必須要聲明為抽象。
    2. 抽象類可以包含成員變量和已經(jīng)實(shí)現(xiàn)的方法。
    3. 抽象類不能實(shí)例化,但可以創(chuàng)建的抽象類的變量,但是只能引用已經(jīng)實(shí)現(xiàn)全部方法的子類。
  • object

    1. Object.equals(obj1,obj2) 比較兩個(gè)對(duì)象是否引用同一地址。
    2. 如果重新定義 equals 方法, 就必須重新定義hashCode 方法, 以便用戶可以將對(duì)象插人到散列表中,Equals 與 hashCode 的定義必須一致 : 如果 x.equals (y ) 返回 true , 那么x.hashCode()就必須與 y.hashCode()具有相同的值。
    3. 整型數(shù)組類型 int[]可以被轉(zhuǎn)換成Object, 但不能轉(zhuǎn)換成對(duì)象數(shù)組。
  • arrayList

    1. arrayList管理著對(duì)象引用的一個(gè)內(nèi)部數(shù)組。 最終 ,數(shù)組的全部空間有可能被用盡 。 這就顯現(xiàn)出數(shù)組列表操作魅力 : 如果調(diào)用 add 且內(nèi)部數(shù)組已經(jīng)滿了, 數(shù)組列表就將自動(dòng)地創(chuàng)建一個(gè)更大的數(shù)組, 并將所有的對(duì)象從較小的數(shù)組中拷貝到較大的數(shù)組中 。如果已經(jīng)清楚或能夠估計(jì)出數(shù)組可能存儲(chǔ)的元素?cái)?shù)量 , 就可以在填充數(shù)組之前調(diào)用ensureCapacity 方法 :staff.ensureCapacity(100) ;這個(gè)方法調(diào)用將分配一個(gè)包含 100 個(gè)對(duì)象的內(nèi)部數(shù)組。 然后調(diào)用100 次 add , 而不用重新分配空間。
    2. 容量為100的arrayList初始化完成后可能不包含任何元素,而size為100的arrayList則包含100個(gè)元素。
    3. staff.size()將返回 staff 數(shù)組列表的當(dāng)前元素?cái)?shù)量 , 它等價(jià)于數(shù)組 a 的 a.length 。
    4. 當(dāng)確定arrayList大小后應(yīng)調(diào)用trimToSize方法,多余的空間將會(huì)被垃圾回收?!?/li>
    int actualSize = ...;//動(dòng)態(tài)確定數(shù)組大小,但無法解決動(dòng)態(tài)更改數(shù)組
    Employee[] staff = new Employee[actualSize];
    ArrayList<Integer> ids = new ArrayList<>(); //創(chuàng)建arrayList
    

    ?

  • 可變參數(shù)

    public void test(int... args){}

    允許將一個(gè)數(shù)組傳遞給可變參數(shù)方法的最后一個(gè)參數(shù):

    System.out.printf ( "%d %s” new Object[] {new Integer(123) ,"widgets"} ) ;

    等同于

    System.out.printf("%d %s",123,"widgets");

  • 反射

    1. 在運(yùn)行時(shí)分析類的能力 。
    2. 在運(yùn)行時(shí)查看對(duì)象 ,例如 , 編寫一個(gè) toString 方法供所有類使用。
    3. 實(shí)現(xiàn)通用的數(shù)組操作代碼 。
    4. 利用Method 對(duì)象 , 這個(gè)對(duì)象很像中的函數(shù)指針。
    5. 在 java . lang . reflect 包中有三個(gè)類 Field 、 Method 和 Constructor 分別用于描述類的域 、 方法和構(gòu)造器 。 這三個(gè)類都有一個(gè)叫做 getName 的方法 , 用來返回項(xiàng)目的名稱。 Field 類有一個(gè) getType 方法, 用來返回描述域所屬類型的 Class 對(duì)象。 Method和 Constructor 類有能夠報(bào)告參數(shù)類型的方法, Method 類還有一個(gè)可以報(bào)告返回類型的方法 。 這三個(gè)類還有一個(gè)叫做 getModifiers 的方法 , 它將返回一個(gè)整型數(shù)值, 用不同的位開關(guān)描述 public和 static 這樣的修飾符使用狀況。 另外 , 還可以利用 java.lang.refleCt 包中的Modifiei類的靜態(tài)方法分析getModifiers返回的整型數(shù)值。例如,可以使用 Modifier 類中的 isPublic 、 isPrivate 或 isFinal判斷方法或構(gòu)造器是否是 public 、 private 或 final 。 我們需要做的全部工作就是調(diào)用 Modifier類的相應(yīng)方法, 并對(duì)返回的整型數(shù)值進(jìn)行分析 , 另外 ,還可以利用 Modifier . toString 方法將修飾符打印出來。
  • class類

    1. 在Java中,每個(gè)class都有一個(gè)相應(yīng)的Class對(duì)象。也就是說,當(dāng)我們編寫一個(gè)類,編譯完成后,在生成的.class文件中,就會(huì)產(chǎn)生一個(gè)Class對(duì)象,用于表示這個(gè)類的類型信息。

    2. 在運(yùn)行期間,如果我們要產(chǎn)生某個(gè)類的對(duì)象,JVM會(huì)檢查該類型的Class對(duì)象是否已被加載。如果沒有被加載,JVM會(huì)根據(jù)類的名稱找到.class文件并加載它。一旦某個(gè)類型的Class對(duì)象已被加載到內(nèi)存,就可以用它來產(chǎn)生該類型的所有對(duì)象

    3. obj.getClass()方法將會(huì)返回一個(gè) Class 類型的實(shí)例 。

    4. 運(yùn)用.class的方式來獲取Class實(shí)例對(duì)于基本數(shù)據(jù)類型的封裝類還可以采用.TYPE來獲取相對(duì)應(yīng)的基本數(shù)據(jù)類型的Class實(shí)例.

    5. 還可以調(diào)用靜態(tài)方法 forName 獲得類名對(duì)應(yīng)的 Class 對(duì)象。

    6. 虛擬機(jī)為每個(gè)類型管理一個(gè) Class 對(duì)象 。 因此 , 可以利用 = =運(yùn)算符實(shí)現(xiàn)兩個(gè)類對(duì)象比較的操作 。

    7. newInstance方法可以創(chuàng)建一個(gè)相同類類型的實(shí)例,調(diào)用默認(rèn)沒有參數(shù)的構(gòu)造函數(shù),返回新創(chuàng)建的對(duì)象。

    8. Math.class.getMethod ("sqrt", double.class); 獲取sqrt方法

    String className = "java.util.Random"; 
    Class cl = Class.forName(className);//獲得class對(duì)象
    
    if (e.getClass() == Employee.class) //比較class對(duì)象
    
    String s = "java.util.Random" ;
    Object m = Class.forName(s).newlnstance(); //創(chuàng)建相同類型實(shí)例
    

    ?

  • 設(shè)計(jì)技巧

    1. 將公共操作和域放在超類
    2. 不要使用受保護(hù)的域,由于可能被更多的子類繼承從而訪問,破壞封裝性。
    3. 使用繼承實(shí)現(xiàn) “ is - a ” 關(guān)系。
    4. 除非所有繼承的方法都有意義,否則不要使用繼承。
    5. 在覆蓋方法時(shí), 不要改變預(yù)期的行為。
    6. 使用多態(tài) , 而非類型信息。
    7. 不要過多地使用反射

接口

  • 基本概念
    1. 接口中的所有方法自動(dòng)地屬于 public。因此,在接口中聲明方法時(shí),不必提供關(guān)鍵字public.但實(shí)現(xiàn)接口的方法必須標(biāo)為public。
    2. 在接口中還可以定義常量。double I = 1; 等于 public static final I = 1;
    3. 提供實(shí)例域和方法實(shí)現(xiàn)的任務(wù)應(yīng)該由實(shí)現(xiàn)接口的那個(gè)類來完成。 因此 , 可以將接口看成是沒有實(shí)例域的抽象類。
    4. 接口不能實(shí)例化,但是可以聲明接口變量,其值必須為實(shí)現(xiàn)了接口的對(duì)象引用。
    5. 可以用instanceof檢查對(duì)象是否實(shí)現(xiàn)了某個(gè)接口。
    6. 接口也可以被繼承。

內(nèi)部類

  • 基本內(nèi)部類

    1. 內(nèi)部類方法可以訪問該類定義所在的作用域中的數(shù)據(jù),包括私有的數(shù)據(jù)。
    2. 內(nèi)部類可以對(duì)同一個(gè)包中的其他類隱藏起來。
    3. 當(dāng)僅僅想定義一個(gè)回調(diào)函數(shù)時(shí)不想創(chuàng)建一個(gè)文件類時(shí),使用匿名內(nèi)部類比較便捷。
    4. 內(nèi)部類的對(duì)象總有一個(gè)隱式引用,指向了外部類對(duì)象。這個(gè)引用在內(nèi)部類的定義中不可見。
    5. 內(nèi)部類的隱式引用對(duì)象在內(nèi)部類中構(gòu)造函數(shù)中創(chuàng)建。
    6. 只有內(nèi)部類可以聲明為私有的,常規(guī)類只可以具有包可見性,或公有可見性。
    7. 在外部類作用域之外,可以這樣訪問內(nèi)部類.OuterClass.InnerClass.
    8. 內(nèi)部類中的靜態(tài)成員變量必須為final,對(duì)于每個(gè)外部對(duì)象會(huì)分別有有一個(gè)內(nèi)部類實(shí)例,如果這個(gè)成員變量不是final,它肯能就不是唯一的。
    9. 內(nèi)部類不能有static 方法。內(nèi)部類是一種編譯器現(xiàn)象,與虛擬機(jī)無關(guān),編譯器會(huì)把內(nèi)部類翻譯成$分隔外部類名與內(nèi)部類名的常規(guī)類文件,而虛擬機(jī)對(duì)此一無所知. 如: outerClass$InnerClass
    10. 內(nèi)部類可以訪問外部類的私有成員變量,是通過在外部類添加靜態(tài)方法,靜態(tài)方法將外部類對(duì)象作為參數(shù),返回私有成員的值。
image
  • 局部內(nèi)部類

    1. 局部類不能用public或private訪問說明符聲明,它的作用域被限定在這個(gè)局部塊中(一個(gè)方法中).
    2. 局部可以對(duì)外部世界完全隱藏起來,其他外部類的其他方法也不能訪問。除了在聲明的局部方法中,沒有任何方法知道局部類的存在。
    3. 局部類相比其他內(nèi)部類,不僅能夠訪問外部類,還可以訪問定義局部類方法內(nèi)的局部變量,不過那些局部變量必須事實(shí)上為final,這說明,它們一旦賦值就絕不會(huì)改變。局部內(nèi)部類將方法中的局部變量在局部類中創(chuàng)建成員變量進(jìn)行備份(這也說明了為什么必須事實(shí)上為final),防止包含局部類的方法執(zhí)行完畢后將局部變量銷毀。
  • 匿名局部類

    1. 假如只創(chuàng)建這個(gè)類的一個(gè)對(duì)象,就不必命名了,這種類被稱為匿名內(nèi)部類。
    2. 語法格式:new SuperType(params){ 匿名局部類成員變量和方法 },其中SuperType可以是接口,于是內(nèi)部類就要實(shí)現(xiàn)這個(gè)接口,也可以是一個(gè)類,于是內(nèi)部類就要拓展它。
    3. 由于構(gòu)造函數(shù)的名字必須與類名相同,匿名類沒有類名,所以匿名類不能有構(gòu)造函數(shù)。
image
  • 靜態(tài)內(nèi)部類

    1. 當(dāng)使用內(nèi)部類只是為了把一個(gè)類隱藏在另外一個(gè)類的內(nèi)部,并不需要引用外圍類對(duì)象,此時(shí)可以將內(nèi)部類聲明為static,以便取消產(chǎn)生的引用。
    2. 靜態(tài)內(nèi)部類可以有靜態(tài)成員變量和方法。
    3. 只有內(nèi)部類可以聲明為static,靜態(tài)內(nèi)部類的對(duì)象除了沒有對(duì)生成它的外圍類對(duì)象的引用特權(quán)外,與其他的所有內(nèi)部類完全一樣。如果在內(nèi)部類中聲明了靜態(tài)方法確沒有將類聲明為static,編譯器將會(huì)給出警告,沒有可用的隱式外圍類型對(duì)象初始化內(nèi)部類對(duì)象。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,813評(píng)論 0 11
  • Win7下如何打開DOS控制臺(tái)? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,710評(píng)論 4 12
  • 1、一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?答:可以有多個(gè)類,但只能有一個(gè)publ...
    岳小川閱讀 1,023評(píng)論 0 2
  • 這個(gè)系列面試題主要目的是幫助你拿輕松到offer,同時(shí)還能開個(gè)好價(jià)錢。只要能夠搞明白這個(gè)系列的絕大多數(shù)題目,在面試...
    獨(dú)念白閱讀 406評(píng)論 0 3
  • 前言:最近感冒的不太想去面試,在家就對(duì)Java se的基礎(chǔ)做了一些小總結(jié) 1.JDK和JRE的區(qū)別 一 基礎(chǔ)知識(shí) ...
    AntCode閱讀 1,208評(píng)論 0 1

友情鏈接更多精彩內(nèi)容