“Het openbare type <<classname>> moet in zijn eigen bestand worden gedefinieerd” fout in Eclipse

Ik heb de volgende code geschreven:

package staticshow;
public class StaticDemo {
  static int a = 3;
  static int b = 4;
  static {
    System.out.println("Voila! Static block put into action");
  }
  static void show() {
    System.out.println("a= " + a);
    System.out.println("b= " + b);
  }
}
public class StaticDemoShow {
  public static void main() {
    StaticDemo.show(); 
  }
}

Ik krijg de foutmelding:

The public type StaticDemo must be defined in its own file

fout in de allereerste regel public class StaticDemo {. Waarom gebeurt het en hoe kan ik het oplossen? Merk op dat mijn projectnaam StaticDemoShowis, de pakketnaam staticshowen klassenamen zijn zoals aangegeven in de code.

BEWERKEN– Nadat ik slechts één klasse openbaar of beide klassen als standaard heb gemaakt, krijg ik de foutmelding “Selectie bevat geen hoofdtype”. Wat moet ik nu doen?


Antwoord 1, autoriteit 100%

Als het bestand .javahet hoogste niveau (niet geneste) public-klasse bevat, moet het dezelfde naam hebben als die openbare klasse. Dus als je een klasse hebt zoals public class A{...}, moet deze in het A.java-bestand worden geplaatst. Daarom kunnen we geen twee openbare klassen in één .java-bestandhebben.

Als het hebben van twee openbare klassen zou zijn toegestaan, en laten we zeggen dat afgezien van openbare Aklassenbestand ook public class B{}zou bevatten, zou het van A.java-bestand moet ookworden genoemd als B.javamaar bestanden mogen geen twee (of meer) namen hebben (tenminste in alle systemen op welke Java kan worden uitgevoerd).

Dus ervan uitgaande dat uw code in het bestand StaticDemoShow.javais geplaatst, heeft u twee opties:

  1. Als je een andere klasse in hetzelfde bestand wilt hebben, maak ze dan niet-openbaar (gebrek aan zichtbaarheidsmodifier zal default/package-privatezichtbaarheid vertegenwoordigen)

    class StaticDemo { // It can no longer public
         static int a = 3;
         static int b = 4;
         static {
             System.out.println("Voila! Static block put into action");
         }
         static void show() {
             System.out.println("a= " + a);
             System.out.println("b= " + b);
         }
     }
     public class StaticDemoShow { // Only one top level public class in same .java file
         public static void main() {
             StaticDemo.show();
         }
     }
    
  2. Verplaats alle openbare klassen naar hun eigen .java-bestanden. Dus in jouw geval zou je het in twee bestanden moeten splitsen:

    • StaticDemo.java

       public class StaticDemo { // Note: same name as name of file
            static int a = 3;
            static int b = 4;
            static {
                System.out.println("Voila! Static block put into action");
            }
            static void show() {
                System.out.println("a= " + a);
                System.out.println("b= " + b);
            }
        }
      
    • StaticDemoShow.java

       public class StaticDemoShow { 
            public static void main() {
                StaticDemo.show();
            }
        }
      

Antwoord 2, Autoriteit 31%

Cant hebben twee openbare klassen in hetzelfde bestand

  public class StaticDemo{

Ga verder met

  class StaticDemo{

Antwoord 3, Autoriteit 16%

Java regel:. Een publicklasse in een bestand


Antwoord 4, Autoriteit 4%

Bewaar deze klasse in het bestand StaticDemo.java .
Ook kun je ook niet meer dan één openbare lessen in één bestand.


Antwoord 5, Autoriteit 2%

U kunt geen gebruik maken van 2 public class instances, moet u een te gebruiken. Probeer het gebruik van klasse (naam) in plaats van public class (naam)


Antwoord 6, Autoriteit 2%

fout in de eerste lijn public class StaticDemo {

Elke categorie Adie toegang modifier heeft als publicmoet een afzonderlijke bronbestand als A.javaof A.jav. Dit is gespecificeerd in JLS 7.6 sectie :

Als en slechts als pakketten worden opgeslagen in een bestandssysteem (§7.2), de gastheer
systeem kunnen ervoor kiezen om de beperking af te dwingen dat het een compilatie
fout als een type dat niet wordt gevonden in een bestand onder een naam uit de
typenaam plus een extensie (zoals .java of .jav) als een van de
volgende is waar:

  • Het type wordt door code in andere eenheden samenstellen van de verpakking waarin het type aangegeven verwezen.

  • Het type wordt openbaar (en daarom is potentieel toegankelijk vanuit de code in andere pakketten).

Mogelijk moet u echter publicTOEGANGSMODIER VAN DE KLASSE VERKLARING StaticDemoverwijderen. Dan als StaticDemoKlasse heeft geen modifier. Het wordt pakket-privé , dat wil zeggen, het is alleen zichtbaar in zijn eigen pakket.

Uitchecken Toegang tot leden van een klasse


Antwoord 7

U kunt slechts één openbare klasse in een bestand krijgen dat u de foutmelding krijgt wat u nu krijgt en de naam van het bestand moet de naam van de openbare klasse

zijn


Antwoord 8

Ik had twee significante fouten in mijn programma. Van de andere antwoorden, heb ik geleerd in een enkel Java-programma, men kan twee klassen niet als “publiek” verklaren. Dus heb ik de toegangspeciferie gewijzigd, maar kreeg een andere fout als toegevoegd aan mijn vraag als “bewerken” die “selectie geen hoofdtype bevat”. Eindelijk merkte ik dat ik het vergat om “string args []” deel in mijn hoofdmethode toe te voegen. Dat is de reden waarom de code niet werkte. Na rectificatie werkte het zoals verwacht.

Other episodes