ホームページ Java &#&チュートリアル Javaにおける静的変数の役割と使い方を詳しく解説

Javaにおける静的変数の役割と使い方を詳しく解説

Nov 26, 2016 am 09:13 AM
java static

static は「グローバル」または「静的」を意味し、メンバー変数およびメンバーメソッドを変更するために使用され、静的コードブロックを形成することもできますが、Java 言語にはグローバル変数の概念がありません。

staticで変更されたメンバー変数やメンバーメソッドは、クラスのどのオブジェクトからも独立しています。つまり、クラスの特定のインスタンスに依存せず、クラスのすべてのインスタンスによって共有されます。

このクラスがロードされている限り、Java 仮想マシンはデフォルトでクラス名に基づいてランタイム データ領域のメソッド領域でそれらを見つけることができます。したがって、静的オブジェクトは、そのオブジェクトが作成される前でも、オブジェクトを参照せずにアクセスできます。

public で変更された静的メンバー変数とメンバー メソッドは、本質的にはグローバル変数とグローバル メソッドです。そのクラスのオブジェクトが宣言されると、静的変数のコピーは生成されませんが、クラスのすべてのインスタンスは同じ静的変数を共有します。

静的変数の前にプライベートな変更を加えることができます。これは、この変数がクラスの静的コード ブロック、またはクラスの他の静的メンバー メソッドで使用できることを意味します (もちろん、非クラスの静的メンバー メソッドでも使用できます)。静的メンバー メソッド - ナンセンス) ですが、他のメソッドでは使用できません。クラス名を通じてクラスを直接参照することが重要です。実際、プライベートはアクセス許可の制限を意味し、静的はインスタンス化せずに使用できることを意味し、理解しやすいことを理解する必要があります。 static の前に他のアクセス許可キーワードを追加しても効果は同じです。

静的に変更されたメンバー変数とメンバーメソッドは、慣例的にクラス名を通じて直接アクセスできます:

静的メソッド名(パラメーターリスト...)

クラス名。静的変数名

static で変更されたコード ブロックは、Java 仮想マシン (JVM) がクラスをロードするときに、そのコード ブロックが実行されます (非常に便利です、笑)。

1. 静的変数

クラスのメンバー変数は、静的であるかどうかに応じて 2 つのタイプに分類できます。1 つは静的変数またはクラス変数と呼ばれる、静的によって変更される変数です。静的、インスタンス変数と呼ばれます。

両者の違いは次のとおりです:

静的変数の場合、メモリ内にコピーは 1 つだけあります (メモリを節約するため)。JVM は静的変数に対してメモリを 1 回だけ割り当てます。静的変数のメモリ割り当てはプロセス中に完了します。クラスのロードに使用でき、クラス名によって直接アクセスできます (便利です)。もちろん、オブジェクトを通じてアクセスすることもできます (ただし、これはお勧めしません)。

インスタンス変数の場合、インスタンスが作成される前に、インスタンス変数は相互に影響を与えることなくメモリ内に複数のコピーを持つことができます(柔軟)。

そのため、静的変数は通常、次の 2 つの機能を実装する必要がある場合に使用されます:

オブジェクト間で値を共有する場合

変数へのアクセスが便利な場合

2. 静的メソッド

静的メソッドは、

したがって、 this キーワードと super キーワードは静的メソッドでは使用できず、それらが属するクラスのインスタンス変数とインスタンス メソッド (つまり、メンバー変数) に直接アクセスすることはできません。静的でないメンバー メソッド)、それらが属するクラスには静的メンバー変数とメンバー メソッドのみにアクセスできます。

インスタンスのメンバーは特定のオブジェクトに関連付けられているからです!これは暗記するのではなく、理解し理解する必要があります。 ! !

静的メソッドはインスタンスから独立しているため、静的メソッドは実装する必要があり、抽象化することはできません。

例えば、メソッド呼び出しを容易にするために、Java APIのMathクラス内のメソッドはすべて静的であり、一般クラス内の静的メソッドは他のクラスからもメソッドを呼び出しやすくします。

静的メソッドとは、クラス内のメソッドの特殊なタイプで、対応するメソッドは必要な場合にのみ静的に宣言されます。クラス内のメソッドは一般に非静的です

静的コードブロックとも呼ばれます。静的コード ブロック。クラス メンバーから独立したクラス内の静的ステートメント ブロックです。JVM は、メソッド本体のどこにでも配置できます。静的コードの場合、複数のブロックがあり、JVM はクラス内に出現する順序でそれらを実行します。各コード ブロックは 1 回だけ実行されます。例:

public class Test5 {   
private static int a;   
private int b;   
 
static{   
Test5.a=3;   
System.out.println(a);   
Test5 t=new Test5();   
t.f();   
t.b=1000;   
System.out.println(t.b);   
}   
static{   
Test5.a=4;   
System.out.println(a);   
}   
public static void main(String[] args) {   
// TODO 自动生成方法存根   
}   
static{   
Test5.a=5;   
System.out.println(a);   
}   
public void f(){   
System.out.println("hhahhahah");   
}   
}
ログイン後にコピー

実行結果:

3
hhahhahah
1000
4
5
ログイン後にコピー

静的コード ブロックを使用して、いくつかの静的変数に値を割り当てることができます。最後に、これらの例はすべて静的 main メソッドを備えているため、JVM は次のことを行うことができます。 main メソッドの実行時に直接呼び出します。

  4、static和final一块用表示什么

  static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!

  对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

  对于方法,表示不可覆盖,并且可以通过类名直接访问。

  有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。

  声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:

它们仅能调用其他的static 方法。

它们只能访问static数据。

它们不能以任何方式引用this 或super(关键字super 与继承有关,在下一章中描述)。

  如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:

// Demonstrate static variables,methods,and blocks.   
 
class UseStatic {   
static int a = 3;   
static int b;   
 
static void meth(int x) {   
System.out.println("x = " + x);   
System.out.println("a = " + a);   
System.out.println("b = " + b);   
}   
 
static {   
System.out.println("Static block initialized.");   
b = a * 4;   
}   
 
public static void main(String args[]) {   
meth(42);   
}   
}
ログイン後にコピー

一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 或12。然后调用main(),main() 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。

  注意:在一个static 方法中引用任何实例变量都是非法的。

  下面是该程序的输出:

Static block initialized.
x = 42
a = 3
b = 12
ログイン後にコピー

在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:

classname.method( )
ログイン後にコピー

这里,classname 是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java 如何实现全局功能和全局变量的一个控制版本。

  下面是一个例子。在main() 中,static方法callme() 和static 变量b在它们的类之外被访问。

class StaticDemo {   
static int a = 42;   
static int b = 99;   
static void callme() {   
 
System.out.println("a = " + a);   
}   
}   
 
class StaticByName {   
 
public static void main(String args[]) {   
StaticDemo.callme();   
System.out.println("b = " + StaticDemo.b);   
}   
}
ログイン後にコピー

下面是该程序的输出:

a = 42
b = 99
ログイン後にコピー

static成员是不能被其所在class创建的实例访问的。

如果不加static修饰的成员是对象成员,也就是归每个对象所有的。

加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的。


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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

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 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能 PHP対Python:コア機能と機能 Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

PHPの影響:Web開発など PHPの影響:Web開発など Apr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHP:多くのウェブサイトの基礎 PHP:多くのウェブサイトの基礎 Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

See all articles