Konstruktor

thehasso

Erfahrenes Mitglied
Hallo, der compiler gibt mir bei den code ne Fehlermeldung aus.

Ich seh leider kein Fehler meinerseits?

Code:
class KonstruktorOne{

	String m_name;
	double m_value;

	KonstruktorOne(String name, double value){ 
	this.m_name = name;
	this.m_value = value;
	}
	
	public static void main ( String [] args ) {
	KonstruktorOne p = new  KonstruktorOne();
	}


}


Lg
 
Du rufst einen Konstruktor ohne Parameter auf, du hast aber keinen Konstruktor ohne Parameter definiert (nur den mit 2 Parameter).

Einen parameterlosen Konstruktor hast du nur automatisch, wenn kein anderer Konstruktor definiert ist. Ansonsten musst du ihn explizit definieren.

Außerdem wäre es für's nächste mal hilfreich, wenn du die Fehlermeldung auch posten würdest;)
 
Fehlermeldung:

KonstruktorOne.java:12: cannot find symbol
symbol : constructor KonstruktorOne()
location: class KonstruktorOne
KonstruktorOne p = new KonstruktorOne();
^
1 error


Ich hab das jetzt so gemacht:

PHP:
class KonstruktorOne{

	String m_name;
	double m_value;

	/*Alternative nummer 1 wäre diese*/
	KonstruktorOne(String name, double value){ 
	this.m_name = name;
	this.m_value = value;
	System.out.println(this.m_name+" "+this.m_value);
	}
	
	
	/*Andere Alternative wäre doch dann diese hier:*/
	/*Wenn man diese in main aufruft werden diese angezeigt*/
	
	void konstruktorarray () {	
	KonstruktorOne bluse = new KonstruktorOne("bluse", 20.34);
	KonstruktorOne hemd = new KonstruktorOne("hemd", 12.32);
	KonstruktorOne socken = new KonstruktorOne ("socken", 2.30);
	
	KonstruktorOne[] dasarray = {bluse,hemd,socken};
	
		for ( int i = 0; i < dasarray.length; i++ ) {
			System.out.println(i+". "+dasarray[i]);
		}
	
	}
	
	
	public static void main ( String [] args ) {
	KonstruktorOne p = new  KonstruktorOne("BAS", 120.34);
	
	// Aufruf Methode
	p.konstruktorarray();

	
	}



}

Es werden zwar keine Fehlermeldungen angezeigt, aber das Array wird gar nicht richtig ausgelesen. Warum denn?
 
Ich würde mal folgendes ausgeben in der FOR-Schleife.
Java:
System.out.println(i+". "+dasarray[i]).m_name + " " + dasarray[i]).m_value);
 
Naja, klar ist es nicht notwendig wenn du Programm mit einer Klasse machst.
Aber wenn du später Programme machst, wo du Instanzen erstellst, also mehrere Klasssen hast und dich wunderst wieso nichts geht ist es mühsam im Nachhinein alles auf public zu ändern.
Soweit ich weiss sind Klassen, Methoden und Variablen ohne Modifier private, oder? Irgendwann kommt einfach so eine Gewohnheit auf und macht es immer so und ob man nun public hinschreibt oder nicht, stört ja keinen^^ (ausser man wills explizit anders).

Etwas weit hergeholt, aber vergiss den Satz; das war einfach eine Bemerkung die ich noch hingeschrieben habe^^
 
Es hat nichts damit zu tun, dass wenn man nur eine Klasse hat.

Generell sollte man nur so wenig wie nötig public machen. So hält man einerseits die API übersichtlich und andererseits ist der Zugriff kontrollierter. Es kann auch sein, dass man gar keinen Konstrukter aufrufen lassen will, weil man z.B. eine Instanz mit einer statischen Methode holt/erzeugt.
Getter und Setter braucht man auch nur wenn es sinnvoll ist diese Variable von außen veränderbar/abrufbar zu machen.

Ohne modifier sind die Variablen/Methoden im package scope, d.h. nur im gleichen Package sichtbar. Was aber meistens auch schon zuviel ist^^
 

Neue Beiträge

Zurück