Java中的按值传递
我是java新手,目前正在尝试学习传递值是如何工作的。我有一个名为Test的主类和一个名为TestMax的第二个类。我试图在下面的代码中实现的是在主类中为TestMax类中的2个参数I和j设置值,并通过传递我刚才传递的参数值来调用方法max 控制台的输出应如下所示: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;
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();