内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何在java中使用內(nèi)部類(lèi)

本篇文章給大家分享的是有關(guān)如何在java中使用內(nèi)部類(lèi),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比梅州網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式梅州網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋梅州地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴(lài)。

概念

內(nèi)部類(lèi):可以包含在另外一個(gè)類(lèi)中的類(lèi)

外部類(lèi):包含內(nèi)部類(lèi)的類(lèi)

每個(gè)內(nèi)部類(lèi)都會(huì)被編譯為一個(gè)獨(dú)立的類(lèi),生成一個(gè)獨(dú)立的字節(jié)碼文件。

內(nèi)部類(lèi)可以方便地訪問(wèn)外部類(lèi)的私有變量,內(nèi)部類(lèi)也可以聲明為private從而實(shí)現(xiàn)對(duì)外完全隱藏。

分類(lèi)

java中的四種內(nèi)部類(lèi)(根據(jù)定義的位置和方式劃分)

  • -靜態(tài)內(nèi)部類(lèi)

  • -成員內(nèi)部類(lèi)

  • -方法內(nèi)部類(lèi)

  • -匿名內(nèi)部類(lèi)

分類(lèi)介紹

-靜態(tài)內(nèi)部類(lèi)

特征:在類(lèi)的內(nèi)部中存在另一個(gè)類(lèi),且該類(lèi)被static修飾

使用范圍:在外部類(lèi)內(nèi),可以直接使用內(nèi)部類(lèi),在外部類(lèi)范圍以外使用外部類(lèi)名.靜態(tài)內(nèi)部類(lèi)名的方式使用內(nèi)部類(lèi)

public class StaticOuter {
    private static int shared = 100;
    public static class StaticInner{
        public void staticInnerMethod() {
            System.out.println("Static Inner Method" + shared);
        }
    }
    StaticInner si1 = new StaticInner();
    public void test() {
        StaticInner si = new StaticInner();
        si.staticInnerMethod();
    }
    public static void main(String[] args) {
        StaticOuter so = new StaticOuter();
        so.test();
    //在外部類(lèi)范圍內(nèi)
        StaticInner si1 = new StaticInner();
        si1.staticInnerMethod();
    //合法
    StaticOuter.StaticInner si2 = new StaticOuter.StaticInner();
        si2.staticInnerMethod();
    }
}
//在外部類(lèi)范圍外
class Test{
    StaticOuter.StaticInner si2 = new StaticOuter.StaticInner();
}

訪問(wèn)范圍

  • 靜態(tài)內(nèi)部類(lèi)只能訪問(wèn)外部類(lèi)中的static變量和方法。

  • 靜態(tài)內(nèi)部類(lèi)也可以訪問(wèn)外部類(lèi)中的private變量。

  • 靜態(tài)內(nèi)部類(lèi)中可以定義靜態(tài)變量和靜態(tài)方法。

-成員內(nèi)部類(lèi)

語(yǔ)法:成員內(nèi)部類(lèi)作為外部類(lèi)的一個(gè)成員存在

使用方法:

如何新建一個(gè)內(nèi)部類(lèi)的實(shí)例:不能直接使用外部類(lèi).內(nèi)部類(lèi)的方式,每個(gè)成員內(nèi)部類(lèi)對(duì)象對(duì)應(yīng)一個(gè)外部類(lèi)實(shí)例,因此需要先創(chuàng)建一個(gè)外部類(lèi)實(shí)例,然后才能生成內(nèi)部類(lèi)的實(shí)例(如下面代碼)

訪問(wèn)范圍:

成員內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)中的靜態(tài)變量和方法,也可以訪問(wèn)實(shí)例變量和方法。但是書(shū)寫(xiě)格式有兩種:

(1)直接訪問(wèn);

(2)外部類(lèi).this.xxx,主要針對(duì)外部類(lèi)和內(nèi)部類(lèi)的出現(xiàn)變量重名或者方法重名的情況。

成員內(nèi)部類(lèi)也可以訪問(wèn)外部類(lèi)的私有變量

成員內(nèi)部類(lèi)中不可以定義靜態(tài)變量和靜態(tài)方法(final變量例外,它等同于常量),在后面的方法內(nèi)部類(lèi)和匿名內(nèi)部類(lèi)中也是不能存在靜態(tài)的變量和方法的,這是因?yàn)殪o態(tài)變量和靜態(tài)方法作為類(lèi)型的屬性和方法,一般是獨(dú)立使用的,而成員內(nèi)部類(lèi)和一個(gè)對(duì)一個(gè)的外部類(lèi)實(shí)例關(guān)聯(lián),一般不會(huì)獨(dú)立使用,所以這樣的使用意義不大。(這算是一種規(guī)定吧)。

public class OriginalClass {
    private static int t1 = 100;
    private int t2 = 200;
    class OriginalInner{
        public void test() {
      /*
           * 不合法的表示,在成員內(nèi)部類(lèi)中不可以定義靜態(tài)的變量和方法
          public static int inner = 100;
          public static void print() {
          }
          */
          //合法的final變量
          public static final int inner1 = 300;
            System.out.println("OriginalInner:"+ t1);//直接訪問(wèn)外部類(lèi)靜態(tài)變量
            System.out.println("OriginalInner:"+ t2);//直接訪問(wèn)外部類(lèi)成員變量
            action();//直接訪問(wèn)外部類(lèi)方法
            System.out.println("OriginalInner:"+ OriginalClass.this.t1);//
            System.out.println("OriginalInner:"+ OriginalClass.this.t2);
            OriginalClass.this.action();
        }
    }
    public void action() {
        System.out.println("originalinner action");
    }
    public static void main(String[] args) {
    //new一個(gè)內(nèi)部類(lèi)
        OriginalClass oc = new OriginalClass();
        OriginalInner oi = oc.new OriginalInner();
        oi.test();
    }
}

