Java中main函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中main函数相关的知识,希望对你有一定的参考价值。

Java中main函数必须声明在一个类里?为什么?
那么一个程序为什么可以声明多个类?只能声明一个main?
main与类多关系?
请详细讲解一下?

main函数是一个程序的入口,也是出口,main函数其实就是类里的一个方法,方法只能在类里声明了,所以maion函数必须声明在一个类里,一个程序里只有一个main函数,因为类与类之间是相与调用的。一个程序从开始运行就会先找main函数,然后再一步一步的执行,如果有多个main那么程序就会报错,因为他不知道该从那个门口(main函数)进,然而类为什么可以有多个呢,你还记的JAVA的三大基本特征么,即封装,继承,多态。而封装就是我们所说的类,他是把所有相同的属性,方法归纳到一起,即组成一个类。这样给你打个比方吧
main函数所在的一个类就相当于一个城市,而main函数就是城市的一个入口,并且只有一个入口,也可是出口,而城市中又有许多小区,我们叫他为类吧,而小区里的房子又基本相同,这也就验证了我们把同一类物品归为一类,即封装在一个类里,而每个小区又不同,这又验证了每一个类的实现功能 是不同的,而类与类这间的调用则是用NEW关键字,这个你应该会吧,继承,多态我就不用说了
main与类没有多关系,也就是类与方法的关系,说了这么多,希望对你有帮助啊
呵呵!
参考技术A main方法是程序执行的入口,所以当然只能有一个main方法,否则程序执行就乱套了,main方法好比就是你的嘴一样,是进食的入口。而你只有一张嘴。

方法必须声明在类里,不光是main方法。否则的话,如果方法单独出来,那就是无根之水。好比做为一个人,你会说话这个方法,如果你这个本体都不存在了,那还有说话这个方法吗?

一个程序当然可以声明多个非公共类。好比你作为一个人,人是一个类吧,你是人这个类的一个对象。你还穿着衣服,裤子。衣服,裤子不也是类么,不也是属于人的么?所以,当然可以在程序中声明多个非公共类。

有些规则记住就好了,不要较真。
参考技术B main函数只是一个比较特殊的函数,它还是属于函数的范畴,所以必须声明在一个类里。
程序的运行也需要有一个开始,而main函数就是程序的开始。在一类中如果有多个main函数的话,JVM又怎么知道应该调用哪个main呢?
main与类的关系就是类与函数的关系,只是这个函数比较特别罢了。
参考技术C 1、main是java的入口方法
2、main的入口方法是规定的写法,可以理解为死的,固定的
3、每个类中,都可以有main方法
4、一个类中,可以有多个main方法,参数可以不一样,但是入口的只有一个
参考技术D Java中main函数可以声明在任意一个类里。因为每个java类中最多可以有一个main函数,或者没有。
那么一个程序为什么可以声明多个类?因为public类只能声明一个,其他的可以任意个,。
只能声明一个main?因为一个类只能有一个大门。不然会混淆的。
main与类多关系?没有什么直接关系,用久了就明白啦。

在 main 方法中编写函数 - Java

【中文标题】在 main 方法中编写函数 - Java【英文标题】:Writing a function inside the main method - Java 【发布时间】:2014-01-20 05:04:29 【问题描述】:

你能在main方法里面写一个方法吗?例如我发现了这段代码:

public class TestMax 
    public static void main(String[] args) 
    int i = 5;
    int j = 2;
    int k = max(i, j);
    System.out.println("The maximum between is " + k);


 public static int max(int num1, int num2) 
    int result;
    if (num1 > num2)
       result = num1;
    else
       result = num2;

    return result; 
  

方法 max 可以在 main 方法中编码吗?

【问题讨论】:

您不能将方法直接嵌套在 any 方法中。 【参考方案1】:

不,你不能在另一个方法中声明一个方法。

如果您仔细查看您提供的代码,这只是格式错误的一种情况,main 方法在 max 方法声明之前结束。

