/ *
- クラスコードブロックのメンバー
- コードブロックは、初期化ブロックと呼ばれる、またはアクションは、Javaクラスオブジェクトの初期化されています
- クラスコードブロック修飾子、静的のみ変更することができる場合、それは変更静的、コードの非静的ブロックを使用しない場合、(ブロック静的)静的コードブロックと呼ばれます。
- 静的コードブロック
-
- 出力文が存在する場合があります。
-
- これは、属性クラス、クラス宣言の初期かもしれません。
-
- あなたは、非静的プロパティを初期化することはできません。すなわち:非静的プロパティとメソッドを呼び出すことではありません。
-
- 静的コードブロックの複数の場合は、順次上から下へ順に行わ。
-
- 最初の非スタティックをブロックするために、静的なコードブロックを実行します。
-
- コードの静的ブロックは、クラスをロードして実行され、一度だけ実行されます。
- 非静的ブロック
-
- 出力文が存在する場合があります。
-
- これは、属性クラス、クラス宣言の初期かもしれません。
-
- 加えて、非静的外形は、静的変数またはメソッドと呼ぶことができます。
-
- 非静的コードブロックの複数の場合は、順次上から下へ順に行わ。
-
- すべてのオブジェクトは、彼らが一度実行することが作成されます。そして、コンストラクタの前に実行。
- 親子クラスここで親クラスをロードするために、オブジェクトのサブクラスを作成するには、まず静的非親クラス・コード・ブロックを実行し、親クラスのコードの静的ブロックが実行され、その後、親クラスのコンストラクタを行います。最後に、非静的ブロックサブクラスの実装は、その後、サブクラスのコンストラクタを実行します。
- オーダーのプロパティの割り当て:
- 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;
}