我是Java的初学者,我有一个关于主类和主要方法的基本问题。我尝试在main方法下创建添加等方法。像“非静态方法”那样抛出错误。是什么原因?感谢...
答案 0 :(得分:3)
静态方法意味着您不需要在实例(Object)上调用该方法。非静态(实例)方法要求您在实例上调用它。所以想想看:如果我有一个方法 changeThisItemToTheColorBlue(),我尝试从main方法运行它,它会改变什么实例?它不知道。您可以在实例上运行实例方法,例如someItem。 changeThisItemToTheColorBlue()。
http://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods
的更多信息从静态方法调用非静态方法的唯一方法是让类的实例包含非静态方法。根据定义,非静态方法是在某个类的实例上调用的方法,而静态方法属于类本身。
就像当你尝试在没有实例的情况下调用类String的非静态方法startsWith时:
String.startsWith("Hello");
您需要的是拥有一个实例,然后调用非静态方法:
String greeting = new String("Hello World");
greeting.startsWith("Hello"); // returns true
所以你需要创建和实例来调用它。
要更清楚静态方法,可以参考
答案 1 :(得分:2)
我认为您的方法没有关键字'static'。 您不能在静态上下文中调用非静态方法,例如main方法。
答案 2 :(得分:2)
我猜您使用的是这样的代码。
public class TestClass {
public static void main(String[] args) {
doSth();
}
public void doSth() {
}
您无法从主类调用非静态方法。 如果要从主类中调用非静态方法,请按以下方式对类进行实例:
TestClass test = new TestClass();
test.doSth();
并调用方法。
答案 3 :(得分:1)
如果没有实例化类,则无法从静态方法调用非静态方法。如果您想在不创建主类的新实例(新对象)的情况下调用另一种方法,则还必须将static关键字用于另一种方法。
package maintestjava;
public class Test {
// static main method - this is the entry point
public static void main(String[] args)
{
System.out.println(Test.addition(10, 10));
}
// static method - can be called without instantiation
public static int addition(int i, int j)
{
return i + j;
}
}
如果你想调用非静态方法,你必须实例化类,这样就可以创建一个新实例,类的对象:
package maintestjava;
public class Test {
// static main method - this is the entry point
public static void main(String[] args)
{
Test instance = new Test();
System.out.println(instance.addition(10, 10));
}
// public method - can be called with instantiation on a created object
public int addition(int i, int j)
{
return i + j;
}
}
答案 4 :(得分:1)
main方法是静态方法,因此它不存在于对象内部。
要调用非静态方法(在其定义前没有“static”关键字的方法),您需要使用new
创建类的对象。
你可以让另一个方法保持静态,这将解决眼前的问题。但它可能会或可能不是良好的面向对象设计来做到这一点。这取决于你想要做什么。