【问题标题】:function non static in class calling [duplicate]类调用中的非静态函数[重复]
【发布时间】:2013-06-14 09:56:48
【问题描述】:

你好,我有一个函数,它在 (.) 之后和字符串中的“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);
          }
       } 

}

所以问题在于:Integer vl1=Ajuster(data1); 谢谢

【问题讨论】:

  • 错误信息已经够清楚了。现在,有什么问题?
  • @fge 我不认为他理解错误信息

标签: java swing static


【解决方案1】:

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

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

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

或者改成static(尽量不要过度使用static方法)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 好的,已经解决了,谢谢
    • 不客气,但如果我帮助了你,请点击我的答案旁边的勾:)
    【解决方案3】:

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

     public static Integer Ajuster(String data)  
    

    或使用Test 类的对象调用,例如

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

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

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

    【讨论】:

    • 是的,谢谢,即使代码正确,它也不会给我结果
    • @cisco.nat:预期结果和实际结果是什么?
    【解决方案4】:

    您不能在不创建对象的情况下调用非静态方法。如果它是一个非静态上下文,那么当前对象 (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();
    

    【讨论】:

      【解决方案5】:

      你必须明白,非静态上下文不能在静态上下文中引用

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

      如果你看不懂,试着搜索了解一下Constructor

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-28
        • 1970-01-01
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多