在main方法中编写一个函数 - Java

时间:2014-01-02 17:23:17

标签: java function methods main

你能在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方法中编码吗?

7 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:6)

当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语言的能力,而不是与订购号码(和其他东西)有关的标准做法。所以这可能没有用,但我想我会分享以防万一。

答案 2 :(得分:1)

如果要使用它,请在此方案中将其设置为static并将其放在类中但不在main方法之外(就像在代码中一样)。然后,您可以在main()内调用它。

答案 3 :(得分:1)

你在Java中的其他方法中使用cannot directly define methods(也是主方法)。

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

注意:您可以使用其他方法中的方法声明一个类

答案 4 :(得分:1)

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

答案 5 :(得分:1)

  

,这可以通过 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表达式代码转换为实现BiFunction接口的 anonymouse类,并覆盖包含代码的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
    }
}

答案 6 :(得分:1)

不。不能直接在Java方法中定义方法。除特殊条件外,例如内置类中的预声明方法。 最好的方法是在同一个类中定义方法,当然也要称呼它。