我是java的总菜鸟,但是今晚练习时我发现使用OOP设计主类中的每个方法都必须是静态的吗?在这段代码中,我无法在类中调用非静态的方法。
似乎我可能忽略了为什么要声明一个静态类的原因。谢谢你的帮助!
public class JavaApplication2 {
private static CreateCar Vroom;
private static Limo Fuuu;
public static void main(String[] args) {
Vroom = new CreateCar();
Vroom.creator();
getGas();
addGas();
getGas();
Fuuu = new Limo();
Fuuu.creator();
Fuuu.wheels = 5;
Fuuu.wheelie();
}
public static int getGas(){
Vroom.returnGas();
return 0;
}
public static void addGas(){
Vroom.fillerUp();
}
}
答案 0 :(得分:40)
您可以调用非静态方法,但只能通过对象执行此操作。也就是说,您需要在给定对象上调用该方法。
您的主类也可以实例化,因此主类中的每个方法都不需要是静态的。 例如:
public class MainClass {
int value;
public void printValue() {
System.out.println("" + value);
}
public static void main(String[] args){
MainClass o = new MainClass();
o.printValue();
}
}
答案 1 :(得分:8)
没有。但main
方法必须为static
。
要在类中调用非静态方法,您必须为类的对象创建引用。然后从引用中调用该方法。
public class JavaApplication2 {
// non-static method
public void go() {
System.out.println("hello");
}
public static void main(String[] args) {
// declare a reference
JavaApplication2 app;
// create an object
app = new JavaApplication2();
// call a method
app.go();
}
}
答案 2 :(得分:3)
简答:是的。
原因是你的JVM需要调用你的类“main”独立于已经拥有该类的任何现有实例。
次要语义挑剔:“main”是类的成员(静态成员);它不是班级本身的名称。
有用的提示:每个类都可以拥有 OWN , DIFFERENT “main()”。这对单个测试单个类非常有用。
这有时会让C / C ++程序员感到震惊,其中“main()”与“.exe”相关联,而你只能拥有一个。在java中,您可以使用许多“main()”方法,并调用您在运行时选择的任何方法。
答案 3 :(得分:2)
呃,你没有“静态主”类。您的main
类中有一个名为JavaApplication2
的静态方法。
在该类中不需要任何其他静态方法。要使用该类,您需要实例化它:
public static void main(String[] args)
{
JavaApplication2 myApp = new JavaApplication2();
myApp.someMethod();
...
}
main
是一个专门命名的静态方法,充当入口点。当您告诉Java从命令行“运行”您的程序时:
java JavaApplication2
JVM调用JavaApplication2.main()
传递命令行参数。
答案 4 :(得分:0)
简短回答:不,每种方法都不需要是静态的。
事实上:
public static void main (String [] argv) { /* ... */ }
答案 5 :(得分:0)
方法声明为static,以便通过类名称引用... 例如
Math.pow(x,y) // x^y
在这个名为user的方法中,不必担心实例的创建......因为 Math的所有方法都是静态所以这就是使用静态方法的基本原因.... / p>
静态方法可以通过类
的对象调用非静态方法ClassName cn =new ClassNam().methodName;
main()是特殊方法,它是程序执行的起点,所以你永远不能有一个没有运行程序的对象,因而它的调用就像(execution :: java ClassName),所以它必须是静态的。 ..
答案 6 :(得分:0)
静态方法意味着您可以通过
直接调用它public class ClassName{
//no-op
public static void method(){//....}
}
ClassName.method();
并且,在某些情况下,ClassName
可以省略,例如
static import
main method
但是要调用非静态方法,必须首先启动它。