静态上下文中的java非静态变量

时间:2012-04-25 08:24:17

标签: 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) {
       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静态设置为:static class dbConnect并且它正常工作但是java正在生成额外的.class文件:My_program$dbConnect.class I不想

那么我怎样才能拥有一个.class文件并让代码生效。

4 个答案:

答案 0 :(得分:3)

取决于您的要求的一种方式:

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)
}

}

答案 1 :(得分:0)

My_program$dbConnect.class 

这是内部类的类文件。 如果在编译后创建内部类,则会得到一个类文件

outerclass$innerclass.class

答案 2 :(得分:0)

你不能,会生成额外的.class文件。在java中,每个类在编译成字节代码时都会生成一个.class文件。所以你的dbConnect类将生成一个.class文件。

注意:第一次编译失败,这就是为什么它没有生成Parent $ dbconnect.class文件

如果你只想要1个.class文件,那么删除内部类并将逻辑放在你的父类中。

答案 3 :(得分:0)

你无法从两个类中获得一个类文件。这就是Java的工作原理。

您需要将这两个类的内容合并为一个。