Java中带参数的方法

时间:2012-10-21 07:27:43

标签: java methods parameter-passing

有人可以解释为什么这有效。

我在Eclipse中有2个类。 名为“Car”的类包含以下代码..

public class Car {
    public void printOut(String variable1){
        System.out.println("Hello " +variable1);
    }
}

和另一个类,我的'main'所在的地方叫做“House”,里面的代码是

import java.util.Scanner;

class House {
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        Car carObject = new Car();

        System.out.println("Enter name here: ");
        String variable2 = input.nextLine();

        carObject.printOut(variable2);
    }
}

当我运行代码时,它会工作,它会写“在这里输入名称”,当我输入时,它会继续说“Hello”名称输入“”

我的问题是,'variable1'和'variable2'与彼此有任何关系,除了它们都是String类。

因为我对代码正确编译的原因感到困惑。

对我来说,看起来变量1与variable2没有任何关联,即使它们都是String类,看起来它们看起来不像彼此互动,并且变量1没有在“House”中使用“班级,但它仍然知道编译我输入的任何东西。 这就好像'variable1'被'variable2'替换了,并且无论variable2包含什么都被打印出来。

11 个答案:

答案 0 :(得分:3)

Car中的方法定义是您使用它时的原型。你有没有被教过“黑匣子”的数学函数?你输入一个数字,然后得到输出。因此,输入3,如果函数为f(x)= Xx2,则输出为6.在调用方法之前,var2与var1完全不同。但是,在方法中,传递var2并替换您在方法中使用的所有var1。别担心,当我开始使用Java时,我没有得到这个。

答案 1 :(得分:3)

它们只是因为您将variable2传递到Car.printOut方法而相关。想象一下这个类比:你知道如何按命令做数学作业。您是一个名为FacelessVoid的对象,您有一个名为doHomework的方法。 doHomework采用Work类型的单个参数。在现实世界中,我会有一盒工作,我会把工作箱倒在你的桌子上。我在盒子上写的东西对你来说无关紧要,但是盒子的内容会被丢弃到你的桌子上,你可以随意调用它。

这正是您的代码中发生的事情:您有一个名为variable2的字符串,其内容被“转储”到variable1 printOut内。值得注意的是,字符串实际上并没有dumped进入您的方法,因此会复制引用。所以它是同一个对象,它只是被称为不同的东西。

答案 2 :(得分:1)

变量2中的引用将被简单地调用复制到variable2中。 variable2作为方法参数传递。 除此之外没有任何关系。 Variable2仅对main是本地的,variable1仅对printOut是本地的。 将variable1视为期望来自调用方法的值的函数参数。意思是你可以将任何字符串传递给printOut。

例如carObject.printOut("Toyota") 如您所见,我没有将变量传递给printOut,而是传递硬编码字符串

答案 3 :(得分:1)

variable2是内存中某个字符串的引用。 Java使用variable2中的值来找出字符串的位置。例如:

variable2                   memory location 1100
[1100]      ------>         "hello"

variable1也是对内存中某个字符串的引用。调用函数时,variable2中的值(在本例中为1100)放在variable1中。

variable1                   memory location 1100
[1100]      ------>         "hello"

因此函数可以使用variable1找到variable2引用的字符串,因为字符串的位置包含在两者中。或换句话说,它们都引用相同的字符串。

答案 4 :(得分:0)

在调用方法

时,Variable2值将移动到variable1

答案 5 :(得分:0)

它们与将variable2传递给printOut()方法完全相同。 variable1只是方法参数的名称。

答案 6 :(得分:0)

来自调用者或被调用者的变量名称无效。你可以有一个名为orange的变量参数,另一个helicopter也可以这样做。重要的是它们必须具有相同的类型(此处为String)。

无论两个变量的名称如何,调用者变量的内容都会传递给该方法。

答案 7 :(得分:0)

variable1实际上不是变量,它是将传递给方法的变量的名称。您将需要此名称,因为您在方法中使用它来进行某些操作。因此,当您传递variable2(现在确实是变量)时,您会在名为variable1的方法中看到它。希望这会有所帮助。

答案 8 :(得分:0)

在Java中,参数始终按值传递。但是,如果您传递一个对象,那么它指向原始对象引用,您可以修改原始对象。

答案 9 :(得分:0)

没有关系v1和v2。 当您从Hous类调用car.printOut()方法时,它会将v2作为值推送到堆栈。 car.printOut()方法将此值从堆栈中弹出到v1变量。因此,您可以使用任何名称。

此外,当您在printOut()更改v1的值时,v2将不会更改。

答案 10 :(得分:0)

其他人给出了很好的答案,但为了使你的词汇量合适,variable1被称为"formal parameter",而variable2是实际参数,也被称为"参数& #34;传递给方法printOut。在传递参数时,更容易意识到你只是在玩名字。在肠道层面,它只是在玩数据位置而不是按名称引用东西。