java類的修飾符,java中類的修飾符有哪些

本文目錄一覽:

java 中的修飾符有那幾個,它們的訪問許可權的範圍是多少?

java中的修飾符分為類修飾符,欄位修飾符,方法修飾符。根據功能的不同,主要分為以下幾種。

1、許可權訪問修飾符

public,protected,default,private,這四種級別的修飾符都可以用來修飾類、方法和欄位。

包外 子類 包內 類內

public yes yes yes yes

protected no yes yes yes

default no no yes yes

private no no no yes

2、final修飾符

final的意思是不可變,他可以修飾類、欄位、方法。修飾類後類不能被擴展(extends),也就是不能被繼承。修飾欄位後欄位的值不能被改變,因此如果有final修飾欄位,應該對欄位進行手動初始化。修飾方法後該方法不能被改變,也就是重寫。

3、abstract修飾符

abstract是抽象的意思,用來修飾類和方法,修飾類後,該類為抽象類,不能被實例化,必需進行擴展。修飾方法後,該方法為抽象方法必須被子類重寫(override)。

4、static修飾符

static用來修飾內部類,方法,欄位。修飾內部類說明該內部類屬於外部類而不屬於外部類的某個實例。修飾欄位說明該欄位屬於類而不屬於類實例。修飾方法說明該方法屬於類而不屬於類實例。

java的介面,類,屬性,方法各有哪些修飾符

1、 介面的修飾符只有:public

2、 類的修飾符分為:可訪問控制符和非訪問控制符兩種。

可訪問控制符是:公共類修飾符 public

非訪問控制符有:抽象類修飾符 abstract ;最終類修飾符 final

3、屬性的控制修飾符也分為:可訪問控制符和非訪問控制符兩類。

可訪問控制符有 4 種:公共訪問控制符: public ;私有訪問控制符: private ;保護訪問控制符: protected ;私有保護訪問控制符: private protected

非訪問控制符有 4 種:靜態域修飾符: static ;最終域修飾符: final ;易失 ( 共享 ) 域修飾符: volatile ;暫時性域修飾符: transient

4、方法的控制修飾符也分為:可訪問控制符和非訪問控制符兩類。

可訪問控制符有 4 種:公共訪問控制符: public ;私有訪問控制符: private ;保護訪問控制符: protected ;私有保護訪問控制符: private protected

非訪問控制符有 5 種:抽象方法控制符: abstract ;靜態方法控制符: static ;最終方法控制符: final ;本地方法控制符: native ;同步方法控制符: synchronized

Java內部類的修飾符有哪些?

一、內部類可以為四種:

⒈ 靜態內部類

⒉ 成員內部類

⒊ 局部內部類

匿名內部類幾種內部類的共性:

A、內部類仍然是一個獨立的類,在編譯之後會內部類會被編譯成獨立的.class文件,但是前面冠以外部類的類命和$符號。

B、內部類不能用普通的方式訪問。內部類是外部類的一個成員,因此內部類可以自由地訪問外部類的成員變數,無論是否是private的。

1、靜態嵌套類:從技術上講,靜態嵌套類不屬於內部類。因為內部類與外部類共享一種特殊關係,更確切地說是對實例的共享關係。而靜態嵌套類則沒有上述關係。它只是位置在另一個類的內部,因此也被稱為頂級嵌套類。靜態的含義是該內部類可以像其他靜態成員一樣,沒有外部類對象時,也能夠訪問它。靜態嵌套類不能訪問外部類的成員和方法。 class Outer{ static class Inner{} } class Test { public static void main(String[] args){ Outer.Inner n = new Outer.Inner(); } }

2、成員內部類:形式如下

class Outer { class Inner{} }

編譯上述代碼會產生兩個文件:Outer.class和Outer$Inner.class。成員內部類內不允許有任何靜態聲明!下面代碼不能通過編譯。

class Inner{ static int a = 10;

}能夠訪問成員內部類的唯一途徑就是通過外部類的對象!

A、從外部類的非靜態方法中實例化內部類對象。 class Outer { private

int i = 10; public void makeInner(){ Inner in = new Inner();

in.seeOuter(); } class Inner{ public void seeOuter(){

System.out.print(i); } }

}表面上,我們並沒有創建外部類的對象就實例化了內部類對象,和上面的話矛盾。事實上,如果不創建外部類對象也就不可能調用makeInner()方法,所以到頭來還是要創建外部類對象的。可能試圖把makeInner()方法修飾為靜態方法,即static

public void

makeInner()。這樣不創建外部類就可以實例化外部類了!但是在一個靜態方法里能訪問非靜態成員和方法嗎?顯然不能。它沒有this引用。沒能跳出那條規則!但是如果在這個靜態方法中實例化一個外部類對象,再用這個對象實例化外部類完全可以!也就是下一條的內容。

