defineingクラス属性とinitializingそれらの間に違いはありますか?どちらか一方をやりたい場合はありますか?
例:
次のコードスニペットは、私が意味する違いを指摘する必要があります。そこでプリミティブとオブジェクトを使用しています。
import Java.util.Random;
public class Something extends Activity {
int integer;
Random random = null;
Something(){
integer = 0;
random = new Random();
....
vs.
import Java.util.Random;
public class Something extends Activity {
int integer = null;
Random random;
Something(){
integer = 0;
random = new Random();
....
まず、プリミティブはnull
がオブジェクト参照である単なるデータであるため、プリミティブをnullに設定することはできません。 int i = null
をコンパイルしようとすると、互換性のない型エラーが発生します。
次に、Javaの場合と同様に、クラスで変数を宣言するときに変数をnull
または0
に初期化することは冗長です。プリミティブはデフォルトで0
(またはfalse
)になり、オブジェクト参照はデフォルトになりますnull
に。ただし、ローカル変数の場合はそうではありません。以下を試してみると、コンパイル時に初期化エラーが発生します。
public static void main(String[] args)
{
int i;
System.out.print(i);
}
0
またはfalse
またはnull
のデフォルト値に明示的に初期化することは無意味ですが、それらを別のデフォルト値に設定したい場合は、デフォルトを持つコンストラクタを作成できます例の値
public MyClass
{
int theDate = 9;
String day = "Tuesday";
// This would return the default values of the class
public MyClass()
{
}
// Where as this would return the new String
public MyClass (String aDiffDay)
{
day = aDiffDay;
}
}
ShankuとMorpheusは質問に正しく答えました。最初に、プリミティブint変数「integer」をnullに設定すると、コンパイルエラーが発生します。オブジェクトに対してのみ行うことができます。次に、Javaはデフォルト値をインスタンス変数に割り当てます。これは「整数」と「ランダム」です)サンプルコードでは、インスタンス変数は、スコープ(パブリック、プライベート、保護、パッケージ)に応じて、クラス内またはそれ以上で表示できます。
ただし、デフォルト値はnotであり、ローカル変数に割り当てられています。たとえば、コンストラクタで「int height;」などの変数を割り当てた場合その後、ゼロに初期化されません。
Java変数のドキュメント を読むことをお勧めします。これは変数を非常によく説明しており、さらに Javaチュートリアル を参照することもできます。
Javaでは、初期化は言語仕様で明示的に定義されています。フィールドおよび配列コンポーネントの場合、アイテムが作成されると、システムによって自動的に次のデフォルト値に設定されます。
数値:0または0.0
ブール値:false
オブジェクト参照:null
これは、フィールドを0、false、またはnull(場合によって)に明示的に設定する必要がなく、冗長であることを意味します。