国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&はじめる Javaの靜的とは何ですか

Javaの靜的とは何ですか

Nov 14, 2019 am 11:58 AM
java static

Javaの靜的とは何ですか

1. 靜的メソッド

靜的メソッドは何にも依存しないため、一般に靜的メソッドと呼ばれます。 object アクセスできるので、靜的メソッドの場合は、オブジェクトにアタッチされていないため、this はありません オブジェクトがないため、this はありません。また、この機能により、クラスの非靜的メンバー変數(shù)および非靜的メンバー メソッドに靜的メソッドでアクセスすることはできません。これは、非靜的メンバー メソッド/変數(shù)は呼び出す前に特定のオブジェクトに依存する必要があるためです。

ただし、非靜的メンバー メソッドと非靜的メンバー変數(shù)には靜的メソッドではアクセスできませんが、靜的メンバー メソッド/変數(shù)には非靜的メンバー メソッドでアクセスできることに注意してください。簡単な例:

Javaの靜的とは何ですか

上記のコードでは、print2 メソッドはオブジェクトとは獨立して存在するため、クラス名を使用して直接呼び出すことができます。非靜的メソッド/変數(shù)が靜的メソッドでアクセスできる場合、メイン メソッドに次のステートメントがある場合:

MyObject.print2();

現(xiàn)時點ではオブジェクトがありません。str2 はまったく存在しません。 、したがって、競合が発生します。メソッドについても同様で、print1メソッドでは非靜的メンバ変數(shù)にアクセスするかどうか予測できないため、靜的メンバメソッド內(nèi)での非靜的メンバ変數(shù)へのアクセスも禁止されています。

非靜的メンバー メソッドの場合、靜的メンバー メソッド/変數(shù)へのアクセスに制限はありません。

したがって、オブジェクトを作成せずにメソッドを呼び出したい場合は、このメソッドを static に設(shè)定できます。最も一般的な靜的メソッドは main メソッドですが、main メソッドが靜的である必要がある理由については、これで明らかになりました。プログラムは main メソッドの実行時にオブジェクトを作成しないため、クラス名を介してのみアクセスできます。

# また、コンストラクターが靜的メソッドであるかどうかについては、http://blog.csdn.net/qq_17864929/article/details/48006835


## を參照してください。

#2. 靜的変數(shù)


靜的変數(shù)は靜的変數(shù)とも呼ばれます。靜的変數(shù)と非靜的変數(shù)の違いは次のとおりです: 靜的変數(shù)はすべてのオブジェクトによって共有され、メモリ內(nèi)には 1 つだけあり、コピーは [メソッド領(lǐng)域に保存] され、クラスが初めてロードされた場合にのみ初期化されます (final ありとなしの靜的変數(shù)の初期化場所は異なります)。非靜的変數(shù)はオブジェクトによって所有され、オブジェクトの作成時に初期化されます。複數(shù)のコピーがあり、各オブジェクトが所有するコピーは相互に影響しません。

靜的メンバー変數(shù)の初期化順序は、定義された順序で初期化されます。


3. 靜的コード ブロック


靜的キーワードは、プログラムのパフォーマンスを最適化するために靜的コード ブロックを形成する際にも重要な役割を果たします。靜的ブロックはクラス內(nèi)のどこにでも配置でき、クラス內(nèi)に複數(shù)の靜的ブロックが存在する可能性があります。クラスが初めてロードされるとき、各靜的ブロックは靜的ブロックの順序で実行され、1 回だけ実行されます [クラス ロードの原則に従って、各クラスは親委任ロードを使用して 1 回ロードされます]。

初期化シーケンスの靜的コード ブロック>構(gòu)築コード ブロック>コンストラクター関數(shù)

public class Client {
{//構(gòu)造代碼塊
System.out.println("執(zhí)行構(gòu)造代碼塊");
}
}

靜的ブロックを使用してプログラムのパフォーマンスを最適化できる理由は、その特性によるものです。クラスが次の場合にのみロードされます。ロードされた場合は 1 回実行されます。例を見てみましょう:

