web-dev-qa-db-ja.com

Javaクラスの属性を定義または初期化する

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();
        ....
19
ChrisMcJava

まず、プリミティブは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;
   }
}
17
Java Devil

ShankuとMorpheusは質問に正しく答えました。最初に、プリミティブint変数「integer」をnullに設定すると、コンパイルエラーが発生します。オブジェクトに対してのみ行うことができます。次に、Javaはデフォルト値をインスタンス変数に割り当てます。これは「整数」と「ランダム」です)サンプルコードでは、インスタンス変数は、スコープ(パブリック、プライベート、保護、パッケージ)に応じて、クラス内またはそれ以上で表示できます。

ただし、デフォルト値はnotであり、ローカル変数に割り当てられています。たとえば、コンストラクタで「int height;」などの変数を割り当てた場合その後、ゼロに初期化されません。

Java変数のドキュメント を読むことをお勧めします。これは変数を非常によく説明しており、さらに Javaチュートリアル を参照することもできます。

2
Minh Nguyen

Javaでは、初期化は言語仕様で明示的に定義されています。フィールドおよび配列コンポーネントの場合、アイテムが作成されると、システムによって自動的に次のデフォルト値に設定されます。

数値:0または0.0

ブール値:false

オブジェクト参照:null

これは、フィールドを0、false、またはnull(場合によって)に明示的に設定する必要がなく、冗長であることを意味します。