qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          創(chuàng)建Java內(nèi)部類(lèi)的編譯錯(cuò)誤處理

           在創(chuàng)建非靜態(tài)內(nèi)部類(lèi)時(shí),經(jīng)常會(huì)遇到“No enclosing instance of type * is accessible. Must qualify the allocation with an enclosing   instance of type *(e.g. x.new A() where x is an instance of *).”這樣的報(bào)錯(cuò),其實(shí)原因只有一點(diǎn),內(nèi)部類(lèi)是依賴(lài)于外部類(lèi)存在的,所以在使用非靜態(tài)內(nèi)部類(lèi)時(shí),要求先實(shí)例化外部類(lèi)才可以使用內(nèi)部類(lèi)。關(guān)于非靜態(tài)內(nèi)部類(lèi),我們可以把它理解成外部類(lèi)的成員變量,我們?cè)谑褂靡粋€(gè)類(lèi)的非靜態(tài)成員變量時(shí)要求先對(duì)類(lèi)進(jìn)行實(shí)例化,然后通過(guò)對(duì)象來(lái)調(diào)用這個(gè)類(lèi)的非靜態(tài)成員變量。這里非靜態(tài)內(nèi)部類(lèi)同外部類(lèi)的關(guān)系,就如同非靜態(tài)成員變量同類(lèi)的關(guān)系一樣。所以在使用非靜態(tài)內(nèi)部類(lèi)時(shí),要求先實(shí)例化外部類(lèi)。

            下面我給出例子來(lái)分析一下:

          package com.csc.innerclasstest;
          /**
           *
           * @author csc
           *
           */
          //外部類(lèi)
          public class OuterClass {

           /**
            * @param args
            */
           public static void main(String[] args) {
            
            InnerClass innerClass = new InnerClass();
            innerClass.say();
            System.out.println("I am in OuterClass!");
           }
           
           //定義一個(gè)內(nèi)部類(lèi)
           private class InnerClass{
            
            private void say() {
             System.out.println("I am in InnerClass!");
            }
           }

          }

            上面的代碼的第16行將會(huì)報(bào)出“No enclosing instance of type OuterClass is accessible. Must qualify the allocation with an enclosing instance of type OuterClass (e.g. x.new A() where x is an instance of OuterClass).”這樣的編譯錯(cuò)誤。錯(cuò)誤的原因如上面紅色字體所述。

            解決方法一:將非靜態(tài)內(nèi)部類(lèi)轉(zhuǎn)換成靜態(tài)內(nèi)部類(lèi),即在上面程序的第21行的“Private”后面加上“Static”即可。

            解決方法二:先實(shí)例化外部類(lèi),然后通過(guò)外部類(lèi)來(lái)調(diào)用內(nèi)部類(lèi)的構(gòu)造函數(shù),代碼如下:

          package com.csc.innerclasstest;
          /**
           *
           * @author csc
           *
           */
          //外部類(lèi)
          public class OuterClass {

           /**
            * @param args
            */
           public static void main(String[] args) {
            
            //實(shí)例化外部類(lèi)
            OuterClass outerClass = new OuterClass();
            //通過(guò)外部類(lèi)引用內(nèi)部類(lèi)
            InnerClass innerClass = outerClass.new InnerClass();
            innerClass.say();
            System.out.println("I am in OuterClass!");
           }
           
           //定義一個(gè)內(nèi)部類(lèi)
           private class InnerClass{
            
            private void say() {
             System.out.println("I am in InnerClass!");
            }
           }

          }

            上面代碼的16行先進(jìn)行了外部類(lèi)的實(shí)例化,第18行通過(guò)外部類(lèi)來(lái)引用內(nèi)部類(lèi),這樣就不會(huì)出現(xiàn)“No enclosing instance of type OuterClass is accessible. Must qualify the allocation with an enclosing instance of type OuterClass (e.g. x.new A() where x is an instance of OuterClass”這個(gè)編譯報(bào)錯(cuò)了。

            本文轉(zhuǎn)載自:http://blog.csdn.net/caoshichao520326/article/details/8961297

          posted on 2013-05-28 10:23 順其自然EVO 閱讀(170) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2013年5月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 黔西| 澎湖县| 饶阳县| 临江市| 威宁| 政和县| 拉萨市| 基隆市| 安徽省| 鱼台县| 拜城县| 夏河县| 深泽县| 岢岚县| 巴林左旗| 文成县| 广饶县| 盱眙县| 隆林| 密云县| 和平县| 建瓯市| 娱乐| 华坪县| 福鼎市| 开阳县| 柘城县| 托克逊县| 攀枝花市| 嫩江县| 澄迈县| 大港区| 绥棱县| 涡阳县| 湖北省| 丹寨县| 水城县| 尼勒克县| 天气| 成安县| 前郭尔|