你好我有一个函数,它取字符串后的(。)和“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); 谢谢
答案 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)
main
是static
。这意味着它与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
}
}
如果您无法理解这一点,请尝试搜索并了解构造函数