在Java中传递值

时间:2012-09-23 17:32:28

标签: java

我是java的新手,我目前正在尝试了解pass by value的工作原理。我有一个名为Test的主类和一个名为TestMax的第二个类。我在下面的代码中尝试实现的是在类TestMax中设置2个参数i和j的主类中的值,并通过传递我刚刚传递的参数值来调用方法max()先前。

控制台的输出应该是这样的:

The maximum between 2 and 10 is 10.

我知道将值传递给方法(int res = max(i,j)的方式有问题,但我花了最后2小时才弄清楚为什么这不起作用,我无法弄明白。< / p>

package testproject;
public class Test {
    /** Main method */
    public static void main(String[] args) {
        TestMax pass = new TestMax();
        pass.setI(2);
        pass.setJ(10);
        int res = max(i,j);
        System.out.println("The maximum between " + pass.getI() +
                " and " + pass.getJ() + " is " + res);
    }
}

二级TestMax:

package testproject;

public class TestMax {

    int i ;
    int j ;

public static int max(int num1, int num2) {

    int result;
    if (num1 > num2)
       result = num1;
    else
       result = num2;

    return result;

}

//Getters & Setters
public void setJ(int j) {
    this.j = j;
}

public int getJ() {
    return j;
}

public void setI(int i) {
    this.i = i;
}

public int getI() {
    return i;
}

4 个答案:

答案 0 :(得分:4)

这与传值和传递引用无关。问题是这行代码:

int res = max(i,j);

ij超出范围,max()不在您当前的类中,因此您需要使用getter来访问值并通过上课,像这样:

int res = TestMax.max(pass.getI(), pass.getJ());

答案 1 :(得分:2)

这一行:

int res = max(i,j);

没有意义:在该范围内未声明maxij。你的编译器应该拒绝这个。

你一定要写:

int res = TestMax.max(pass.getI(), pass.getJ());

答案 2 :(得分:1)

int res = max(i,j);

在上面一行中,max()i and j参数都没有在该范围内声明所以它是编译错误。

你应该把它写成:

int res = TestMax.max(pass.getI(), pass.getJ());

答案 3 :(得分:0)

您还可以更改max方法,使其不再是静态的,而是使用变量i和j作为输入,如下面的代码所示:

 ...

    public int max() {
        int result;
        if (i > j)
           result = i;
        else
           result = j;

        return result;
    }

...

现在您需要省略main方法中以下行中的参数:

int res = max(i,j);

更改为:

int res = max();

但是,如果以这种方式更改TestMax类,则需要创建一个扩展Exception的类,以便在将值分配给i和j之前,如果有人调用max()方法,则可以抛出它。另一种避免这种情况的方法是构建一个构造函数并在那里得到i和j。