java : non statique de la variable ne peut pas être référencé à partir d'un contexte statique d'Erreur
Le code suivant génère une erreur sur la variable con2
disant "non-static variable con2 cannot be referenced from a static context Error."
j'ai Googlé pour une résolution et ils sont ce qui suggère que la variable n'est pas initalized pourtant de rendre les méthodes disponibles. Suis-je l'initialisation de ce tort? J'ai aussi essayé de changer les choses pour le public, mais cela n'a pas aidé non plus.
import java.io.*;
import java.net.*;
import java.sql.*;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import net.sourceforge.jtds.jdbcx.JtdsDataSource;
import net.sourceforge.jtds.jdbc.Driver;
class testconnect {
private java.sql.Connection con2 = null;
private final String url2 = "jdbc:jtds:sqlserver://";
private final String serverName= "SQL01";
private final String portNumber = "2677";
private final String databaseName= "App";
private final String userName = "bob";
private final String password = "boob";
private final String selectMethod = "cursor";
private String getConnectionUrl2(){
System.out.println("initalizing jtds");
//String returnVal = url+serverName+":"+portNumber+";databaseName="+databaseName+";user="+userName+";password="+password+";instance="+instance+";";
String returnVal = url2+serverName+":"+portNumber+"/"+databaseName+";user="+userName+";password="+password;
System.out.println("url2: " + returnVal);
return returnVal;
}
public static void main (String[] args) {
con2 = java.sql.DriverManager.getConnection(getConnectionUrl2());
}
} //end class
javarevisited.blogspot.dans/2012/02/... ... il va montrer pourquoi ce problème se produit en premier lieu.
OriginalL'auteur phill | 2009-05-29
Vous devez vous connecter pour publier un commentaire.
Non, en fait, vous devez déclarer votre con2 champ statique:
Edit: Correction, ce n'est pas assez fait, vous obtiendrez le même problème parce que votre getConnection2Url méthode n'est pas statique. Une meilleure solution peut être de faire au lieu de faire la modification suivante:
OriginalL'auteur waxwing
Vous voudrez probablement ajouter "statique" de la déclaration de con2.
En Java, les choses (les deux variables et méthodes) peuvent être des propriétés de la classe (ce qui signifie qu'ils sont partagés par tous les objets de ce type), ou ils peuvent être des propriétés de l'objet (un différent dans chaque objet de la même classe). Le mot-clé "static" est utilisé pour indiquer que quelque chose est une propriété de la classe.
"Statique" des trucs existe tout le temps. Les autres trucs n'existe qu'une fois que vous avez créé un objet, et même alors, chaque objet a sa propre copie de la chose. Et le revers de la médaille c'est la clé dans ce cas: statique des choses peut pas accéder à des non-statique des choses, car il ne sait pas quel est l'objet à examiner. Si vous passer un objet de référence, il peut faire des trucs comme "thingie.con2", mais de dire simplement "con2" n'est pas autorisé, parce que vous n'avez pas dit que l'objet dont l'con2.
Les variables statiques sont une très mauvaise idée (statique réel constantes sont bien).
OriginalL'auteur jackr
Java a deux types de Variables
a)
Le Niveau De La Classe (Statique) :
Ils sont l'un par Classe.Dites que vous demandez à des Élèves de la Classe et défini nom comme variable statique.Maintenant, peu importe la façon dont de nombreux étudiants de l'objet que vous créez tous auront le même nom.
Au Niveau De L'Objet :
Ils appartiennent par Objet.Si le nom est non statique ,puis tous les étudiants peuvent avoir des noms différents.
b)
Niveau de la Classe :
Ces variables sont initialisées à la Classe de charge.Donc, même si les élèves ne sont pas d'objet est créé, vous pouvez toujours accéder et utiliser statique de la variable de nom.
Au Niveau De L'Objet:
Ils le seront initialisés lorsque vous créez un nouvel objet ,disons par new();
C)
Votre Problème :
Votre classe est Juste chargé dans la JVM et vous avez appelé sa principale méthode (statique): Légalement autorisé.
Maintenant, à partir de ce que vous voulez l'appeler un Objet varibale : Où en est l'objet ??
Vous devez créer un Objet, puis seulement vous pouvez accéder au niveau de l'Objet varibales.
OriginalL'auteur Khangharoth
Votre méthode main() est statique, mais il fait référence à deux non-membres statiques: con2 et getConnectionUrl2(). Vous avez besoin de faire une des trois choses:
1) Faire con2 et getConnectionUrl2() statique.
2) à l'Intérieur de main(), créez une instance de la classe testconnect et l'accès con2 et getConnectionUrl2() sur.
3) sortir une autre classe afin de conserver con2 et getConnectionUrl2 (), de sorte que testconnect seulement a main en elle. Il aura encore besoin d'instancier la classe et d'appeler les méthodes.
Option #3 est la meilleure option. #1 est le pire.
Mais, vous ne pouvez pas accéder non-membres statiques de l'intérieur d'une méthode statique.
OriginalL'auteur Clint Miller
Le plus simple, le changement serait quelque chose comme ceci:
OriginalL'auteur Ron
C'est une question intéressante, je veux juste donner un autre angle, en ajoutant un peu plus d'infos.Vous pouvez comprendre pourquoi une exception est levée si vous voyez comment les méthodes statiques fonctionnent.
Ces méthodes permettent de manipuler statique des données, de données locales ou de données qui est transmis en tant que paramètre.pourquoi? parce que la méthode statique peut être consulté par n'importe quel objet, n'importe où.
Donc, il peut y avoir des questions de sécurité, ou il peut y avoir des fuites d'informations si elle peut utiliser les variables d'instance.D'où le compilateur doit lancer un tel cas, de prendre en considération.
OriginalL'auteur JavaUSer