class Person{
private Date birthDate;
public Person(Date birthDate) {
this.birthDate = birthDate;
}
boolean isBornBoomer() {
Date startDate = Date.valueOf("1946");
Date endDate = Date.valueOf("1964");
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}

isBornBoomer は、その人が 1946 年から 1964 年の間に生まれたかどうかを判斷するために使用されます。isBornBoomer が呼び出されるたびに、startDate とbirthDate の 2 つのオブジェクトが生成され、結(jié)果として無駄が生じます。スペース。これに変更すると、効率が良くなります。実際、靜的コード ブロックを一度メモリにロードするメカニズムが使用されています:

class Person{
private Date birthDate;
private static Date startDate,endDate;
static{
startDate = Date.valueOf("1946");
endDate = Date.valueOf("1964");
}
public Person(Date birthDate) {
this.birthDate = birthDate;
}
boolean isBornBoomer() {
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}

したがって、多くの場合、必要な初期化操作は、一度実行されたものは靜的コード ブロックに配置されます。

4. 靜的內(nèi)部クラス

ここでは靜的內(nèi)部クラスを個別に記述するのではなく、通常の內(nèi)部クラスと比較することで靜的內(nèi)部クラスの理解を深めます。

##なぜ內(nèi)部クラスを使用するのでしょうか?

1. 內(nèi)部クラスは通常、その外部クラスによってのみ使用されます; [外部クラスによって使用される良い例は、ハッシュマップ コレクションに內(nèi)部クラス Entry があり、使用するためにハッシュマップ ストレージに変換されることです。 ]

2. 內(nèi)部クラスは外部クラスへの何らかのウィンドウを提供します。內(nèi)部クラスは外部クラスへの參照を持っているため、內(nèi)部クラスは外部クラスのプロパティに直接アクセスできます。

3. これが最も魅力的な理由でもありますが、外部クラスがインターフェイスを継承しているかどうかに関係なく、各內(nèi)部クラスは獨立してインターフェイスを継承できます。したがって、內(nèi)部クラスにより、多重継承の解決策がより完全になります。

クラス內(nèi)に定義されたクラスを內(nèi)部クラスと呼び、內(nèi)部クラスを含むクラスを外部クラスと呼びます。內(nèi)部クラスは、public、protected、private などのアクセス制限を宣言したり、他の內(nèi)部クラスや外部クラスが継承および拡張するために抽象として宣言したり、靜的または最終的に宣言したり、特定のインターフェイスを?qū)g裝したりできます。

外部類按常規(guī)的類訪問方式(以對象的方式)使用內(nèi)部 類,唯一的差別是外部類可以訪問內(nèi)部類的所有方法與屬性,包括私有方法與屬性,外部類訪問內(nèi)部類,需要創(chuàng)建對象訪問;有一點需要注意,內(nèi)部類不能訪問外部類所在的局部變量,只能訪問final修飾的局部變量。

在方法內(nèi)定義內(nèi)部類時,如果內(nèi)部類調(diào)用了方法中的變量,那么該變量必須申明為final類型,百思不得其解,后來想到應(yīng)該是生命周期的原因,因為方法內(nèi)定義的變量是局部變量,離開該方法,變量就失去了作用,也就會自動被消除,而內(nèi)部類卻不會離開它所在方法就失去作用,它有更廣的生命周期。

(1)創(chuàng)建實例

OutClass.InnerClass obj = outClassInstance.new InnerClass(); //注意是外部類實例.new,內(nèi)部類
AAA.StaticInner in = new AAA.StaticInner();//注意是外部類本身,靜態(tài)內(nèi)部類

(2)內(nèi)部類中的this

內(nèi)部類中的this與其他類一樣是指的本身。創(chuàng)建內(nèi)部類對象時,它會與創(chuàng)造它的外圍對象有了某種聯(lián)系,于是能訪問外圍類的所有成員,不需任何特殊條件,可理解為內(nèi)部類鏈接到外部類。 用外部類創(chuàng)建內(nèi)部類對象時,此內(nèi)部類對象會秘密的捕獲一個指向外部類的引用,于是,可以通過這個引用來訪問外圍類的成員。

(3)外部類訪問內(nèi)部類

內(nèi)部類類似外部類的屬性,因此訪問內(nèi)部類對象時總是需要一個創(chuàng)建好的外部類對象。外部類對象通過‘外部類名.this.xxx’的形式訪問內(nèi)部類的屬性與方法。如:

System.out.println("Print in inner Outer.index=" + pouter.this.index);
System.out.println("Print in inner Inner.index=" + this.index);

(4)內(nèi)部類向上轉(zhuǎn)型

內(nèi)部類也可以和普通類一樣擁有向上轉(zhuǎn)型的特性。將內(nèi)部類向上轉(zhuǎn)型為基類型,尤其是接口時,內(nèi)部類就有了用武之地。如果內(nèi)部類是private的,只可以被它的外部類問,從而完全隱藏實現(xiàn)的細節(jié)。

(5)方法內(nèi)的類

方法內(nèi)創(chuàng)建的類(注意方法中也能定義類),不能加訪問修飾符。另外,方法內(nèi)部的類也不是在調(diào)用方法時才會創(chuàng)建的,它們一樣也被事先編譯了。

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

定義靜態(tài)內(nèi)部類:在定義內(nèi)部類的時候,可以在其前面加上一個權(quán)限修飾符static。此時這個內(nèi)部類就變?yōu)榱遂o態(tài)內(nèi)部類。

