java中內部類的一些測試,java定義一個測試類

本文目錄一覽:

java內部類部分的選擇題習題及答案 注意是選擇題

*類是面向對象編程的基本元素,它定義了一個對象的結構和行為。在Java程序里,要表達的概念封裝在類里。一個類定義了一個對象的結構和它的功能接口,功能接口稱為成員函數或方法。

類定義中,類名和超類名是合法的標識符。類定義的第一行是類聲明,關鍵字extends表示類是超類派生的子類。在Java中,有一個根類Object,其它的類是直接或間接從它派生而來,如果要定義Object的直接子類,可以省略extends子句,編譯器會自動包含它。最外層大括號內為類體,類體中定義了這個類中所有的變量和這個類所支持的方法。通常變量在方法前定義,類中所定義的變量和方法都是類的成員。對類的成員可以設定訪問權限,來限定其它對象對它的訪問,訪問權限可以有private、protected、public和friendly。對類的成員來說,可以分為實例成員和類成員兩種。

類名可以作為變量的類型來使用,如果一個變量的類型為一個類,那麼它指向的是這個類的實例,叫做對象實例。所有對象實例和它們的類型都是兼容的,就像可以把字節型的值賦予給整型的變量一樣,可以把對象的子類的任何實例賦給一個對象型的變量。 *操作符new用來生成一個類的實例,可以用幾個變量指向同一個對象。

一個實例是類模板的單獨的複製,帶有自己的稱為實例變量的數據集。一個實例也可以作為一個對象。當定義一個變量的類型是某個類時,它的默認值是null,null是對象型的一個實例。對象null沒有值,和整數零不同。

創建一個新的對象時,可以直接對它的實例變量賦值。每個對象都有它所屬類的實例變量的副本,每個對象的實例變量都是和其它對象的實例變量分離的,所以改變一個對象的實例變量不會影響其它對象的實例變量。

希望我能幫助你解疑釋惑。

Java內部類的特徵

1、Inner class 可以聲明為抽象類因此可以被其他的內部類繼承,也可以聲明為final的。

2、和外部類不同,Inner class可以聲明為private或protected。

3、Inner class可以聲明為static的,但此時就不能再使用外層封裝類的非static的成員變量。

4、非static的內部類中的成員不能聲明為static的,只有在頂層類或static的內部類中才可以聲明 static成員。

Java的內部類有什麼特點 作用和注意

1)根據位置的不同,Java中的內部類分為四種:

 靜態內部類

 使用static修飾,聲明在類體中

 靜態內部類中可以訪問外部類的靜態成員

 成員內部類

 聲明在類體中,不使用static,具有類的成員特徵,也就是,必須有類的實例才能創建內部類實例

 內部類實例可以訪問共享外部類的成員變量(很常用)

 如:鏈表的節點就可以定義為內部類

 局部內部類 把類聲明在方法中,就是局部內部類,作用域

 類似局部變量(很少見)

 匿名內部類

 匿名類,非常常見,可以寫在任何地方,就像一般的語句

 語法更象是創建對象:Date d = new Date(){//…};

 匿名類是對原類的一個繼承,同時創建了實例,{} 就是繼承以後的類體

類體中可使用所有類的語法

 匿名類不能寫構造器

 匿名類可以從抽象類或者接口繼承,必須提供抽象方法的實現

2) 任何內部類都編譯成獨立的class文件

3) 最大的作用:封裝!

 匿名類可以封裝內部概念:情侶間的“土豆”和菜市場的“土豆”是不一樣的

java的內部類有什麼作用和特點

Java中的內部類共分為四種:

靜態內部類static inner class (also called nested class)

成員內部類member inner class

局部內部類local inner class

匿名內部類anonymous inner class

靜態內部類Static Inner Class

最簡單的內部類形式。

類定義時加上static關鍵字。

不能和外部類有相同的名字。

被編譯成一個完全獨立的.class文件,名稱為OuterClass$InnerClass.class的形式。

只可以訪問外部類的靜態成員和靜態方法,包括了私有的靜態成員和方法。

生成靜態內部類對象的方式為:

OuterClass.InnerClass inner = new OuterClass.InnerClass();

示例代碼:

package com.learnjava.innerclass;

class StaticInner

{

private static int a = 4;

// 靜態內部類

public static class Inner

{

public void test()

{

// 靜態內部類可以訪問外部類的靜態成員

// 並且它只能訪問靜態的

System.out.println(a);

}

}

}

public class StaticInnerClassTest

{

public static void main(String[] args)

{

StaticInner.Inner inner = new StaticInner.Inner();

inner.test();

}

}

成員內部類Member Inner Class

成員內部類也是定義在另一個類中,但是定義時不用static修飾。

成員內部類和靜態內部類可以類比為非靜態的成員變量和靜態的成員變量。

