Java中的按值传递

Java中的按值传递,java,Java,我是java新手,目前正在尝试学习传递值是如何工作的。我有一个名为Test的主类和一个名为TestMax的第二个类。我试图在下面的代码中实现的是在主类中为TestMax类中的2个参数I和j设置值,并通过传递我刚才传递的参数值来调用方法max 控制台的输出应如下所示: The maximum between 2 and 10 is 10. 我知道我将值传递给int res=maxi,j方法的方式有问题,但我花了2个小时来弄清楚为什么这不起作用,我弄不明白 package testproject;

我是java新手,目前正在尝试学习传递值是如何工作的。我有一个名为Test的主类和一个名为TestMax的第二个类。我试图在下面的代码中实现的是在主类中为TestMax类中的2个参数I和j设置值,并通过传递我刚才传递的参数值来调用方法max

控制台的输出应如下所示:

The maximum between 2 and 10 is 10.
我知道我将值传递给int res=maxi,j方法的方式有问题,但我花了2个小时来弄清楚为什么这不起作用,我弄不明白

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:

这一行:

int res = max(i,j);
没有意义:max、i和j都没有在该范围内声明。你的编译器应该拒绝这个

你一定是想写:

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

这与按值传递与按引用传递无关。问题在于这行代码:

int res = max(i,j);
值i和j超出范围,max不在当前类中,因此需要使用getter访问值并通过类引用方法,如下所示:

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

您还可以更改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类,则需要创建一个类扩展异常,以便在向i和j赋值之前,如果有人调用max方法,您可以抛出它。另一种避免这种情况的方法是构建一个构造函数,并在那里得到i和j

在上面的一行中,max或参数i和j均未在该范围内声明。所以这是一个编译错误

你应该这样写:


int res=TestMax.maxpass.getI,pass.getJ

你忘了提到运行程序时会发生什么。有编译器错误吗?例外情况?没有输出?我这样问是因为仔细阅读编译器错误通常会给你一个错误的提示。
int res = max();