WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 04.06.2006, 14:28   #1
3of4
Elite
 
Registriert seit: 14.11.1999
Alter: 39
Beiträge: 1.429


Standard 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!
____________________________________
Resistantium est futilius
3of4 ist offline   Mit Zitat antworten
Alt 04.06.2006, 17:01   #2
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

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
T.dot ist offline   Mit Zitat antworten
Alt 04.06.2006, 20:03   #3
3of4
Elite
 
Registriert seit: 14.11.1999
Alter: 39
Beiträge: 1.429


Standard

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

Danke!
____________________________________
Resistantium est futilius
3of4 ist offline   Mit Zitat antworten
Alt 05.06.2006, 01:20   #4
Tarjan
Quantensingularität
 
Registriert seit: 28.09.2000
Alter: 55
Beiträge: 8.336


Tarjan eine Nachricht über ICQ schicken
Standard

Du hast im ersten Konstruktur eine weitere Insatz der Klasse erzeugt die nicht zugewiesen wird, deine ursprüngliche Klasse wurde aber nicht initialisiert.
____________________________________
Was ist klein, grün und dreieckig?
Ein kleines grünes Dreieck!


Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg!
Tarjan ist offline   Mit Zitat antworten
Alt 06.06.2006, 07:11   #5
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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.
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Alt 06.06.2006, 09:49   #6
3of4
Elite
 
Registriert seit: 14.11.1999
Alter: 39
Beiträge: 1.429


Standard

danke, bin schon etwas vertrottelt!
das hat man von zu viel Sun Lernprogrammen...
____________________________________
Resistantium est futilius
3of4 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:18 Uhr.


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