通常稱為嵌套類,當內(nèi)部類是static時,意味著:

[1]要創(chuàng)建嵌套類的對象,并不需要其外圍類的對象;

[2]不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象(不能夠從靜態(tài)內(nèi)部類的對象中訪問外部類的非靜態(tài)成員);

嵌 套類與普通的內(nèi)部類還有一個區(qū)別:普通內(nèi)部類的字段與方法,只能放在類的外部層次上,所以普通的內(nèi)部類不能有static數(shù)據(jù)和static字段, 也不能包含嵌套類。但是在嵌套類里可以包含所有這些東西。也就是說,在非靜態(tài)內(nèi)部類中不可以聲明靜態(tài)成員,只有將某個內(nèi)部類修飾為靜態(tài)類,然后才能夠在這 個類中定義靜態(tài)的成員變量與成員方法。

另外,在創(chuàng)建靜態(tài)內(nèi)部類時不需要將靜態(tài)內(nèi)部類的實例綁定在外部類的實例上。普通非靜態(tài)內(nèi)部類的 對象是依附在外部類對象之中的,要在一個外部類中定義一個靜態(tài)的內(nèi)部類,不需要利用關(guān)鍵字new來創(chuàng)建內(nèi)部類的實例。靜態(tài)類和方法只屬于類本身,并不屬于 該類的對象,更不屬于其他外部類的對象。

(7)內(nèi)部類標識符

每個類會產(chǎn)生一個.class文件,文件名即為類名。同樣,內(nèi)部類也會產(chǎn)生這么一個.class文件,但是它的名稱卻不是內(nèi)部類的類名,而是有著嚴格的限制:外圍類的名字,加上$,再加上內(nèi)部類名字。

代碼具體:

public class OutClassTest 
{
static int a;
int b;
public static void test() {
System.out.println("outer class static function");
}
public static void main(String[] args) {
// new一個外部類
OutClassTest oc1 = new OutClassTest();
// 通過外部類的對象new一個非靜態(tài)的內(nèi)部類
OutClassTest.InnerClass no_static_inner = oc1.new InnerClass();
// 調(diào)用非靜態(tài)內(nèi)部類的方法
System.out.println(no_static_inner.getKey());
// 調(diào)用靜態(tài)內(nèi)部類的靜態(tài)變量
System.out.println(OutClassTest.InnerStaticClass.static_value);
// 不依賴于外部類實例,直接實例化內(nèi)部靜態(tài)類
OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass();
// 調(diào)用靜態(tài)內(nèi)部類的非靜態(tài)方法
System.out.println(inner.getValue());
// 調(diào)用內(nèi)部靜態(tài)類的靜態(tài)方法
System.out.println(OutClassTest.InnerStaticClass.getMessage());
}
private class InnerClass {
// 只有在靜態(tài)內(nèi)部類中才能夠聲明或定義靜態(tài)成員
// private static String tt = "0";
private int flag = 0;
public InnerClass() {
// 三.非靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問外部類的非靜態(tài)變量和靜態(tài)變量
System.out.println("InnerClass create a:" + a);
System.out.println("InnerClass create b:" + b);
System.out.println("InnerClass create flag:" + flag);
//
System.out.println("InnerClass call outer static function");
// 調(diào)用外部類的靜態(tài)方法
test();
}
public  String getKey() {
return "no-static-inner";
}
}
private static class InnerStaticClass {
// 靜態(tài)內(nèi)部類可以有靜態(tài)成員,而非靜態(tài)內(nèi)部類則不能有靜態(tài)成員。
private static String static_value = "0";
private int flag = 0;
public InnerStaticClass() {
System.out.println("InnerClass create a:" + a);
            // 靜態(tài)內(nèi)部類不能夠訪問外部類的非靜態(tài)成員
            // System.out.println("InnerClass create b:" + b);
            System.out.println("InnerStaticClass flag is " + flag);
            System.out.println("InnerStaticClass tt is " + static_value);
        }
        public int getValue() {
            // 靜態(tài)內(nèi)部類訪問外部類的靜態(tài)方法
            test();
            return 1;
        }
        public static String getMessage() {
            return "static-inner";
        }
    }
    public OutClassTest() {
        // new一個非靜態(tài)的內(nèi)部類
        InnerClass ic = new InnerClass();
        System.out.println("OuterClass create");
    }
}

有就是類名ClassName后面多了個.* ,意思是導入這個類里的靜態(tài)方法。當然,也可以只導入某個靜態(tài)方法,只要把 .* 換成靜態(tài)方法名就行了。然后在這個類中,就可以直接用方法名調(diào)用靜態(tài)方法,而不必用ClassName.方法名 的方式來調(diào)用。

