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 StaticDemoShow
is, de pakketnaam staticshow
en 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 .java
het 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 A
klassenbestand ook public class B{}
zou bevatten, zou het van A.java
-bestand moet ookworden genoemd als B.java
maar 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.java
is geplaatst, heeft u twee opties:
-
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(); } }
-
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 public
klasse 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 A
die toegang modifier heeft als public
moet een afzonderlijke bronbestand als A.java
of 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 public
TOEGANGSMODIER VAN DE KLASSE VERKLARING StaticDemo
verwijderen. Dan als StaticDemo
Klasse 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.