使用したJavaオブジェクト指向のコードブロック18

/ *

  • クラスコードブロックのメンバー
  • コードブロックは、初期化ブロックと呼ばれる、またはアクションは、Javaクラスオブジェクトの初期化されています
  • クラスコードブロック修飾子、静的のみ変更することができる場合、それは変更静的、コードの非静的ブロックを使用しない場合、(ブロック静的)静的コードブロックと呼ばれます。
  • 静的コードブロック
    1. 出力文が存在する場合があります。
    1. これは、属性クラス、クラス宣言の初期かもしれません。
    1. あなたは、非静的プロパティを初期化することはできません。すなわち:非静的プロパティとメソッドを呼び出すことではありません。
    1. 静的コードブロックの複数の場合は、順次上から下へ順に行わ。
    1. 最初の非スタティックをブロックするために、静的なコードブロックを実行します。
    1. コードの静的ブロックは、クラスをロードして実行され、一度だけ実行されます。
  • 非静的ブロック
    1. 出力文が存在する場合があります。
    1. これは、属性クラス、クラス宣言の初期かもしれません。
    1. 加えて、非静的外形は、静的変数またはメソッドと呼ぶことができます。
    1. 非静的コードブロックの複数の場合は、順次上から下へ順に行わ。
    1. すべてのオブジェクトは、彼らが一度実行することが作成されます。そして、コンストラクタの前に実行。
  • 親子クラスここで親クラスをロードするために、オブジェクトのサブクラスを作成するには、まず静的非親クラス・コード・ブロックを実行し、親クラスのコードの静的ブロックが実行され、その後、親クラスのコンストラクタを行います。最後に、非静的ブロックサブクラスの実装は、その後、サブクラスのコンストラクタを実行します。
  • オーダーのプロパティの割り当て:
  • 1、デフォルトの初期化
  • 図2に示すように、ディスプレイの初期化、3は、シーケンスのコードブロックの割り当てが(非静的プロパティは2位、3を持っている参照
  • 属性コードブロックを実行コードの割り当ての最初のブロックを書き込む前に、初期化後に実行割り当てを表示します。
  • 静的プロパティ最終的に出力割当てコードブロック)のために
  • 4、コンストラクタ割り当て
  • 5、オブジェクト、プロパティの後、または割り当てるためにオブジェクトメソッドを呼び出すこと

* /

package object_chapter2;

public class Object_Block {
	static {
		System.out.println("*******");//执行main方法前先加载类,会执行类的静态代码块
	}
	public static void main(String[] args) {
		int i = Block.argus;//调用Block类的静态属性,Block类加载,执行一次static代码块中的语句
		System.out.println(i);
		Block b1 = new Block();//创建Block类的对象,非静态代码块执行一次,静态代码块执行过一次,不再执行
		System.out.println(b1.toString());
		Block b2 = new Block();//再次创建Block类的对象,非静态代码块再次执行一次,静态代码块执行过一次,不再执行
		System.out.println(b2.toString());
		i = Block.argus;
		System.out.println(i);
		System.out.println("*******");
	    BlockSonKid s1 = new BlockSonKid();
	    //先输出父类和子类的静态代码块,在输出父类的父类的代码块和构造器,
	    //再输出父类的代码块和构造器,再输出子类的代码块和构造器
	    System.out.println("*******");
	    BlockSonKid s2 = new BlockSonKid();
	    System.out.println(s2.number);//输出代码块赋值
	    System.out.println(s2.argus);//输出显示初始化赋值
	    System.out.println("*******");
	    BlockSonKid s3 = new BlockSonKid(77,16.16);
	    System.out.println(s3.number);//输出构造器赋值
	    System.out.println(s3.argus);//输出构造器赋值
	}

}

class Block{
	//属性
	String name = "KK";
	int number = -1;
	static int argus;	
	//构造器
	public Block() {
		argus++;
	}

	public Block(String name, int number) {
		this();
		this.name = name;
		this.number = number;
	}
    //方法
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

	public static int getArgus() {
		return argus;
	}

	public static void setArgus(int argus) {
		Block.argus = argus;
	}

	//特别方法
	@Override
	public String toString() {
		return "Block [name=" + name + ", number=" + number + ", argus=" + argus + "]";
	}
	void say() {
		System.out.println("白衣天使");
	}
	static void speak() {
		System.out.println("奥利给");
	}
	
	//代码块
	static {
		System.out.println("全民战疫");
		argus = 1000;
	}
	static {
		System.out.println("自我隔离");
		speak();
		argus = 1001;
	}
	
	{
		System.out.println("武汉加油");
		name = "AA";
		number = 1;
	}
	
	{
		System.out.println("中国加油");
		number = 2;
		argus = 0;
		say();
		speak();		
	}
	
}

class BlockSon extends Block{
	static {
		System.out.println("一方有难");
	}
	{
		System.out.println("战疫必胜");
	}
	BlockSon(){
		System.out.println("子类构造器");
	}
}

class BlockSonKid extends BlockSon{
		
	BlockSonKid(int num,double argus) {
		this();
		this.number = num;
		this.argus = argus;
	}
	static {
		System.out.println("八方支援");
		number = 11;
	}
	{
		System.out.println("保卫家园");
		number = 15;
		argus = 11.11;
	}
	BlockSonKid(){
		System.out.println("孙类构造器");
	}	
	static int number = 12;
	double argus = 12.12;
}
公開された47元の記事 ウォンの賞賛1 ビュー1052

おすすめ

転載: blog.csdn.net/wisdomcodeinside/article/details/104331030