2013-07-09 13 views
15

Java noob hier. Gibt es beim Definieren einer neuen Klasse beim Definieren von Klassenattributen einen Unterschied beim Definieren einer Variablen und beim Initialisieren einer Variablen. Gibt es Fälle, in denen Sie eine über die andere machen möchten? Ich habe ein primitives und ein Objekt mit Absicht verwendet, für den Fall, dass es einen Unterschied gibt.Java definiert oder initialisiert Attribute einer Klasse

d.h.

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(); 
     .... 
+0

Ich würde die Variablen auf Klassenebene auflisten und sie mit einem Konstruktor initialisieren. – Venki

+0

auch Sie versuchen, eine Null an ein primitiv übergeben, die einige Kopfschmerzen verursachen könnte. – Venki

Antwort

12

Erstens können Sie ein Grundelement nicht auf Null setzen, da ein Grundelement nur Daten ist, bei denen null eine Objektreferenz ist. Wenn Sie versuchen, int i = null zu kompilieren, würden Sie einen inkompatiblen Typenfehler erhalten.

Zweitens die Variablen null oder 0 initialisiert, wenn sie in der Klasse deklarieren ist überflüssig, da in Java, Primitiven Standard 0 (oder false) und Verweise Standard null Objekt. Dies ist nicht der Fall für die lokalen Variablen jedoch, wenn Sie die unten Sie versucht würde

public static void main(String[] args) 
{ 
    int i; 
    System.out.print(i); 
} 

Explizit sie auf einen Standardwert von 0 oder false oder null eine Initialisierung Fehler bei der Kompilierung bekommen Initialisierung ist sinnlos, aber möchten Sie vielleicht sie auf einen anderen Standardwert setzen, dann können Sie einen Konstruktor erstellen, die die Standardwerte zum Beispiel

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; 
    } 
} 
1

In Java ist die Initialisierung explizit in der Sprachspezifikation definiert. Für Felder und Arraykomponenten, wenn Elemente erstellt werden, werden sie auf die folgenden Standardwerte vom System automatisch eingestellt:

Nummern: 0 oder 0,0

booleans: false

Objektreferenzen: null

Dies bedeutet, dass das explizite Festlegen von Feldern auf 0, false oder null (je nachdem) unnötig und redundant ist.

2

Shanku und Morpheus die Frage richtig beantwortet hat. Zuerst erhalten Sie einen Kompilierfehler, der Ihre primitive int-Variable "integer" auf null setzt; Das können Sie nur für Objekte tun. Zweitens hat Shanku recht, dass Java den Instanzvariablen Standardwerte zuweist, die in Ihrem Beispielcode "integer" und "random" sind; Instanzvariablen sind innerhalb der Klasse oder darüber hinaus abhängig vom Umfang sichtbar (öffentlich, privat, geschützt, Paket).

Die Standardwerte sind jedoch nicht zugewiesen für lokale Variablen. Zum Beispiel, wenn Sie eine Variable in Ihrem Konstruktor wie "int height;" dann wird es nicht auf Null initialisiert.

Ich würde empfehlen, die Java variable documentation zu lesen, die die Variablen sehr gut beschreiben und außerdem konnten Sie auch über die Java tutorials schauen, die wieder gutes Lesematerial sind.

Verwandte Themen