好處:這種方法的好處就是可以簡化一些操作,例如打印操作System.out.println(…);就可以將其寫入一個靜態(tài)方法print(…),在使用時直接print(…)就可以了。但是這種方法建議在有很多重復調(diào)用的時候使用,如果僅有一到兩次調(diào)用,不如直接寫來的方便

example:

在Java 5中,import語句得到了增強,以便提供甚至更加強大的減少擊鍵次數(shù)功能,雖然一些人爭議說這是以可讀性為代價的。這種新的特性成為靜態(tài)導入。當你想使用static成員時,可以使用靜態(tài)導入(在API中的類和你自己的類上,都可以使用該特性)。下面是靜態(tài)導入前后的代碼實例:

在靜態(tài)導入之前:

public class TestStatic {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.toHexString(42));
}
}

在靜態(tài)導入之后:

import static java.lang.System.out;
import static java.lang.Integer.*;
public class TestStaticImport {
public static void main(String[] args) {
out.println(MAX_VALUE);
out.println(toHexString(42));
}
}

讓我們看一下使用靜態(tài)導入特性的代碼中將發(fā)生什么:

1. この機能は「靜的インポート」と呼ばれることが多いですが、構(gòu)文は import static の後に、インポートする靜的メンバーの完全修飾名またはワイルドカード文字を続ける必要があります。この例では、System クラスの out オブジェクトに対して靜的インポートを作成します。

2. この例では、java.lang.Integer クラスのいくつかの靜的メンバーを使用することができます。この靜的インポート ステートメントでは、ワイルドカードを使用して、「このクラスのすべての靜的メンバーに対して靜的インポートを?qū)g行したい」と指定しています。

3. ここで、ようやく靜的インポート機能の利點がわかりました。 System.out.println に System と入力する必要はありません。とても良い!また、Integer.MAX_VALUE に Integer を入力する必要もありません。したがって、このコード行では、靜的メソッドと定數(shù)のショートカットを使用できます。

4. 最後に、今回は Integer クラスのメソッドに対して、さらにショートカット操作を?qū)g行します。

この機能について少し皮肉を言われてきましたが、私たちだけではありません。いくつかのキーストロークを節(jié)約することでコードが読みにくくなるとは考えていませんが、多くの開発者が言語にコードを追加するよう求めています。

靜的インポートを使用するためのいくつかの原則を以下に示します。

靜的インポートではなく、靜的インポートと言う必要があります。

曖昧な名前の靜的メンバーに注意してください。たとえば、Integer クラスと Long クラスで靜的インポートを?qū)g行する場合、MAX_VALUE を參照するとコンパイラ エラーが発生します。これは、Integer と Long の両方に MAX_VALUE 定數(shù)があり、Java はどの MAX_VALUE を參照しているのかがわからないためです。

靜的インポートは、靜的オブジェクト參照、定數(shù) (靜的または最終的なものであることに注意してください)、および靜的メソッドに対して実行できます。

多くの Java トレーニング ビデオ はすべて PHP 中國語 Web サイトにあります。オンラインで學習することを歓迎します。

以上がJavaの靜的とは何ですかの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數(shù)の操作を?qū)g行し、結(jié)果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數(shù)のSQL操作を?qū)g行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設(shè)定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Java仮想マシン(JVM)內(nèi)部の理解 Java仮想マシン(JVM)內(nèi)部の理解 Aug 01, 2025 am 06:31 AM

thejvmenablesjavaの「writeonce、runany where "capabilitybyexcuting byteCodeThethermainComponents:1。theClassLoaderSubSystemloads、links、andinitializes.classfilesusingbootStrap、拡張、およびアプリケーションクラスローロー、

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現(xiàn)在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります?,F(xiàn)代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

ネットワークポートとファイアウォールの理解 ネットワークポートとファイアウォールの理解 Aug 01, 2025 am 06:40 AM

ネットワークポートアンドファイアワルクトグテルトエナブルコマニケーションwhiledensuringsecurity.1.networksarevirtualendpointsnumbered0–655 35、withwell-knownportslike80(http)、443(https)、22(ssh)、および25(smtp)識別pecificservices.2.portsoperateovertcp(信頼できる、c

Garbage CollectionはJavaでどのように機能しますか? Garbage CollectionはJavaでどのように機能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを?qū)g行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを?qū)g行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進みます 説明された延期聲明の例で進みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數(shù)が戻る前に指定された操作を?qū)g行するために使用されます。パラメーターは、延期時にすぐに評価され、関數(shù)は最後のファーストアウト(LIFO)の順に実行されます。 1.複數(shù)の債務(wù)は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

See all articles