为什么我们需要双重定义从main传递到方法的变量?

时间:2018-10-04 21:31:58

标签: java variables methods parameters

采用以下代码:

public static void print(ArrayList<String> list) {
    for (String word : list) {
        System.out.println( word );
    }
}

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("Java");
    list.add("Python");
    list.add("Ruby");
    list.add("C++");

    print(list);
}

为什么我们需要在main中将“列表”定义为ArrayList,然后在方法的参数中再次定义它?为什么不能将变量类型从main传递给方法?有什么办法吗?您希望在其中的类型在main和method之间进行更改的任何示例吗?

感觉就像不必要地重复执行同一步骤两次。

例如,为什么我们不能只使用:

public static void print(list) {
    for (String word : list) {
        System.out.println( word );
    }
}

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("Java");
    list.add("Python");
    list.add("Ruby");
    list.add("C++");

    print(list);
}

4 个答案:

答案 0 :(得分:3)

什么是list

public static void print(list) {
    for (String word : list) {
        System.out.println( word );
    }
}

在面向对象编程的上下文中,假设一个外部类想要使用此方法。它会在这里传递什么?它可以传入什么 ?怎么知道?

从根本上讲,您已经迷上了变量参数之间的差异。由于Java是一种强类型语言,因此必须键入两个 ,但是两者都不必相互关联。您可以使用一个与稍后声明的变量相同的名称来命名,以提高可读性,但是没有为此而设置任何强制性要求。

为清楚起见,再次使用相同的方法:

public static void print(ArrayList<String> l) {
    for (String word : l) {
        System.out.println( word );
    }
}

您的参数的名称无关紧要,只要键入

答案 1 :(得分:0)

您需要在参数列表中指定类型,以便可以验证传入的类型。

在此示例中,您可能会说“好吧,我只调用它一次并传递一个列表,因此很明显类型应该是什么”。当从多个地方调用它,传递不同的对象时会发生什么?类型检查器需要知道函数期望的类型,以便在提供错误类型的对象时,它可以引发编译时错误,并验证在传递的对象上使用的方法对该对象合法。

答案 2 :(得分:0)

Java是一种强类型和静态类型的语言,它要求您声明该方法接受的类型。如果您不希望该方法接受任何类型的列表,则可以执行以下操作:

// this method can accept an ArrayList, LinkedList, etc
public static void print(List<String> list) {
    for (String word : list) {
        System.out.println( word );
    }
}

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("Java");
    list.add("Python");
    list.add("Ruby");
    list.add("C++");

    print(list);
}

答案 3 :(得分:0)

Java是一种强类型编程语言。访问https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html了解更多信息。 您可以使用Java之类的语言(例如Java中的JavaScript)仅传递没有类型的名称,而应键入type(特定字词:布尔值,int,double,...),然后输入nameOfParameter。