B、從外部類的靜態方法中實例化內部類對象。

class Outer { private int i = 10; class Inner{ public void seeOuter(){

System.out.print(i);

} } public static void main(String[] args) { Outer out = new Outer();

Outer.Inner in = out.new Inner(); //Outer.Inner in = new Outer().new

Inner(); in.seeOuter(); }

}被注釋掉的那行是它上面兩行的合併形式,一條簡潔的語句。對比一下:在外部類的非靜態方法中實例化內部類對象是普通的new方式:Inner in =

new Inner();在外部類的靜態方法中實例化內部類對象,必須先創建外部類對象:Outer.Inner

in = new Outer().new

Inner();

C、內部類的this引用。普通的類可以用this引用當前的對象,內部類也是如此。但是假若內部類想引用外部類當前的對象呢?用「外部類名」.this;的形式,如下例的Outer.this。

class Outer { class Inner{ public void seeOuter(){

System.out.println(this); System.out.println(Outer.this); } }

}

D、成員內部類的修飾符。對於普通的類,可用的修飾符有final、abstract、strictfp、public和默認的包訪問。但是成員內部類更像一個成員變數和方法。可用的修飾符有:final、abstract、public、private、protected、strictfp和static。一旦用static修飾內部類,它就變成靜態內部類了。

3、方法內部類:顧名思義,把類放在方法內。

class Outer { public void doSomething(){ class Inner{ public void

seeOuter(){ } } }

}

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

B、方法內部類對象不能使用該內部類所在方法的非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(); }

}

C、方法內部類的修飾符。與成員內部類不同,方法內部類更像一個局部變數。可以用於修飾方法內部類的只有final和abstract。

D、靜態方法內的方法內部類。靜態方法是沒有this引用的,因此在靜態方法內的內部類遭受同樣的待遇,即:只能訪問外部類的靜態成員。

4、匿名內部類:顧名思義,沒有名字的內部類。表面上看起來似乎有名字,實際那不是名字。

A、繼承式的匿名內部類。

class Car { public void drive(){ System.out.println(“Driving a car!”); }

} class Test{ public static void main(String[] args) { Car car = new

Car(){ public void drive(){ System.out.println(“Driving another car!”); }

}; car.drive(); } }結果輸出了:Driving another

car!

Car引用變數不是引用Car對象,而是Car匿名子類的對象。建立匿名內部類的關鍵點是重寫父類的一個或多個方法。再強調一下,是重寫父類的方法,而不是創建新的方法。因為用父類的引用不可能調用父類本身沒有的方法!創建新的方法是多餘的。簡言之,參考多態。B、介面式的匿名內部類。

interface Vehicle { public void drive(); } class Test{ public static

void main(String[] args) { Vehicle v = new Vehicle(){

public void drive(){ System.out.println(“Driving a car!”); } };

v.drive(); }

}上面的代碼很怪,好像是在實例化一個介面。事實並非如此,介面式的匿名內部類是實現了一個介面的匿名類。而且只能實現一個介面。

C、參數式的匿名內部類。class

Bar{ void doStuff(Foo f){}}interface Foo{ void foo();}class Test{

static void go(){ Bar b = new Bar();

b.doStuff(new Foo(){ public void foo(){ System.out.println(“foofy”); }

});

}}

二、許可權修飾符:public、protected、default、private。

修飾符:abstract、static、final。

public   使用對象:最廣,類、介面、變數、方法。

protected使用對象:變數、方法 注意:不能修飾類(外部類)。

default  使用對象:類、介面、變數、方法。(即預設,什麼也不寫)。

private  使用對象:變數、方法 注意:不能修飾類(外部類)。

abstract使用對象:類、介面、方法。

static  使用對象:類、變數、方法、初始化函數(注意:修飾類時只能修飾 內部類 )。

final   使用對象:類、變數、方法。

transient:告訴編譯器,在類對象序列化的時候,此變數不需要持久保存

volatile:指出可能有多個線程修改此變數,要求編譯器優化以保證對此變數的修改能夠被正確的處理。

native:用該修飾符定義的方法在類中沒有實現,而大多數情況下該方法的實現是用C、C++編寫的。

synchronized:修飾方法,多線程的支持。

在java中能用private修飾類嗎?

一般的類是不能用private修飾,類的可見性最少是包可見的,也就是默認的,不加任何修飾。

但是有一種特殊的情況,內部類是可以用private修飾的!不讓類以外的其他類訪問!這個問題在《java核心技術》里有講!

Java的外部類為什麼不能使用private、protected進行修飾?

對於頂級類(外部類)來說,只有兩種修飾符:public和默認(default)。因為外部類的上一單元是包,所以外部類只有兩個作用域:同包,任何位置。

