オブジェクト指向----- 21Javaアクセス制御修飾子、staticキーワード、finalキーワード

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_44787898/article/details/102759441

1.アクセス制御修飾子

公共の行動のデータ民営化

  • 公共:公共、任意のクラス
  • プライベート:プライベート、このクラス
  • 保護:保護された、このクラス、サブクラス、袋に
  • デフォルト:袋と何も書かれた、このクラス、
  • アクセスは、クラスを変更:公共およびデフォルト
  • クラスのメンバーは変更にアクセスします。これら4である場合
    ここに画像を挿入説明

2.static

2.1静的変数

  • 静的で変更されました
  • 修飾された静的メンバ変数は、データ構造のオブジェクトではないと、それがクラスに属し、メソッド領域は、一つだけが、あります
  • 多くの場合、クラス名を介してアクセスします。
  • 使用するときは:使用している場合、すべてのデータオブジェクトが同じです
class Cat {
   private int age;
   private static int numOfCats;
   public Cat(int age){
      this.age = age;
      System.out.println(++numOfCats);
   }
}
Cat c1 = new Cat(2);
Cat c2 = new Cat(3);

ここに画像を挿入説明

2.2静的メソッド

  • これらのメソッドを呼び出すときの方法は、典型的には、暗黙的なオブジェクト参照(この)を通過する必要が特定のオブジェクトに対する操作を含むであろう
int d = p1.distance(p2);
//调用distance方法时,除了传递p2参数外,还隐式的传递了p1作为参数,在方法中的this关键字即表示该参数
  • 方法の静的変形は、特定のオブジェクトの操作のために必要とされない、その業績は、クラス名を直接参照して、入力パラメータにのみ関連している呼び出すとき
double c = Math.sqrt(3.0 * 3.0 + 4.0 * 4.0);
//该方法在调用时,没有隐式的传递对象引用,因此在static方法中不可以使用this关键字
  • これは、オブジェクトがないという意味ではありません、オブジェクトはインスタンス変数でなければなりません。アクセスするので、静的メソッドは、直接インスタンスメンバにアクセスすることはできません
  • 呼び出されたときに特別な静的オブジェクトが存在しないので、非静的メンバ静的メソッド内のアクセス(のメンバー)ではありません。アクションの方法は、静的な「ツール・メソッド」と「ファクトリメソッド」等を提供することです。

2.3静的ブロック

  • 静的で変更されました
  • クラスに属するクラスが自動的にローディング中に実行される静的なブロックはまた、一度だけ実行することができるように、クラスは、一度だけロードされます
  • ときに使用します。彼らは、多くの場合、静的リソース(画像、オーディオ、ビデオ)を初期化/ロードするために使用されています
class Foo{
   static{
     //类加载期间,只执行一次
     System.out.println("Load Foo.class");
   }
   public Foo{
     System.out.println("Foo()");
   }
}
Foo foo = new Foo();
//输出的结果为:
//Load Foo.class
//Foo()
//Foo类加载时,运行静态块,在创建对象之前

3.final

  • ------修正変数の変数を変更することはできません
  • ---------方法を変更する方法をオーバーライドすることはできません
  • 変更されたクラス------------クラスは継承できません
package oo.day04;
//final演示
public class FinalDemo {
	public static void main(String[] args) {
	}
}
class Zoo{}
final class Xoo extends Zoo{} //可以继承别的类
//class Yoo extends Xoo{}//错误,final修饰类不能被继承

class Loo{  //final修饰方法---不可被重写
	void show(){}
	final void say(){}
}
class Moo extends Loo{
	void show(){}
	//void say(){} //错误,final方法不能被重写
}

class Koo{  //final修饰变量---不能改变,用得比较少
	final int a = 5; //声明同时初始化
	final int b;   
	Koo(){
		b = 5;   //先声明,再在构造中初始化
	}
	void show(){
		final int c;  //应用率几乎为零
		//System.out.println(c);//错误,c没有值
		c = 5;
		System.out.println(c);
	}
  void say(){
  	//a = 88; //错误,final修饰的变量不能改变
  }
}

  • 変更された静的な最後のメンバ変数は定数を初期化するために同じ時間に宣言されなければならないと呼ばれています。変更できません
  • 静的最終定数は、コンパイル時に置き換えられます
class Foo{
   public static final int NUM = 100;
}
class Goo{
   public static void main(String[] args){
      System.out.println(Foo.NUM);
      //代码编译时,会替换为:System.out.println(100);
   }
}

サプリメント

メンバ変数

1.インスタンス変数:
1)オブジェクトが属する、ヒープの存在
2)インスタンス変数の数いくつかの目的がある
。3)オブジェクト名を介してアクセスされなければならない
。2.静的変数
1)クラスに属し、ゾーン内の方法がある
2)唯一の
3)多くの場合、クラス名を介してアクセスします。

class Aoo{
    int a;//实例变量
    static int b;//静态变量
}

おすすめ

転載: blog.csdn.net/qq_44787898/article/details/102759441