我想知道创建额外主要方法会对您的代码产生什么影响。
例如,
public class TestClass {
public static void main (String[] args){
TestClass foo = new TestClass();
}
}
程序最初启动后,将创建foo,并在其中包含另一个公共main方法。这会导致任何错误吗?
答案 0 :(得分:35)
它不会导致错误。仅仅因为你初始化一个对象,并不意味着主方法被执行。 Java最初只会调用传递给它的类的main方法,比如
>java TestClass
然而,做类似的事情:
public class TestClass
{
public static void main (String[] args)
{
TestClass foo = new TestClass();
foo.main(args);
}
}
或者
public class TestClass
{
public TestClass()
{
//This gets executed when you create an instance of TestClass
main(null);
}
public static void main (String[] args)
{
TestClass foo = new TestClass();
}
}
那会导致StackOverflowError
,因为你明确地调用了TestClass的main方法,然后再次调用main方法,再次,再次调用.... / p>
如果有疑问,只需测试一下: - )
答案 1 :(得分:10)
main方法是static,这意味着它属于类而不是对象。所以对象根本就没有其他主要方法。
你可以在对象的实例上调用main方法,但是如果你这样做,它实际上只是调用TestClass.main()的另一种方式(并且包括我在内的许多人不赞成调用静态方法)无论如何,对象的实例。)
如果您在同一个程序中引用多个主要方法,那么这也不是问题。简单地指定主类,并执行其主要方法来启动程序(在jar文件的情况下,这是清单文件中的main-class属性。)
答案 2 :(得分:7)
它不会有额外的main
- 方法,因为main
是static
。所以每节课一次。
如果项目中有多个main
- 方法,您将在启动应用程序时指定要启动的方法。
答案 3 :(得分:5)
这很好。使用多个main
方法不会导致任何问题。首次启动Java程序时,执行从用户指定的类中的某些函数main
或.jar文件开始。程序开始运行后,所有其他名为main
的函数基本上都被忽略或被视为与其他函数一样。
答案 4 :(得分:4)
在搜索具有多个main()方法的Java类或简单的单词,重载的main()方法之后,我想出了一个我自己的例子。请看看
public class MultipleMain{
public static void main(String args[]){
main(1);
main('c');
main("MyString");
}
public static void main(int i){
System.out.println("Inside Overloaded main()");
}
public static void main(char i){
System.out.println("Inside Overloaded main()");
}
public static void main(String str){
System.out.println("Inside Overloaded main()");
}
}
我在JDK 1.7上测试了这个Java代码并且像魅力一样工作!
你需要“public static void main(String args [])”来开始,然后你可以在这个main中调用重载的main方法,它应该可以正常工作。
任何评论和建议都非常感谢。我只是一个愿意开发Java技能的Java开发人员。
谢谢, PK
答案 5 :(得分:3)
不,您可以在项目中拥有任意数量的主要方法。由于您在启动程序时指定了要使用的那个,因此不会引起任何冲突。
答案 6 :(得分:1)
一个类中只能有一个main方法,但是你可以将一个main方法显式调用另一个方法
class Expmain
{
public static void main(String[] ar)
{
System.out.println("main 1");
}
}
class Expmain1
{
public static void main(String[] ar)
{
System.out.println("main 2");
Expmain.main(ar);
}
}
答案 7 :(得分:0)
当您运行Java类时,它将始终在类中查找签名 public static void main(String args [])。因此,假设您通过命令行参数进行调用,它将在类中查找Signature方法,并且在您通过类名明确地将其引入之前不会调用其他方法。
class MainMethod1{
public static void main(String[] ags){
System.out.println("Hi main 1");
testig2 y = new testig2();
//in this case MainMethod1 is invoked/.......
// String[] a = new String[10];
// testig2.main(a);
}
}
class MainMethod2{
public static void main(String[] ags){
System.out.println("Hi main 2");
}
}
但是当你从 eclipse 尝试相同的时候,它将要求编译哪个类。表示MainMethod1或Mainmethod2。因此,如果te类具有确切的签名,则可以将它们用作启动应用程序的单独入口点。 回到你的问题,如果你通过改变主要方法的参数来删除上面的签名。它将作为一种常规方法。
答案 8 :(得分:0)
所有关于JVM的执行引擎。请记住,您在cmd提示符下写了>java com.abc.MainClass
。
它解释了一切。如果在此处找不到main方法,则会抛出运行时错误:MainClass类中找不到主方法。 现在,如果在此处找到main方法,它将作为程序计数器必须映射并开始执行指令时的第一个点。然后加载引用的类,可以使用在里面创建的实例调用引用的方法。因此,main是类特定的,尽管一个类只能有一个main方法。 请注意,main方法的签名永远不会改变。 你可以在同一个类中有两个重载的主方法,比如
public static void main(String [] args){}
public static void main(){} //在同一个类中重载。
在静态绑定期间,原始主要由执行引擎解析和识别。
答案 9 :(得分:0)
另一个需要考虑的有趣点是java文件中有两个不同的类。
例如,您有两个类的Java文件:
public class FirstClassMultiply {
public static void main (String args[]){
System.out.println("Using FirstClassMultiply");
FirstClassMultiply mult = new FirstClassMultiply();
System.out.println("Multiple is :" + mult.multiply(2, 4));
}
public static void main (int i){
System.out.println("Using FirstClassMultiply with integer argument");
FirstClassMultiply mult = new FirstClassMultiply();
System.out.println("Multiply is :" + mult.multiply(2, 5));
}
int multiply(int a, int b) {
return (a * b);
}
}
class SecondClass {
public static void main(String args[]) {
System.out.println("Using SecondClass");
FirstClassMultiply mult = new FirstClassMultiply();
System.out.println("Multiply is :" + mult.multiply(2, 3));
FirstClassMultiply.main(null);
FirstClassMultiply.main(1);
}
}
使用javac FirstClassMultiply.java
进行编译会生成两个.class
个文件,第一个为FirstClassMultiply.class
,第二个为SecondClass.class
为了运行它,您需要为生成的.class
文件执行此操作:java FirstClassMultiply
和java SecondClass
,而不是原始文件名文件。
请注意几点:
SecondClass.class
虽然它在原始文件中没有公开上课!FirstClassMultiply
overloading主要方法
是完全正常,但唯一的入口点到您的编程
将是String args[]
参数的主要方法。