因此,只需要兩種控制許可權:包控制許可權和公開訪問許可權,也就對應兩種控制修飾符:public和默認(default)。

如果類使用了private修飾符,說明是個內部類。內部類的上一級是外部類,那麼對應的有四種訪問控制修飾符:本類(private),同包(default),父子類(protected),任何位置(public)。

當一個內部類使用了private修飾後,只能在該類的外部類內部使用。可以想一下,一個java項目是不可能在一個class裡面完成的。

mvc模式中,是把類分為三層,一層層調用類。如果定義為私有的和受保護的就無法調用。換句話說,對於一個java文件,要麼就是自己單獨運行,要麼就是被其他程序作為庫調用。

如果一個java文件的類被private修飾,那麼是不是其他的程序或是類是無法使用它的,那麼他作為一個單獨的文件就沒啥用了。

如果它作為單個文件運行,類載入怎麼找到它呢,因為它對外不可見。同時,也失去了類的存在意義。因此,類只有public和默認修飾符。

在java中一個類的修飾符有哪些

一:訪問修飾符:

1.省略訪問修飾符

具有默認的訪問特性,即具有包訪問特性,只能被同一個包中的類使用。

2.public訪問修飾符

用於說明類和類的成員的訪問許可權。這種類叫公有類。在一個文件中只能有一個public類型的類。

例如:Rect和UseImport兩個類,分別在兩個不同的包中。順便回顧一下不同類要用import導入。(哎,一直就沒記住)

//Rect.java

pacakage my;

public class Rect

{

private int a,b;

public void init(int len,int width)

{

a=len;

b=width;

}

public int area()

{

return a*b;

}

}

//UseImport.java

import.my.*;//導入my 包的所有類

public class UseImport

{

public static void main(string[] args)

{

Rect x=new Rect();

x.init(2,3);

System.out.println(“矩形面積為:”+x.area());

}

}

3.private

用private修飾的類成員成為私有成員,只能在聲明該成員的類中使用,不能在類外使用。一般通過本類中公有方法進行訪問。

4.protected

protected修飾的類成員為保護成員,可以被三種類使用,分別是該類本身,該類的所有子類,該類同包的其他類,該類的子類。

5.private protected

私有保護成員。可被兩種類使用。分別是:該類本身和該類的所有子類。

二:特徵修飾符

1.abstract:抽象

修飾類為抽象類,修飾方法為抽象方法。只要類中有抽象方法,就必須定義為抽象類。抽象方法只能聲明,不能實現。但是可以在其子類中對抽象方法進行實現。抽象類中也可以包含非抽象方法。

2.final:最終

修飾的類為終止類,不能有子類。修飾變數為終止變數,只可賦值一次。修飾方法為終止方法,不能在子類中更改。如Socket、ServerSocket等都是final類,防止黑客派生子類進行破壞。同時,final與abstract是相互矛盾的。

3.static:靜態

靜態成員無需通過對象調用,可以直接通過類名直接調用。

public class RectArea//輸出6 和 12

{

public static void main(String[] args)

{

System.out.println(area(2,3));

System.out.println(area(3,4));

}

static void area(int a,int b)

JAVA中定義類頭時能使用的修飾符是什麼

有public,static ,abstract ,protected這幾種修飾符。

public

使用對象:類、介面、成員

介紹:無論它所處在的包定義在哪,該類(介面、成員)都是可訪問的

static

使用對象:類、方法、欄位、初始化函數

介紹:成名為static的內部類是一個頂級類,它和包含類的成員是不相關的。靜態方法

是類方法,是被指向到所屬的類而不是類的實例。靜態欄位是類欄位,無論該欄位所在的類創建了多少實例,該欄位只存在一個實例被指向到所屬的類而不是類的實例。初始化函數是在裝載類時執行的,而不是在創建實例時執行的。

abstract

使用對象:類、介面、方法

介紹:類中包括沒有實現的方法,不能被實例化。如果是一個abstract方法,則方法體

為空,該方法的實現在子類中被定義,並且包含一個abstract方法的類必須是一個abstract類

protected

使用對象:成員

介紹:成員只能在定義它的包中被訪問,如果在其他包中被訪問,則實現這個方法的類

必須是該成員所屬類的子類。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/205947.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 17:48
下一篇 2024-12-07 17:48

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

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

    編程 2025-04-29
  • Java JsonPath 效率優化指南

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

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

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

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

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

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

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

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 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
  • VSCode為什麼無法運行Java

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

    編程 2025-04-29
  • Python通配符有哪些

    Python通配符是一種表示字元串中模糊匹配的有效工具,用於匹配與具有特定模式匹配的字元串。Python中主要的通配符有:*,?,[]和{}。 一、星號通配符 * 在Python中…

    編程 2025-04-29

發表回復

登錄後才能評論