-方法內(nèi)部類(lèi)

語(yǔ)法:存在于方法體內(nèi)部的類(lèi)

使用范圍:方法內(nèi)部類(lèi)只能在定義的方法內(nèi)被使用

訪問(wèn)范圍:

如果包含內(nèi)部類(lèi)的方法是實(shí)例方法,那么可以訪問(wèn)外部類(lèi)的靜態(tài)變量和方法,也可以訪問(wèn)實(shí)例變量和方法;

如果包含內(nèi)部類(lèi)的方法是靜態(tài)方法,那么只能訪問(wèn)外部類(lèi)的靜態(tài)變量和方法。

方法內(nèi)部類(lèi)還可以直接訪問(wèn)方法的參數(shù)和方法中的局部變量,但是這些變量必須聲明為final。為什么需要聲明為final呢?這是因?yàn)榉椒▋?nèi)部類(lèi)操作的并不是外部的變量,而是它自己的實(shí)例變量,只是這些變量的值和外部一樣,對(duì)這些變量賦值,并不會(huì)改變外部的值,為避免混淆,所以干脆強(qiáng)制規(guī)定必須聲明為final。

我們知道被final修飾的基本類(lèi)型變量的值是不能被修改的,被final修飾的數(shù)組或者引用類(lèi)型變量的引用是不能修改的,即只能指向一個(gè)對(duì)象或者是數(shù)組,但是我們可以修改對(duì)象中的成員變量值或者是數(shù)組中元素的值。

其實(shí)使用final來(lái)修飾參數(shù)以及局部變量的目的還是保證方法內(nèi)部類(lèi)外面的元素不會(huì)在方法內(nèi)部類(lèi)中被修改,相當(dāng)于限制一個(gè)作用域的功能,保證方法內(nèi)部類(lèi)內(nèi)部的的修改不會(huì)影響方法內(nèi)部類(lèi)外面的同名變量值。

public class FunctionOuter {
    private static int s= 100;
    private int s1 = 20;
    public void print(final int param) {
        final int in = 300;
        class FunctionInner{
            public void innertest() {
                System.out.println("FunctionInner:s="+s);
                System.out.println("FunctionInner:s1="+s1);
                System.out.println("FunctionInner:in"+ in);
                test();
            }
        }
        FunctionInner fi = new FunctionInner();
        fi.innertest();
        System.out.println("print:in"+in);
    }
    public void test() {
        System.out.println("FunctionOuter:"+s);
    }
    public static void main(String[] args) {
        FunctionOuter fo = new FunctionOuter();
        fo.print(900);
    }
}

-匿名內(nèi)部類(lèi)

語(yǔ)法:匿名內(nèi)部類(lèi)沒(méi)有單獨(dú)的類(lèi)定義,它在創(chuàng)建對(duì)象的同時(shí)定義類(lèi)

new 父類(lèi)(參數(shù)列表){
  //匿名內(nèi)部類(lèi)實(shí)現(xiàn)部分
}
new 父接口(){
  //匿名內(nèi)部類(lèi)實(shí)現(xiàn)部分
}

匿名內(nèi)部類(lèi)只能使用一次,用來(lái)創(chuàng)建一個(gè)對(duì)象。沒(méi)有名字,沒(méi)有構(gòu)造方法,但是可以根據(jù)參數(shù)列表,調(diào)用對(duì)應(yīng)的父類(lèi)構(gòu)造方法。

在匿名內(nèi)部類(lèi)中可以定義實(shí)例變量和方法,以及初始化代碼塊,初始化代碼塊可以起到構(gòu)造方法的作用,只是構(gòu)造方法可以有多個(gè),但是初始化代碼塊只能有一塊,因?yàn)闆](méi)有構(gòu)造方法,它自己無(wú)法接受參數(shù),如果必須要參數(shù),則應(yīng)該是用其他內(nèi)部類(lèi)。

以上就是如何在java中使用內(nèi)部類(lèi),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞標(biāo)題:如何在java中使用內(nèi)部類(lèi)
分享鏈接:http://www.rwnh.cn/article44/ghdihe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、Google、品牌網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司網(wǎng)站改版、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
梧州市| 胶州市| 灵台县| 平阴县| 华宁县| 凤山县| 博白县| 正镶白旗| 昌平区| 会东县| 确山县| 芷江| 新野县| 静安区| 金坛市| 万安县| 安丘市| 白玉县| 清远市| 木里| 平泉县| 唐山市| 米脂县| 左贡县| 太保市| 屯门区| 本溪| 南溪县| 舞阳县| 沈阳市| 江口县| 东源县| 武定县| 怀宁县| 绥芬河市| 台前县| 平潭县| 偃师市| 河源市| 邳州市| 洮南市|