Insgeheim studieren Vergiss und google für dich
Name der endgültigen Datentypkonstante=Wert
null Es gibt kein Referenzziel Eine leere Zeichenfolge ("") ist nicht null, da sich am Referenzziel eine leere Zeichenfolge befindet. → Primitive Typen haben keinen Nullstatus
Bei null löst die Verwendung der equals-Methode eine Ausnahme aus. (NullPointerException) Verwenden Sie den Operator "==".
Verwenden Sie die Methode "isEmpty"
Kann durch Erweitern einer vorhandenen Klasse erstellt werden Unterklassen erben die Felder und Methoden von Oberklassen. Verwenden Sie das Schlüsselwort super, um auf Methoden der Oberklasse zuzugreifen Verwenden Sie das Schlüsselwort this, um auf Methoden der Unterklasse zuzugreifen. Es gibt eine Oberklasse und mehrere Unterklassen.
super.hoge();
Implementieren Sie den Namen der übereinstimmenden übergeordneten Methode, den Rückgabewert und die Argumente in der untergeordneten Klasse Es scheint gut zu sein, "@Override" explizit hinzuzufügen.
//
@Override
void hoge(){
}
abstract class TestClass {
void test() {
System.out.println("TEST");
}
}
public class SampleProgram {
public static void main(String[] args) {
//
TestClass tc = new TestClass();
}
}
Überschriebene Methoden haben Vorrang vor Unterklassen. Es kann keine abstrakte Klasseninstanz erstellt werden. Klassenkompilierungsfehler: Es kann keine Instanz vom Typ TestClass Abstract-Methode erstellt werden. Eine Methode, die keine Anweisungen in der Methode enthält --Abstraktionsmethoden werden in abstrakten Klassen definiert
abstract class TestClass {
//Gewöhnliche Methode
void test() {
System.out.println("TEST");
}
//Abstrakte Methode
abstract void test2();
}
abstract class TestClass {
//Kompilierungsfehler: Die abstrakte Methode gibt keinen Body an
abstract void test() {
System.out.println("TEST");
}
}
Selbst wenn Sie eine abstrakte Klasse erben und eine Unterklasse als abstrakte Klasse definieren, müssen Sie sie nicht überschreiben. ..
abstract class TestClass {
//Gewöhnliche Methode
void test() {
System.out.println("TEST");
}
//Abstrakte Methode
abstract void test2();
}
//Kein Kompilierungsfehler
abstract class subClass extends TestClass {
}
//Kompilierungsfehler: Der Typ subClass ist eine geerbte abstrakte Methode TestClass.test2()Muss implementiert werden
class subClass extends TestClass {
}
interface testIf{
int test();
void test2(String msg);
}
interface testIf{
void test2(String msg);
}
//Kompilierungsfehler: Der Typentest ist eine geerbte abstrakte Methode testIf.test2(String)Muss implementiert werden
class test implements testIf{
}
//Kompilierungsfehler: Die Sichtbarkeit von von testIf geerbten Methoden kann nicht verringert werden
class test implements testIf{
void test2(String msg) {
System.out.println(msg);
}
}
//Kein Kompilierungsfehler
class test implements testIf{
public void test2(String msg) {
System.out.println(msg);
}
}
interface testIf1{
void test1(String msg);
}
interface testIf2{
int test2();
}
class test implements testIf1, testIf2{
public void test1(String msg) {
System.out.println(msg);
}
public int test2() {
return 1;
}
}
interface testIf1{
int HOGE = 1;
public static final String HOGE2 = "Konstante";
}
class test implements testIf1{
int i = testIf1.HOGE;
//Kompilierungsfehler: letztes Feld testIf1.Kann HOGE nicht zugewiesen werden
//testIf1.HOGE = 1;
void testPrint() {
System.out.println(testIf1.HOGE2);
}
}
public class SampleProgram {
public static void main(String[] args) {
test t = new test();
t.testPrint();
}
}
interface testIf1{
int HOGE = 1;
public static final String HOGE2 = "Konstante";
void test();
void test2();
}
//Schnittstellenvererbung
interface testIf2 extends testIf1{
void test();
}
//Kompilierungsfehler: Typ Test ist eine geerbte abstrakte Methode testIf1.test2()Muss implementiert werden
class test implements testIf2{
@Override
public void test() {
//TODO automatisch generierter Methodenstub
}
}
//Kein Kompilierungsfehler
class test implements testIf2{
@Override
public void test() {
//TODO automatisch generierter Methodenstub
}
@Override
public void test2() {
//TODO automatisch generierter Methodenstub
}
}
Selbst wenn die übergeordnete Schnittstelle und die untergeordnete Schnittstelle dieselbe Methodendefinition haben, wird dies nicht als Fehler behandelt. .. Es wird eine Quelle der Verwirrung sein.
Im Japanischen bedeutet es Polymorphismus (führt verschiedene Bewegungen aus).
import java.util.ArrayList;
import java.util.List;
interface TestIf{
public abstract void run();
}
class TestAAA implements TestIf{
String myClassName = "TestAAA";
@Override
public void run() {
//TODO automatisch generierter Methodenstub
System.out.println(myClassName);
}
}
class TestBBB implements TestIf{
String myClassName = "TestBBB";
@Override
public void run() {
//TODO automatisch generierter Methodenstub
System.out.println(myClassName);
}
}
public class SampleProgram {
public static void main(String[] args) {
//Schnittstellentypsammlungen und Arrays sind verfügbar
List<TestIf> list = new ArrayList<TestIf>();
TestIf[] array = new TestIf[2];
//Legen Sie jede Instanz in der Sammlung fest
list.add(new TestAAA());
list.add(new TestBBB());
//Legen Sie jede Instanz im Array fest
array[0] = new TestAAA();
array[1] = new TestBBB();
System.out.println("Sammlung");
for(TestIf ti: list) {
ti.run();
}
System.out.println("Array");
for(int i = 0; i < array.length; i++) {
array[i].run();
}
}
}
Array2 wird zu einer Referenz auf Array1. Das Umschreiben der Elemente von Array2 wirkt sich auch auf Array1 aus. Das Gegenteil ist auch der Fall.
int[] array1 = {1,2,3};
int[] array2 = array1;
Sie können den Wert mit der Klonmethode kopieren. Gleiches gilt für die Sammlung.
int[] array2 = array1.clone();
Manchmal reicht die Klonmethode nicht aus. Wenn das Element ein Objekttyp anstelle eines primitiven Typs ist Da der Objekttyp kein Wert, sondern ein Referenzziel als Element ist, wird der Wert am Referenzziel nicht kopiert. Dies wird als flache Kopie bezeichnet. Dies bedeutet, dass mehrere Objekte denselben Wert haben. Deep Copy zum Kopieren auf den angegebenen Wert. Wie viel kopiert werden muss, hängt vom Programm ab.
scheint schwer. ..
Geben Sie an, dass der Typ erzwungen werden soll, indem Sie den Typ in "<" und ">" einfügen und notieren.
Es kann nur der Typ String eingegeben werden.
List<String> list = new ArrayList<String>();
In Eclipse wird eine Warnmeldung angezeigt, die jedoch verwendet werden kann. Da der Datentyp nicht angegeben ist, kann alles andere als der primitive Typ eingegeben werden.
List list = new ArrayList();
List list = new ArrayList();
List<String> list2 = new ArrayList<String>();
//Die Besetzung ist kompliziert
System.out.println(((String) list.get(0)).length());
//Kann wie ein normaler String-Typ verwendet werden
System.out.println(list2.get(0).length());
Sicherlich kann es einfacher sein, Generika zu verwenden. Eclipse ist jedoch ausgezeichnet.
Sequenzname.length
public class SampleProgram {
public static void main(String[] args) {
int[] box = {0,1,2,3,4,5,6,7,8,9};
for(int i = 0; i < 10; i++) {
if(i == 5) {
System.out.println(i+1+":"+box[i]+"_continue");
continue;
}else if(i == 7) {
System.out.println(i+1+":"+box[i]+"_break");
break;
}
System.out.println(i+1+":"+box[i]);
}
}
}
//Ergebnis
1:0
2:1
3:2
4:3
5:4
6:5_continue
7:6
8:7_break
public class SampleProgram {
public static void main(String[] args) {
int[] box = {0,1,2,3,4,5,6,7,8,9};
int i = 0;
while(i < 10) {
System.out.println(i+1+":"+box[i]);
i++;
}
}
}
public class SampleProgram {
public static void main(String[] args) {
int[] box = {0,1,2,3,4,5,6,7,8,9};
int i = 0;
do {
System.out.println(i+1+":"+box[i]);
i++;
}while(i < 10);
}
}
Ich habe es schon lange nicht mehr gesehen ... Mit zunehmender Anzahl von Indizes geht der Bestand an Namen zur Neige. ..
import java.util.HashSet;
import java.util.Set;
public class SampleProgram {
public static void main(String[] args) {
//Lassen Sie keine doppelten Werte zu
//Es gibt keine Bestellgarantie
Set<String> hs = new HashSet<String>();
hs.add("Weiß");
hs.add("rot");
hs.add("Weiß");
hs.add("Grün");
int[] array = {1,2,3,1};
//HashSet hat keine get-Methode
// for(int i = 0; i < hs.size(); i++) {
// System.out.println(hs.(i));
// }
//Für Aussage erweitert
for(String item : hs) {
System.out.println(item);
}
for(int i : array) {
System.out.println(i);
}
}
}
//Ergebnis
Grün
rot
Weiß
1
2
3
1
Schwer ...
public class TestMain {
public static void main(String[] args) {
List<String> cities = new ArrayList<String>();
cities.add("Kyoto");
cities.add("Osaka");
cities.add("Aichi");
System.out.println("Schleife 1");
for(int i = 0; i < cities.size(); i++) {
System.out.println(cities.get(i));
}
System.out.println("Schleife 2");
for(Iterator<String> ite = cities.iterator(); ite.hasNext();) {
System.out.println(ite.next());
}
System.out.println("Schleife 3: Erweiterung für Schleife");
for(String city : cities) {
System.out.println(city);
}
System.out.println("Schleife 4:");
cities.forEach(new Consumer<String>() {
public void accept(final String citiy) {
System.out.println(citiy);
}
});
System.out.println("Schleife 5: Lambda-Typ");
cities.forEach((final String city) -> System.out.println(city));
System.out.println("Schleife 6: Lambda-Typ");
cities.forEach(System.out::println);
}
}
map
import java.util.HashMap;
import java.util.Map;
public class SampleProgram {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>(){
{
put("001","rot");
put("002","Blau");
put("003","Grün");
}
};
//Wert
for(String item : map.values()) {
System.out.println(item);
}
//Schlüssel
for(String item : map.keySet()) {
System.out.println(item);
}
}
}
Schreiben Sie den Quellcode beiläufig mit Sakura Editor oder Notepad
javac hoge.java
Und beiläufig kompilieren Ich wusste nicht, dass ich nur einen Knopf auf Eclipse drückte. Nach dem manuellen Kompilieren des unter Eclipse unter DOS erstellten Quellcodes
//Quellcode
public class SampleProgram {
public static void main(String[] args) {
System.out.println("Hoge");
}
}
//Ergebnis
C:\MyWork\>javac SampleProgram.java
SampleProgram.java:6:Error:Dieses Zeichen kann nicht der Codierung von MS932 zugeordnet werden
System.out.println("縺 縺?");
^
1 Fehler
C:\MyWork\>
Dies liegt daran, dass die Quelldatei "UTF-8" und die Windows-Standardcodierung "MS932" ist. Wenn Sie die Codierung beim Kompilieren mit Javac nicht angeben, wird sie mit der Standardcodierung von JVM (?) Kompiliert. Wenn die Umgebung Windows ist und die Dateicodierung "UTF-8" ist
javac -encoding utf8 SampleProgram.java
Dann können Sie es sicher kompilieren.
import java.util.Properties;
import java.util.Enumeration;
class sampleEncoding{
public static void main(String args[]){
System.out.println(System.getProperty("file.encoding"));
}
}
Die Standardcodierung ist ein Java-Programm und scheint sich auf die Ein- und Ausgabe auszuwirken. Wenn Sie beim Lesen der Datei die Codierung der Datei nicht angeben Es scheint, dass die Standardcodierung verwendet wird In einer Umgebung, in der die Standardcodierung "utf8" ist Wenn die zu lesende Datei "euc" ist, müssen Sie die Codierung angeben Verursacht verstümmelte Zeichen.
Wenn Sie die Standardcodierung im Voraus ändern, können Sie den Quellcode und die Eingabedatei ändern. Selbst wenn Sie es nicht tun, werden die Zeichen nicht verstümmelt und Sie können es kompilieren.
Für REM-Fenster
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
C:\MyWork>javac SampleProgram.java
SampleProgram.java:6:Error:Dieses Zeichen kann nicht der Codierung von MS932 zugeordnet werden
System.out.println("縺 縺?");
^
1 Fehler
C:\MyWork>set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
C:\MyWork>javac SampleProgram.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
C:\MyWork>
Es scheint ein Fehler zu sein, wenn es intern in binär konvertiert und berechnet wird
Es scheint die BigDecimal-Klasse zu verwenden. Es scheint zu berechnen, ohne in binär zu konvertieren.
import java.math.BigDecimal;
public class SampleProgram {
public static void main(String[] args) {
double xx = 1.0;
double yy = 0.9;
System.out.println(xx - yy);
System.out.println(xx / yy);
BigDecimal x = new BigDecimal("1.0");
BigDecimal y = new BigDecimal("0.9");
System.out.println(x.subtract(y));
System.out.println(x.divide(y, 2, BigDecimal.ROUND_UP));
System.out.println(x.divide(y, 2, BigDecimal.ROUND_DOWN));
System.out.println(x.divide(y, 2, BigDecimal.ROUND_HALF_UP));
System.out.println(x.divide(y, 3, BigDecimal.ROUND_HALF_DOWN));
System.out.println(x.divide(y, 2, BigDecimal.ROUND_HALF_UP));
System.out.println(x.divide(y, 3, BigDecimal.ROUND_HALF_DOWN));
}
}
//Ergebnis
0.09999999999999998
1.1111111111111112
0.1
1.12
1.11
1.11
1.111
1.11
1.111
Was ist der Unterschied zwischen BigDecimal.ROUND_HALF_UP und BigDecimal.ROUND_HALF_DOWN? Als Ergebnis des Erhalts von Kommentaren und der erneuten Prüfung BigDecimal.ROUND_HALF_UP ist gerundet BigDecimal.ROUND_HALF_DOWN wird abgerundet war. Es ist ganz anders. .. ..
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class SampleProgram {
public static void main(String[] args) {
DecimalFormat format = new DecimalFormat("#.#");
BigDecimal x = new BigDecimal("10.55");
BigDecimal xx = x.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println("Auf die zweite Fraktion gerundet: " + format.format(xx));
BigDecimal xxx = x.setScale(1, BigDecimal.ROUND_HALF_DOWN);
System.out.println("Auf die zweite Dezimalstelle gerundet: " + format.format(xxx));
}
}
//Ergebnis
Auf die zweite Fraktion gerundet: 10.6
Auf die zweite Dezimalstelle gerundet: 10.5
Übrigens, wenn Sie nur die Zahl angeben, die durch Teilen geteilt werden soll, treten die folgenden Ausnahmen auf ... Es scheint, dass die Ursache darin besteht, dass das Berechnungsergebnis ein kreisförmiger Bruch ist
System.out.println(x.divide(y));
//Ausnahme
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1690)
at SampleProgram.main(SampleProgram.java:15)
Es kann durch "_" getrennt werden. Das Anzeigeergebnis hat keinen Einfluss auf die Berechnung. Hmm. .. .. Ist es bequem, Konstanten zu definieren?
int x = 1_000;
int x = 12;
int y = 5;
double ans = (double)x / (double)y;
Verwenden Sie die String.valueOf-Methode Wie benutzt man Klassenname. Methodenname
int x = 1234;
String ss = String.valueOf(x);
Jetzt, da es sich um einen Zeichenfolgentyp handelt, können Sie die Längenmethode verwenden.
public class SampleProgram {
public static void main(String[] args) {
int x;
x = 123 * 234;
System.out.println(String.valueOf(x).length());
}
}
Die Methode zum Aufrufen der Klasse
Im Gegenteil, die Methode zum Aufrufen des Objekts (für die Variable) Es wird die Instanzmethode genannt.
Gibt es "statisch" zu unterscheiden?
Konvertieren Sie einen primitiven Typ mithilfe einer Wrapper-Klasse in ein Objekt.
Primitiver Typ | Wrapper-Klasse |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) throws IOException {
String x = "123";
String xx = "12.45";
int y;
double yy;
//Der primitive Typ kann dem String-Typ nicht zugewiesen werden
//y = x;
y = Integer.valueOf(x);
System.out.println(y);
yy = Double.valueOf(xx);
System.out.println(yy);
}
}
//Ergebnis
123
12.45
Wenn ich anfange, in verschiedenen Sprachen zu arbeiten, weiß ich nicht, wie ich "else if" schreiben soll. ..
if(Bedingung 1) {
}else if(Bedingung 2) {
}else {
}
Operator | Bedeutung |
---|---|
== | gleich |
!= | anders |
> | - |
>= | - |
< | - |
<= | - |
"==" Beurteilt, ob die Objekte gleich sind, Verwenden Sie "gleich", um festzustellen, ob die Werte gleich sind. "Gleich" wird für andere Typen als primitive Typen bereitgestellt.
(Unterschied zwischen Referenztyp und Basistyp. Der Basistyp speichert den Wert, aber der Referenztyp speichert die Adresse des Objekts ... ??)
schwer. ..
public class SampleProgram {
public static void main(String[] args) {
String[] tell = {"090-1234-1234","1234-1234-1234","090-O123-1234"};
/*
*3-stellige Nummer-4-stellige Nummer-4-stellige Nummer
*/
for(int i = 0; i < tell.length; i++) {
System.out.println(tell[i]);
if(tell[i].matches("\\d{3}-\\d{4}-\\d{4}")) {
System.out.println("Richtige Antwort");
}else {
System.out.println("Falsche Antwort");
}
}
}
}
//Ergebnis
090-1234-1234
Richtige Antwort
1234-1234-1234
Falsche Antwort
090-O123-1234
Falsche Antwort
Ich frage mich, ob es endlich nicht viel gibt. ..
try{
}catch(Ausnahmeklasse Variablenname){
}finally{
}
Wenn eine Ausnahme innerhalb einer Methode auftritt, kann sie aus der Methode entfernt werden, ohne sie innerhalb der Methode abzufangen. Sie müssen die Ausnahme draußen abfangen.
Rückgabewert Methodenname(Streit)löst einen Ausnahmetyp aus{
}
Gibt es eine Try-with-Resources-Syntax? .. .. Es scheint eine Funktion von Java 7 zu sein. ~~ Lass es jetzt. .. ~~ In den Kommentaren wurde mir beigebracht, wie man es benutzt! Es kann bequem sein.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) {
String fileName1 = "C:\\test3.txt";
String fileName2 = "C:\\test4.txt";
//String fileName1 = null;
try (
FileReader fr = new FileReader(new File(fileName1));
BufferedReader bfr = new BufferedReader(fr);
FileReader fr2 = new FileReader(new File(fileName2));
BufferedReader bfr2 = new BufferedReader(fr2);
)
{
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Geladen");
//throw new IOException();
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
//Grundform
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) {
try {
File file = new File("C:\\test3.txt");
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Geladen");
}
bfr.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
//Ergebnis
java.io.FileNotFoundException: C:\test3.txt (Die angegebene Datei wurde nicht gefunden.)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileReader.<init>(FileReader.java:72)
at SampleProgram.main(SampleProgram.java:12)
//Wirf eine Ausnahme aus
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) throws IOException {
File file = new File("C:\\test3.txt");
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Geladen");
}
bfr.close();
}
}
//Ergebnis
Exception in thread "main" java.io.FileNotFoundException: C:\test3.txt (Die angegebene Datei wurde nicht gefunden.)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileReader.<init>(FileReader.java:72)
at SampleProgram.main(SampleProgram.java:11)
Was durch throw geworfen wird, ist eine Instanz einer Klasse, die Throwable erbt.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class SampleProgram {
public static void main(String[] args) throws IOException {
try {
File file = new File("C:\\test3.txt");
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Geladen");
}
bfr.close();
}catch(IOException e) {
IOException ee = new IOException("IOException ist aufgetreten! !!");
throw ee;
}
}
}
//Ergebnis
Exception in thread "main" java.io.IOException:IOException ist aufgetreten! !!
at SampleProgram.main(SampleProgram.java:21)
Wenn Sie eine Ausnahme erstellen möchten, die nicht von Ihnen selbst vorbereitet wurde, erstellen Sie eine Ausnahmeklasse, die die Ausnahmeklasse erbt.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
class myException extends Exception{
myException(String msg) {
super(msg);
}
}
public class SampleProgram {
public static void main(String[] args) throws Exception {
try {
File file = new File("C:\\test3.txt");
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String ss = null;
while((ss = bfr.readLine()) != null) {
System.out.println(ss + "Geladen");
}
bfr.close();
}catch(Exception e) {
e.printStackTrace();
throw new myException("warf");
}
}
}
//Ergebnis
java.io.FileNotFoundException: C:\test3.txt (Die angegebene Datei wurde nicht gefunden.)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileReader.<init>(FileReader.java:72)
at SampleProgram.main(SampleProgram.java:19)
Exception in thread "main" myException:warf
at SampleProgram.main(SampleProgram.java:29)
Zugriffsmodifikator Klassenname(Argument Typ Argument) {
//Etwas zu verarbeiten
}
Der Konstruktor wird nicht vererbt.
//Übergeordnete Klasse
class p{
p(){
System.out.println("Übergeordneter Konstruktor 1");
}
p(int x){
System.out.println("Übergeordneter Konstruktor 2");
}
}
//Kinderklasse
class c extends p{
}
public class SampleProgram {
public static void main(String[] args) throws Exception {
c cc = new c(10);
c cc = new c();
}
}
c cc = new c(10);
Wenn Kompilierungsfehler "Konstruktor c (int) ist undefiniert"
c cc = new c();
damit "Übergeordneter Konstruktor 1" wird angezeigt Vorgeben, dass der übergeordnete Konstruktor (ohne Argumente) geerbt wird Es scheint, dass der Compiler den Standardkonstruktor automatisch hinzugefügt hat, da in der untergeordneten Klasse nichts deklariert wurde.
Ich weiß es nicht über die Quelle, aber es scheint, dass es den übergeordneten Konstruktor so aufrufen soll
class c extends p{
c(){
super();
}
}
Ich habe versucht, dem Kind explizit einen Konstruktor hinzuzufügen, aber aus irgendeinem Grund wurde auch der übergeordnete Konstruktor aufgerufen.
class p{
p(){
System.out.println("Übergeordneter Konstruktor 1");
}
p(int x){
System.out.println("Übergeordneter Konstruktor 2");
}
}
class c extends p{
c(){
System.out.println("Untergeordneter Konstruktor 1");
}
}
public class SampleProgram {
public static void main(String[] args) throws Exception {
c cc = new c();
}
}
//Ergebnis
Übergeordneter Konstruktor 1
Untergeordneter Konstruktor 1
Wenn eine untergeordnete Klasse instanziiert wird, wird natürlich der Konstruktor der untergeordneten Klasse ausgeführt. Es scheint jedoch, dass der Konstruktor ohne das Argument der übergeordneten Klasse zuvor ohne Erlaubnis aufgerufen wird. Ich kann es nicht in der Quelle sehen, aber es scheint so.
class c extends p{
c(){
super();★ Kann vom Compiler angehängt werden
System.out.println("Untergeordneter Konstruktor 1");
}
}
Hmmm. .. .. Wenn du es nicht weißt ..
Eine Syntax, die durch Kopieren gespeichert oder umgeleitet werden kann
import static java.lang.System.*;
public class SampleProgram{
public static void main(String[] args) {
out.println("hoge");
}
}
Hishidamas technische Memoseite →Java
Recommended Posts