Java静的キーワード
1.静的キーワードの概要
特徴
1.クラス属性とクラス変数を変更するために使用されます。
2.静的コードブロックをロードします。
特徴
1.クラス変数のライフサイクルは、クラスのライフサイクルと同じ
在整个应用程序执行期间都有效
です。
2.静的に変更されたメンバーの変数とメソッドはクラスに属します直接通过类来调用
。3。静态方法不能调用非静态(方法/变量)
、コンパイルはエラーを報告します
。4。静的に変更されたメンバーのメソッドと変数没有this关键字
(オブジェクトに依存しません)
意義
1.オブジェクトを作成する場合
直接使用类名.(方法/变量)
2.一定時間のコンテンツのクラス属性の場合、可以节约资源开销
。
栗を与える:
クラスの特定の属性が国籍であると仮定すると、
中国の14億人の人口に対して14億個のオブジェクトが作成され、データに保存されます。次に、14億個の「中国」が繰り返し保存され、多くのリソースを浪費します。staticキーワードは、繰り返し保存されるこの「恥ずかしさ」を回避できます。
staticは、属性情報を「クラス」に直接格納します。このクラスは、直接类名.静态属性
読み取りおよび変更できます。public class Chinese{ private String ID;//身份证号码 private String name;//姓名 static String nationality = "中国";//国籍 构造方法,setter和getter方法 略 }
2.staticキーワードによって変更されたプロパティとメソッド
1.静的によって変更された属性
フォーマットを定義する
class Chinese{
static String nationality;//国籍
}
使用-割り当て
//======(推荐)直接使用类名赋值=========
Chinese.nationality = "中国";
//======(不推荐)使用对象名赋值=========
Chinese peopleOne = new Chinese("37**************11","张 __ __ ");
peopleOne.nationality = "中国";
ユースコール
//======(推荐)直接使用类名调用=========
System.out.println(Chinese.nationality);
//======(不推荐)使用对象名调用=========
Chinese peopleTwo = new Chinese("37**************22","李 __ __ ");
System.out.println(peopleTwo.nationality);
完全なコード例
class Chinese{
private String ID;//身份证号码
private String name;//姓名
//使用static修饰国籍
static String nationality;//国籍
public Chinese() {
}
public Chinese(String ID, String name) {
this.ID = ID;this.name = name;}
public String getID() {
return ID;}
public void setID(String ID) {
this.ID = ID;
public String getName() {
return name;}
public void setName(String name) {
this.name = name;}
public static String getNationality() {
return nationality;}
public static void setNationality(String nationality) {
Chinese.nationality = nationality;}
}
public class Test {
public static void main(String[] args) {
//(推荐)使用类名.变量名进行赋值
Chinese.nationality = "中国";
//(推荐)使用类名.setter方法赋值
Chinese.setNationality("中国");
//=======静态属性未被private修饰时两种赋值方式
//创建第一个对象
Chinese peopleOne = new Chinese("37**************11","张 __ __ ");
//(不推荐)使用对象名.变量名进行赋值
peopleOne.nationality = "中国";
//(不推荐)使用对象名.setter方法赋值
peopleOne.setNationality("中国");
System.out.println(
"身份证号码为:"+peopleOne.getID()+","+
"姓名:"+peopleOne.getName()+","+
//(推荐)使用类名.变量名获取变量值
"国籍:"+Chinese.nationality+"。");
//创建第二个对象
Chinese peopleTwo = new Chinese("37**************22","李 __ __ ");
System.out.println(
"身份证号码为:"+peopleTwo.getID()+","+
"姓名:"+peopleTwo.getName()+","+
//(不推荐)使用对象名.变量名获取变量值
"国籍:"+peopleTwo.nationality+"。");
}
}
プログラム操作のスクリーンショット
2.静的によって変更されたメソッド
フォーマットを定義する
[权限修饰符] static [返回值类型] 方法名称([参数列表]){
[方法体;]
}
ユースコール
类名.方法名([参数列表]);
完全なコード例
class MyClass {
public void memberMethod(){
System.out.println("这是一个成员方法!");
//必须创建一个对象来调用!
}
public static void staticMethod(){
System.out.println("这是一个静态方法!");
//可以使用类名直接调用(推荐)
//也可以使用对象名调用(不推荐)
}
}
public class Test {
public static void main(String[] args) {
//使用对象调用成员方法和静态方法
MyClass my = new MyClass();
//使用对象调用成员方法
my.memberMethod();
//(不推荐)对象调用静态方法
my.staticMethod();
System.out.println("============");
//(推荐)使用类名调用静态方法
MyClass.staticMethod();
}
}
3.メモリ内で静的に実行するプロセス
1.メソッド領域でのクラスのロードに関する情報(staticによって変更された変数とメソッドは、メソッド領域の静的領域に配置されます)
2。main()メソッドがスタックメモリに入ります。3
。プログラムが順番に実行を開始します。
3つの静的コードブロック
のみ
第一次执行静态代码块所在的类时
、
静态代码块会执行唯一一次
、
場合静的クラスとコードブロックが配置された後、次に、
コードの静的ブロックが実行されません
静的コードブロックの使用
public class Test { static { System.out.println("静态代码块执行了!"); } public Test(){ System.out.println("构造方法执行了!"); } }
public class TestDemo{ public static void main(String[] args) { Test t1 = new Test(); Test t2 = new Test(); Test t3 = new Test(); } }
運転結果
典型的な使用法:
静的メンバー変数に一度に値を割り当てるために使用されます。