java里面可以没有主类吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java里面可以没有主类吗?相关的知识,希望对你有一定的参考价值。

“类没有主方法”是由于程序入口main没有找到!

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。

报错
参考技术A 啥是主类啊?!
本来就没有所谓的主类、非主类之说。我们通常把含有main函数的类称之为主类。也就是先有main才有主类,别搞颠倒了。
换句话说,主类和其他类本质上没有任何区别。就好比会议室和卧室有什么区别?放了会议桌就是会议室,放个床那就叫卧室。

另外,一个项目(也就是编好的jar包)可以有主类,也可以没有。有的话可以有很多,具体使用哪个进入,那要看使用者。

再说一下main,main和普通函数本质上没区别,可以像普通函数一样调用(你试过没?)。唯一的区别就是,Java虚拟机有一个约定,一旦启动时给了一个类,而且这个类包含一个形如public static main(字符串数组)的方法,那就执行这个方法。

当然,深究起来这里面还有很多有意思的地方,比如main为什么是静态的?你自己考虑去。

java 继承父类 是会先执行父类吗

java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。
public class FatherTest

private String name;

FatherTest()
System.out.println("--父类的无参构造函数--");


FatherTest(String name)
this.name=name;
System.out.println("--父类的有参构造函数--"+this.name);


static
System.out.println("--父类的静态代码块--");



System.out.println("--父类的非静态代码块--");


public void speak()
System.out.println("--父类的方法--");



加入一个main程序后
public static void main(String[] args)
System.out.println("--父类主程序--");

FatherTest father=new FatherTest("父亲的名字");
father.speak();


执行结果为:
--父类的静态代码块--
--父类主程序--
--父类的非静态代码块--
--父类的有参构造函数--父亲的名字
--父类的方法—

可以很明显的看出来执行顺序:静态代码块—主程序—非静态代码块—构造函数—一般方法。
如果加入子类的继承以后,情况就会变得复杂些。比如我们再新建一个测试子类。
public class SonTest extends FatherTest
private String name;

static
System.out.println("--子类的静态代码块--");



System.out.println("--子类的非静态代码块--");


SonTest()
System.out.println("--子类的无参构造函数--");


SonTest(String name)
this.name=name;
System.out.println("--子类的有参构造函数--"+this.name);


@Override
public void speak()
System.out.println("--子类Override了父类的方法--");



然后再加入一个main函数
public static void main(String[] args)
System.out.println("--子类主程序--");

FatherTest father=new FatherTest("父亲的名字");
father.speak();

SonTest son=new SonTest("儿子的名字");
son.speak();

执行结果为:
--父类的静态代码块--
--子类的静态代码块--
--子类主程序--
--父类的非静态代码块--
--父类的有参构造函数--父亲的名字
--父类的方法--
--父类的非静态代码块--
--父类的无参构造函数--
--子类的非静态代码块--
--子类的有参构造函数--儿子的名字
--子类Override了父类的方法--
加入了子类以后,执行顺序有了新的变化,我们可以总结一下。首先第一部分执行的是父类的静态代码块—子类的静态代码块—主程序。这一部分都是执行一次,与建立多少对象没有关系。第二部分new了一个父类对象,并调用了方法。执行了它的非静态代码块—构造函数—一般方法。第三部分new了一个子类的对象,并调用了方法。执行顺序为父类的非静态代码块—父类的无参构造函数,然后是子类的非静态代码块—子类构造函数—子类的方法。
参考技术A 你要写一个调用才会执行父类(具体看你哪个写前面了),而且如果一样的函数更改了子类会覆盖父类执行 参考技术B 构造函数是一定先调用父类的。
其他函数,你调用哪个就是哪个。

以上是关于java里面可以没有主类吗?的主要内容,如果未能解决你的问题,请参考以下文章

iOS分类中调用主类原实例、类方法

java无法找到或加载主类

java中无法加载或找不到主类

如何解决Eclipse下“找不到或无法加载主类”的错误?

java中找不到主类是啥问题

java运行显示“找不到或无法加载主类”怎么回事?