静态上下文中的java非静态变量
我有以下代码:静态上下文中的java非静态变量,java,Java,我有以下代码: public class My_program { class dbConnect { public dbConnect(); public void connect_to_db(String connect_string) { Class.forName(...); ... } } public static void main(String[] args) {
public class My_program {
class dbConnect {
public dbConnect();
public void connect_to_db(String connect_string) {
Class.forName(...);
...
}
}
public static void main(String[] args) {
String connect_string = "jdbc...";
dbConnect db = new dbConnect();
db.connect_to_db(connect_string)
}
}
当我试图编译它时,出现以下错误:
error: non-static variable this cannot be referenced from a static context
所以我试着让dbConnect静态如下:静态类dbConnect,它工作正常,但java正在生成一个额外的.class文件:我不想要的程序$dbConnect.class
那么,我如何拥有一个.class文件并使代码正常工作呢
My_program$dbConnect.class
这是内部类的类文件。
如果您在编译后创建一个内部类,您将得到一个类文件
outerclass$innerclass.class
不能,将生成额外的.class文件。在java中,每个类在编译成字节码时都会生成一个.class文件。因此,dbConnect类将生成一个.class文件 注意:编译第一次失败,这就是它没有生成父$dbconnect.class文件的原因
如果您只需要1.class文件,请删除内部类并将逻辑放入父类中。根据您的要求,有一种方法:
public class My_program {
My_program() { }
public void connect_to_db(String connect_string) {
Class.forName(...);
......
}
public static void main(String[] args) {
String connect_string = "jdbc......";
My_program db = new My_program();
db.connect_to_db(connect_string)
}
}您不可能从两个类中获得一个类文件。这就是Java的工作原理
您需要将这两个类的内容合并为一个。好的,我知道了。。。但我仍然需要一个文件。@pufos,那么只使用一个类。java编译器为每个类或接口创建一个.class文件,而不是为每个源文件创建一个.class文件。不,如果有内部类,则无法获得一个文件。那么最好使用Mike建议的一个类:如果一个java文件中有两个类,则可能有两个.class文件。不管内部类是否是静态的。首先为什么需要dbconnect类。只需将它的方法用作My_程序类方法Java正在生成一个我不想要的额外的.class文件-我想知道,为什么你不想要它?是的。。。我只是做了这个。。。这似乎是拥有一个文件的唯一方法。。。谢谢