静态上下文中的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文件-我想知道,为什么你不想要它?是的。。。我只是做了这个。。。这似乎是拥有一个文件的唯一方法。。。谢谢