在类调用中函数非静态

时间:2013-06-14 09:56:49

标签: java swing static

你好我有一个函数,它取字符串后的(。)和“Vl”之后的数字 所以我想在代码上调用此函数,但他们告诉我这个错误

non-static method Ajuster(String) cannot be referenced from a static context

这个代码

public class Test {
     public Integer Ajuster(String data) { 
        Integer vlan=0;

        if (data.indexOf("Vl") >= 0) {
            int pos = data.indexOf("Vl") + 2;
            String vl = data.substring(pos, data.length());
            vlan=Integer.parseInt(vl.trim());           
        } else {
            int pos = data.lastIndexOf(".") + 1;
            String vl = data.substring(pos, data.length());
            try {
               vlan=Integer.parseInt(vl.trim()); 

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return vlan;
    }

    public static void main(String[] args) {

       Connection conn = null;
       try { 
          conn = DriverManager.getConnection("jdbc:mysql://localhost/mohammedia", "root", "123456"); 
          String sql = "SELECT * FROM router;"; 
          Telnet_Interface telnet = new Telnet_Interface();
          Telnet_Ressources telnet_R = new Telnet_Ressources();
          Telnet_Interface telnet1 = new Telnet_Interface();
          Telnet_Interface telnet2 = new Telnet_Interface();
          PreparedStatement prest = conn.prepareStatement(sql);
          ResultSet res=prest.executeQuery();
          while(res.next()){
             telnet1.Config(res.getString(1), "noc", "nocwana", res.getString(1));
             telnet2.Config(res.getString(2), "noc", "nocwana", res.getString(2));
          }
          ArrayList myData=telnet.getMyData();
          ArrayList myData1=telnet1.getMyData();
          ArrayList myData2=telnet2.getMyData();

          for(int i=0;i<myData1.size();i++)    
          {
             String data1=myData1.get(i).toString();
             Integer vl1=Ajuster(data1);
             System.out.print(vl1);
          }
       } 

}

所以关于这一行的问题是:整数vl1 = Ajuster(data1); 谢谢

5 个答案:

答案 0 :(得分:0)

你不能在没有任何对象引用的情况下调用非staic 要么使方法像静态一样(取决于它是否涉及任何实例varialbe)

 public static Integer Ajuster(String data)  

或使用类Test的对象调用

Test obj = new Test();
obj.Ajuster("data");

或更好的http://docs.oracle.com/javase/tutorial/

PS:以大写名字开头的方法看起来很奇怪

答案 1 :(得分:0)

mainstatic。这意味着它与Test类的实例无关,而与类本身无关。

Ajuster(请遵循Java编码指南,它应该是ajuster)不是静态的,因此它与Test的实例相关。因此,要使用它,您必须从创建的实例(如此)

中使用它
Test test = new Test();
test.ajuster();

或将其static(尽量不要过度使用static方法)

答案 2 :(得分:0)

看来你正在调用方法public Integer Ajuster(String data),它是非主要的静态方法,实际上是静态的。为了调用该方法Ajuster,您必须实例化Test类的对象。 我想你知道怎么做,但是你必须把它写下来Test test = new Test()

答案 3 :(得分:0)

无法在不创建对象的情况下调用非静态方法。如果它是非静态上下文,则当前对象(this)将存在。如果来自静态方法,则必须创建一个对象并在该对象上调用该方法。

静态方法对于每个对象都是相同的。在这种情况下,我们无法知道我们应用方法或访问变量的object是什么,这就是限制的原因。

或者,您可以将方法设置为静态。但这取决于。您应该知道何时使用静态方法以及何时不使用。这是一个设计问题。

阅读:

To know the difference between static and non-static method

When should a method be static

How to call a non static method from main

因此,创建一个对象并调用方法:

                   Test newTest = new Test();
                   newTest.ajuster();

答案 4 :(得分:0)

您必须了解非静态上下文不能在静态上下文中引用

public int test = 0;

public static void main(String[] args) {
  test += 4; //this wont compile
}

然而,非静态上下文可以包括非静态和静态上下文。 尝试这样的事情。

public class Test {

public int test = 0;

  public static void main(String[] args) {
    new Test();
  }
  public Test() {
    test += 4; //this will compile
  }
}

如果您无法理解这一点,请尝试搜索并了解构造函数