我是Java的初学者,我有一个关于主类和主方法的基本问题。我尝试在主方法下创建加法等方法。抛出"非静态方法"之类的错误。什么是理性?谢谢。。。
我猜你使用这样的代码。
public class TestClass {
public static void main(String[] args) {
doSth();
}
public void doSth() {
}
不能从主类调用非静态方法。如果要从主类调用非静态方法,请像这样实例化您的类:
TestClass test = new TestClass();
test.doSth();
并调用该方法。
静态方法意味着您不需要在实例(对象)上调用该方法。非静态(实例)方法要求您在实例上调用它。所以想一想:如果我有一个方法更改ThisItemToTheColorBlue()并且我尝试从main方法运行它,它会改变什么实例?它不知道。您可以在实例上运行实例方法,例如 someItem。将此项更改为颜色蓝色()。
更多信息请访问 http://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods
从静态方法调用非静态方法的唯一方法是具有包含非静态方法的类的实例。根据定义,非静态方法是称为某个类的实例的 ON 的方法,而静态方法属于类本身。
就像当你尝试调用没有实例的非静态方法starts与类字符串:
String.startsWith("Hello");
你需要的是一个实例,然后调用非静态方法:
String greeting = new String("Hello World");
greeting.startsWith("Hello"); // returns true
因此,您需要创建和实例来调用它。
为了更清楚地了解静态方法,您可以参考
https://softwareengineering.stackexchange.com/questions/211137/why-can-static-methods-only-use-static-data
我认为您定义了没有关键字"静态"的方法。不能在静态上下文(如 main 方法)中调用非静态方法。
请参阅 Java 面向对象编程
main 方法是静态方法,因此它不存在于对象中。
要调用非静态方法(定义前面没有"static"关键字的方法),您需要使用 new
创建一个类的对象。
您可以将另一种方法设置为静态,这将解决眼前的问题。但是这样做可能是也可能不是好的面向对象设计。这取决于你想做什么。
化类,则无法从静态方法调用非静态方法。如果你想调用另一个方法而不创建主类的新实例(一个新对象),你也必须对另一个方法使用 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;
}
}
查看更多:维基百科上的静态关键字静态 about.com