[java]初期化子の処理が勝手に行われることについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: [java]初期化子の処理が勝手に行われることについて

Re: [java]初期化子の処理が勝手に行われることについて

#8

by かずま » 8年前

java大好き さんが書きました:良く分かりませんが、クラス変数にアクセスしたらクラスが初期化されるってことですか?
クラスp には、クラス変数はありませんよ。
あるのは、クラスメソッド x です。

クラスが初期化されるのは、クラスメソッドを呼び出したとき、
またはクラス変数にアクセスしたときです。

クラスメソッドを呼び出さず、クラス変数にアクセスしなくても、
クラスのインスタンスを初めて作った時には初期化されます。

Re: [java]初期化子の処理が勝手に行われることについて

#7

by java大好き » 8年前

ありがとうございます。

Re: [java]初期化子の処理が勝手に行われることについて

#6

by Math » 8年前

>クラス変数にアクセスしたらクラスが初期化されるってことですか
その通りです。
static とはそう言うものです。

Re: [java]初期化子の処理が勝手に行われることについて

#5

by java大好き » 8年前

良く分かりませんが、クラス変数にアクセスしたらクラスが初期化されるってことですか?

Re: [java]初期化子の処理が勝手に行われることについて

#4

by Math » 8年前


[クラス変数の場合はインスタンスを生成しなくても使用できるので、コンストラクタは必要ありません。クラスが初期化される直後にクラス変数を初期化したいのであれば、コンストラクタではなく「スタティックイニシャライザ(静的初期化子)」を使用します。イニシャライザを記述する箇所は、初期化の対象となるクラスフィールド宣言の後(下)であり、そのクラスのフィールドやメソッドを記述できる箇所なら記述できます。

static {
//ここにクラス変数を初期化する処理を記述します。
}

■ スタティックイニシャライザ(Static Initializer)は他にも「クラス初期化子」・「静的初期化子」「静的ブロック」・「staticブロック」とも呼ばれています。]

Re: [java]初期化子の処理が勝手に行われることについて

#3

by Math » 8年前

エラーになると思ったのですが?。(eclipse MARS)
画像

Re: [java]初期化子の処理が勝手に行われることについて

#2

by かずま » 8年前

java大好き さんが書きました:クラスを作ったわけではありません。
それなのに何故初期化子が実行されるのでしょうか?
pクラスの main メソッドを実行するということは、
pクラスを作ったということです。
pクラスが出来たので、pクラスのクラスメソッドを実行したり、
クラス変数にアクセスできます。

new で作るのは pクラスのインスタンスです。
インスタンスが出来ると、インスタンス変数にアクセスできます。

static { .... } は、静的初期化子(static initializer)で、
クラスを初期化します。
インスタンスの初期化は、コンストラクタで行います。

[java]初期化子の処理が勝手に行われることについて

#1

by java大好き » 8年前

コード:

class p
{

static
{
system.out.println("hello world");
}
static void x()
{
system.out.println("x()メソッド");
}

}
 


mainメソッドからp.x()として
静的メソッドx()を呼び出しただけなのに、何故かhello worldまで出力されます。
これは実行環境が壊れているのでしょうか?pクラスを作ったわけではありません。
それなのに何故初期化子が実行されるのでしょうか?

ページトップ