【讨论】:

他可以从方法中获取代码并将其放入主方法中。【参考方案2】:

当 Java 8 出现时,Closure/Lambda 功能应该可以实现,以便您可以在 main 方法中定义 max 方法。在那之前,您只能在特殊情况下在 main 方法中定义一个方法。

碰巧,您的问题确实属于特殊情况。有一个接口(Comparable),它封装了比较两个相同类型的事物的逻辑。因此,代码可以改写如下:

public class TestMax 
  public static void main(String[] args) 
    int i = 5;
    int j = 2;
    Comparator<Integer> compare = new Comparator<Integer>() 
        @Override
        public int compare(Integer o1, Integer o2) 
            // Because Integer already implements the method Comparable,
            // This could be changed to "return o1.compareTo(o2);"
            return o1 - o2;
        
    ;
    // Note that this will autobox your ints to Integers.
    int k = compare.compare(i, j) > 0 ? i : j;
    System.out.println("The maximum between is " + k);
  

这只是因为标准 Java 发行版中已经存在比较器接口。通过使用库可以使代码变得更好。如果我正在编写这段代码,我会将 Google Guava 添加到我的类路径中。然后我可以写如下:

public class TestMax 
  public static void main(String[] args) 
    int i = 5;
    int j = 2;
    // The 'natural' ordering means use the compareTo method that is defined on Integer.
    int k = Ordering.<Integer>natural().max(i, j);
    System.out.println("The maximum between is " + k);
  

我怀疑您的问题更多是关于 Java 语言的能力,而不是与订购号(和其他事情)有关的标准做法。所以这可能没有用,但我想我会分享以防万一。

【讨论】:

既然 java 8 出来了,我们不应该更新这个答案吗?【参考方案3】:

如果您想使用它,在这种情况下,将其设为 static 并将其放置在类中但在 main 方法之外(就像您在代码中使用的那样)。然后您可以在main() 中调用它。

【讨论】:

【参考方案4】:

cannot directly define methods 在 Java 的其他方法中(也是 main 方法)。

You should write the method in the same class as main. 

注意:您可以在另一个方法中声明一个具有方法的类

【讨论】:

【参考方案5】:

如果格式正确,您会注意到max 方法与main 方法出现在同一类中,但它不在main 方法中。

【讨论】:

【参考方案6】:

是的,这可以通过 lembda 表达式实现: 为此,您至少应该使用 java 8

import java.util.function.BiFunction;

public class TestMax 
    public static void main(String[] args) 
        BiFunction<Integer, Integer, Integer> max = (a,b)-> a>b ? a : b;

        //now you can call method

        int i = 5;
        int j = 2;
        int k = max.apply(i, j);
        System.out.println("The maximum between is " + k);
    

BiFunction 是一个函数式接口 java 编译器在内部将 lambda 表达式代码转换为 anonymouse 类,该类实现 BiFunction 接口并覆盖包含您的代码的 apply() 方法

内部(编译器考虑)代码是:

BiFunction<Integer, Integer, Integer> max = new BiFunction<Integer, Integer, Integer>()
    public Integer apply(Integer a, Integer b)
        return a>b ? a : b; //your code
    

【讨论】:

BiFunction 是一个函数式接口,java 编译器在内部将它转换成一个匿名函数,覆盖 public RetType apply(Arg1Type arg1, Arg2Type arg2)【参考方案7】:

没有。不能直接在 java 中的方法中定义方法。特殊情况除外,例如内置类中预先声明的方法。 最好的方法是在同一个类中定义方法,当然调用它。

【讨论】:

以上是关于Java中main函数的主要内容,如果未能解决你的问题,请参考以下文章

java中哪些内容应该放在main函数中?

java如何调用另个程序的main函数

java类的测试( main函数)

java main函数怎么设置参数

JAVA里面的main函数为啥要定义为static的?

java含有main函数的类的构造方法执行的疑问?