2016-04-21 8 views
1
public class first { 

    ArrayList<String> al= new ArrayList<String>(); 
    al.add("Batman");   //it doesn't work 
    public static void main(String[] args) { 

    } 
} 

Warum erlaubt es nicht, Add-Methode außerhalb von Main zu verwenden?Warum können wir Elemente außerhalb der main() -Methode nicht zu ArrayList hinzufügen?

+1

Mögliche Duplikat [System.out.printin Anweisung außerhalb jeder Methode in Java] (http: // Stackoverflow.com/questions/18795467/system-out-println-aussage-outside-any-method-in-java) – Savior

+1

Das kann nicht einfach getan werden, weil die Sprache es nicht erlaubt. Es würde funktionieren, wenn Sie die Zeile "al.add" mit geschweiften Klammern umgeben. Siehe: https://stackoverflow.com/questions/5865069/why-is-this-java-code-in-curly-brace-outside-of-a-method Wie für die Motivationen hinter erfordern geschweifte Klammern in dieser zweiten Zeile aber nicht die erste Zeile, ich weiß es nicht. – Roman

Antwort

1

Es ist ein einfaches Konzept von Java oder eine Architektur von Java können Sie nur Variablen und Methoden in der Klasse deklarieren. Alle funktionsbezogene Arbeiten sollten nur in Funktionen ausgeführt werden.

Sie diesen Link für Klassendefinition beziehen, http://www.tutorialspoint.com/java/java_object_classes.htm

1

A class hat die folgende Struktur: attributes (Ihr arraylist), gefolgt von functions (wie main()).

Um Manipulationen an einer attribute vorzunehmen, muss dies innerhalb einer function erfolgen. Dies geschieht auf diese Weise, weil es so entworfen wurde.

2

Ich weiß nicht, warum die Entwickler der Java-Sprache zu den Schlussfolgerungen kamen, die sie gemacht haben. Leider kann ich die beste Antwort geben: Es kann nicht gemacht werden, weil die Java-Sprache (Compiler) das nicht erlaubt es.

Was Sie können Do ist Surround-Methode Aufruf in geschweiften Klammern und dann wird es ein initializer block.

Dies ist eine ähnliche Frage: Why is this Java code in curly braces ({}) outside of a method?

1

Sie Klammern sind vermisst.

diesen Code Versuchen:

public class first { 

    ArrayList<String> al= new ArrayList<String>(); 
    { 
      al.add("Batman"); 
    }   

    public static void main(String[] args) { 

    } 
} 
1

„al“ ist eine Instanzvariable der Klasse „erste“ und ohne ein Objekt der Klasse „erste“ erklären Sie nichts innerhalb sogar Haupt-Funktion hinzufügen können.

Wenn Sie etwas außerhalb der Hauptfunktion hinzufügen müssen, ohne ein Objekt der Klasse zu erstellen, dann muss diese Instanz statisch sein, und dann können Sie eine Zeichenfolge hinzufügen, indem Sie sie in geschweifte Klammern setzen.

ArrayList<String> al = new ArrayList<>(); 

{ 
    al.add("names"); 
} 
1

Muster wie Factory-Methode oder fließend builder in Java sehr hilfreich sein kann, wenn kein Konstruktor existiert, weil sie Ihnen erlauben, zu erklären, instanziieren und initialisieren Ihre Objekte in einem Ausdruck.

Hier sind einige Beispiele für Ihren Fall:

List<String> l = java.util.Arrays.asList("Batman"); 

ArrayList<String> al = new ArrayList<String>(java.util.Arrays.asList("Batman")); 

ArrayList<String> al = com.google.common.collect.Lists.newArrayList("Batman"); 

Das letzte Beispiel verwendet die Guava Bibliothek. Es hat Factory-Methoden und/oder Builder für alle Arten von Java-Sammlungen.

1

Gemäß Java-Architektur können Sie keine logische Anweisung außerhalb der Methode schreiben.

+1

@Tom-Anweisung korrigiert –

0

können Sie Ihre Artikel in einem Konstruktor hinzu:

public class MyData { 
ArrayList<String> myTexts; 

public MyData() { 
    myTexts=new ArrayList<>(); 
    String name="reza"; 
    myTexts.add(name); 
    } 
} 
Verwandte Themen