成員內部類就像一個實例變量。

它可以訪問它的外部類的所有成員變量和方法,不管是靜態的還是非靜態的都可以。

在外部類裡面創建成員內部類的實例:

this.new Innerclass();

在外部類之外創建內部類的實例:

(new Outerclass()).new Innerclass();

在內部類里訪問外部類的成員:

Outerclass.this.member

示例代碼:

package com.learnjava.innerclass;

class MemberInner

{

private int d = 1;

private int a = 2;

// 定義一個成員內部類

public class Inner2

{

private int a = 8;

public void doSomething()

{

// 直接訪問外部類對象

System.out.println(d);

System.out.println(a);// 直接訪問a,則訪問的是內部類里的a

// 如何訪問到外部類里的a呢?

System.out.println(MemberInner.this.a);

}

}

}

public class MemberInnerClassTest

{

public static void main(String[] args)

{

// 創建成員內部類的對象

// 需要先創建外部類的實例

MemberInner.Inner2 inner = new MemberInner().new Inner2();

inner.doSomething();

}

}

局部內部類Local Inner Class

局部內部類定義在方法中,比方法的範圍還小。是內部類中最少用到的一種類型。

像局部變量一樣,不能被public, protected, private和static修飾。

只能訪問方法中定義的final類型的局部變量。

局部內部類在方法中定義,所以只能在方法中使用,即只能在方法當中生成局部內部類的實例並且調用其方法。

示例代碼:

package com.learnjava.innerclass;

class LocalInner

{

int a = 1;

public void doSomething()

{

int b = 2;

final int c = 3;

// 定義一個局部內部類

class Inner3

{

public void test()

{

System.out.println(“Hello World”);

System.out.println(a);

// 不可以訪問非final的局部變量

// error: Cannot refer to a non-final variable b inside an inner

// class defined in a different method

// System.out.println(b);

// 可以訪問final變量

System.out.println(c);

}

}

// 創建局部內部類的實例並調用方法

new Inner3().test();

}

}

public class LocalInnerClassTest

{

public static void main(String[] args)

{

// 創建外部類對象

LocalInner inner = new LocalInner();

// 調用外部類的方法

inner.doSomething();

}

}

匿名內部類Anonymous Inner Class

匿名內部類就是沒有名字的局部內部類,不使用關鍵字class, extends, implements, 沒有構造方法。

匿名內部類隱式地繼承了一個父類或者實現了一個接口。

匿名內部類使用得比較多,通常是作為一個方法參數。

生成的.class文件中,匿名類會生成OuterClass$1.class文件,數字根據是第幾個匿名類而類推。

示例代碼:

package com.learnjava.innerclass;

import java.util.Date;

public class AnonymouseInnerClass

{

@SuppressWarnings(“deprecation”)

public String getDate(Date date)

{

return date.toLocaleString();

}

public static void main(String[] args)

{

AnonymouseInnerClass test = new AnonymouseInnerClass();

// 打印日期:

String str = test.getDate(new Date());

System.out.println(str);

System.out.println(“—————-“);

// 使用匿名內部類

String str2 = test.getDate(new Date()

{

});// 使用了花括號,但是不填入內容,執行結果和上面的完全一致

// 生成了一個繼承了Date類的子類的對象

System.out.println(str2);

System.out.println(“—————-“);

// 使用匿名內部類,並且重寫父類中的方法

String str3 = test.getDate(new Date()

{

// 重寫父類中的方法

@Override

@Deprecated

public String toLocaleString()

{

return “Hello: ” + super.toLocaleString();

}

});

System.out.println(str3);

}

}

java內部類的方法內部類

把類放在方法內

class Outer {

public void doSomething(){

class Inner{

public void seeOuter(){

}

}

}

}

(1)、方法內部類只能在定義該內部類的方法內實例化,不可以在此方法外對其實例化。

(2)、方法內部類對象不能使用該內部類所在方法的非final局部變量。

因為方法的局部變量位於棧上,只存在於該方法的生命期內。當一個方法結束,其棧結構被刪除,局部變量成為歷史。但是該方法結束之後,在方法內創建的內部類對象可能仍然存在於堆中!例如,如果對它的引用被傳遞到其他某些代碼,並存儲在一個成員變量內。正因為不能保證局部變量的存活期和方法內部類對象的一樣長,所以內部類對象不能使用它們。

下面是完整的例子:

class Outer {

public void doSomething(){

final int a =10;

class Inner{

public void seeOuter(){

System.out.println(a);

}

}

Inner in = new Inner();

in.seeOuter();

}

public static void main(String[] args) {

Outer out = new Outer();

out.doSomething();

}

}

原創文章,作者:QYPS,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/147203.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QYPS的頭像QYPS
上一篇 2024-11-01 14:06
下一篇 2024-11-01 14:06

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論