WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Java vergisst globale Variablen? (http://www.wcm.at/forum/showthread.php?t=192968)

3of4 04.06.2006 14:28

Java vergisst globale Variablen?
 
Ich übergebe an mein Java-Programm im Konstruktor Variablen, speichere diese global ab (beim System.out.println kennt er die Werte ja auch noch), aber bei der nächsten Verwendung (oder beim Aufruf von Außen) sind sie null!
Kann mir einer erklären, was hier los ist?

Codeschnipsel:
DB-Manager
Code:

public class MyDataBaseManager {
    public String user, password, dbdriver, jdbcurl, lastquery,lasterror;
    private Statement st;
    private ResultSet rs;
    private ResultSetMetaData rsmd;
    private Connection con;
    private int scroll, concur; 
   
    /**
    * Creates a new instance of MyDataBaseManager
    */
    public MyDataBaseManager(String dbdriver, String jdbcurl){
        System.out.println("1. Konstruktor: " + dbdriver + jdbcurl);
        new MyDataBaseManager("","", dbdriver, jdbcurl);
    }
   
    public MyDataBaseManager(String user, String password, String dbdriver, String jdbcurl) {
        this.user = user;
        this.password = password;
        this.dbdriver = dbdriver;
        this.jdbcurl = jdbcurl;
        this.scroll = ResultSet.TYPE_FORWARD_ONLY;
        this.concur = ResultSet.CONCUR_READ_ONLY;
        System.out.println(this.dbdriver+this.jdbcurl);
    }
...

Aufrufer:
Code:

public class SQLclient extends javax.swing.JFrame {
    private MyDataBaseManager mydbm;
    private JTextField []fields;
   
   
    /** Creates new form SQLclient */
    public SQLclient() {
        mydbm = new MyDataBaseManager("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:test1");
        System.out.println(mydbm.dbdriver + " " + mydbm.jdbcurl);
        initComponents();
    }
...

Ausgabe:
Code:

init:
deps-jar:
compile-single:
run-single:
1. Konstruktor: sun.jdbc.odbc.JdbcOdbcDriverjdbc:odbc:test1
sun.jdbc.odbc.JdbcOdbcDriverjdbc:odbc:test1
null null

Erklärt mir bitte, wofür ich zu blöd bin!

T.dot 04.06.2006 17:01

imho stimmt das nicht:

public MyDataBaseManager(String dbdriver, String jdbcurl){
System.out.println("1. Konstruktor: " + dbdriver + jdbcurl);
new MyDataBaseManager("","", dbdriver, jdbcurl);
}

Du solltest nur den Zweitkonstruktor aufrufen, dh. des new macht keinen Sinn. Damit würdest du nämlich eine neue Klasseninstanz (die du keiner Variable zuweißt) erstellen.

public MyDataBaseManager(String dbdriver, String jdbcurl){
System.out.println("1. Konstruktor: " + dbdriver + jdbcurl);
MyDataBaseManager("","", dbdriver, jdbcurl);
}


Zum Testen kannst ja ansonsten auch mal die Klasse mit dem zweiten Konstruktor aufrufen.

mfg Thomas

3of4 04.06.2006 20:03

Ok, erste Konstruktor eliminiert, damit funktionierts.
Verstehen tu ichs trotzdem nicht...

Danke!

Tarjan 05.06.2006 01:20

Du hast im ersten Konstruktur eine weitere Insatz der Klasse erzeugt die nicht zugewiesen wird, deine ursprüngliche Klasse wurde aber nicht initialisiert.

Who-T 06.06.2006 07:11

Code:


    /**
    * Creates a new instance of MyDataBaseManager
    */
    public MyDataBaseManager(String dbdriver, String jdbcurl){
        this("","", dbdriver, jdbcurl);
        System.out.println("1. Konstruktor: " + dbdriver + jdbcurl);
    }

Das erzeugt das von dir gewuenschte ergebnis.

3of4 06.06.2006 09:49

danke, bin schon etwas vertrottelt!
das hat man von zu viel Sun Lernprogrammen...


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag