# kompilierung klappt nur wenn main vorhanden ist



## jollyroger (22. Feb 2006)

hallo, 

weder google noch suchfunktion haben mich bei folgendem problem weitergebracht:

folgendes einfaches programm zum aufbauen einer jdbc-mysql-verbindung:


```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ExtractRFQ {

	  public static void main(String args[]) {
	    Connection con = null;
	
	    try {
	      Class.forName("com.mysql.jdbc.Driver").newInstance();
	      con = DriverManager.getConnection("jdbc:mysql:///test",
	        "test", "test");

	      if(!con.isClosed())
	        System.out.println("Successfully connected to " +
	          "MySQL server using TCP/IP...");

	    } catch(Exception e) {
	      System.err.println("Exception: " + e.getMessage());
	    } finally {
	      try {
	        if(con != null)
	          con.close();
	      } catch(SQLException e) {}
	    }
	  }
	}
```

klappt wunderbar....

entferne ich aber nun:


```
public static void main(String args[]) { }
```

zeigt mir eclipse


```
syntax error on token ";" , { expected after this token
```

für die zeile:


```
Connection con = null;
```

hat dafür jemand ein erklärung? das ich das ding ohne die main-methode nicht ausführen kann ist mir ja klar, aber kompilieren müsste doch klappen? wo ist denn hier das problem?

p.s.: klammern oder ähnliches hab ich nicht vergessen, hier ist der code der NICHT zu kompilieren geht, obwohl nur die main-methode fehlt:



```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ExtractRFQ {

	    Connection con = null;

	    try {
	      Class.forName("com.mysql.jdbc.Driver").newInstance();
	      con = DriverManager.getConnection("jdbc:mysql:///rfq",
	        "rfq", "rfq");

	      if(!con.isClosed())
	        System.out.println("Successfully connected to " +
	          "MySQL server using TCP/IP...");

	    } catch(Exception e) {
	      System.err.println("Exception: " + e.getMessage());
	    } finally {
	      try {
	        if(con != null)
	          con.close();
	      } catch(SQLException e) {}
	    }
	}
```


----------



## lin (22. Feb 2006)

hm.. ich kenn mich mit JDBC net aus,.. aber muss das ganze nicht in ne Methode rein?

edit: doch eh.. du kannst nicht einfach code in ne Klasse reinschreiben, .. dazu sind Methoden da..


----------



## jollyroger (22. Feb 2006)

> doch eh.. du kannst nicht einfach code in ne Klasse reinschreiben, .. dazu sind Methoden da..



ja, das ist mir klar, dass man dafür methoden nehmen sollte, aber muss man das wirklich?
gibt es einen grund (ausser design) warum nicht direkt code in eine klasse schreiben kann?

danke für den hinweis auf jeden fall


----------



## Roar (22. Feb 2006)

jollyroger hat gesagt.:
			
		

> > doch eh.. du kannst nicht einfach code in ne Klasse reinschreiben, .. dazu sind Methoden da..
> 
> 
> 
> ...


ehm, schau dir vielleicht nochmal nen oop oder java einsteigerbuch an bevor du mit jdbc rumfrickelst. du kannst keinen code einfachso in eine klasse schreiben (überleg mal: wann z.B. sollte der code denn ausgeführt werden?)


----------



## jollyroger (22. Feb 2006)

> überleg mal: wann z.B. sollte der code denn ausgeführt werden?



ja, guter punkt, scheint nicht mein tag heute zu sein


----------



## SamHotte (23. Feb 2006)

Naja, man könnte statt einer Methode den statischen Initialisierer benutzen, dann würde es gehen; ob es sinnvoll ist, müsste man natürlich noch diskutieren ...


----------



## VipViper2000 (24. Feb 2006)

> statt einer Methode den statischen Initialisierer



Was bitte ist denn ein statischer Initilisierer? Du meintst doch hoffentlich nicht den Konstruktor, oder? Und mal so nebenbei: Klar kannst du klassen machen, die keine Methoden sondern vielleicht nur nen Konstruktur enthalten. Aber dann zeig mir mal, wie du ohne main diesen Konstruktor aufrufst  :lol:


----------



## L-ectron-X (24. Feb 2006)

VipViper2000 hat gesagt.:
			
		

> Was bitte ist denn ein statischer Initilisierer? Du meintst doch hoffentlich nicht den Konstruktor, oder?



Nein meint er nicht.
http://www.galileocomputing.de/openbook/java2/kap_05.htm#Xxx943688


----------



## Roar (24. Feb 2006)

er meint sowas:


```
class Blabber {
   static {
        methodenAufruf();
        sonstigerSchmu();
    }
}
```

aber auch ein konstruktor ist eine methode... mehr oder weniger


----------



## VipViper2000 (24. Feb 2006)

> Instanz-
> Initialisierer: Rolle eines Default- Konstruktors
> 
> Ein Instanz-Initialisierer hat keine Parameter, entspricht also dem Default-Konstruktor.



Also ist ein Instanz-Initilisierer im Prinzip ein Default Konstruktor.

Aber mal ehrlich: Vielleicht wäre sowas wie Assembler ( was gibts denn noch an alten Sprachen, die überhaupt nicht OOP sind ausser C  :lol: ) mehr was für ihn   .

Also ich neulich nen C-Kurs an der Uni gemacht hab, wär ich fast ausgerastet. Wenn man einmal an Java und Eclipse gewöhnt ist, ist man VERwöhnt  :roll:


----------



## Roar (24. Feb 2006)

VipViper2000 hat gesagt.:
			
		

> > Instanz-
> > Initialisierer: Rolle eines Default- Konstruktors
> >
> > Ein Instanz-Initialisierer hat keine Parameter, entspricht also dem Default-Konstruktor.
> ...


ich weiß zwar nich was ein "isntanz-initialiser" sein soll, aber jedenfalls kein "static-initializer", dieser wird ausgefürt, sobald die klasse das erste (und einzige) mal geladen wird.


----------



## Guest (24. Feb 2006)

Hi!

Verdammt, hab bei dem Link von oben nicht weiter runter sondern nur ein bisschen hoch gescrollt. Weiss jetzt auch, was ein static Initialiazer ist. Aber darin wirklich Code auszuführen, was die Inititilisierung von statischen Variablen unterstreicht macht halt trotzdem wenig Sinn.


----------

