我们如何在函数外部使用参数变量而不将其存储到另一个变量中? 示例:如果我想通过用户输入读取值作为参数??
,则为SAYpublic class CC {
public int f(int a, int b) {
int d, c;
d = a;
c = b;
return a + b;
} // want to use a & b outside
public int q(int a, int b) {
return a + b; // re-initial-is- will delete the previous parameter value;
}
public int w() {
int p = a + b; // error:cannot access or resolve a & b into variables
return p;
}
public int e() {
int u = d + c; // works but this is not the solution
return u;
}
public static void main(String args[]) {
CC obj = new CC();
obj.f(3, 4);
obj.q(8, 9);
obj.w();
obj.e();
}
}
答案 0 :(得分:4)
我们如何在函数外部使用参数变量而不将其存储到另一个变量中?
这是不可能的。局部变量的范围仅限于声明它们的方法。所有局部变量都存储在该方法的堆栈帧中。当方法返回时,堆栈帧被销毁,因此所有局部变量和参数都将丢失。
框架用于存储数据和部分结果,以及 执行动态链接,返回方法的值和调度 异常。
每次调用方法时都会创建一个新帧。 框架是 无论如何,在方法调用完成时销毁 完成是正常的或突然的(它抛出未捕获的异常)。 帧是从Java虚拟机堆栈(第2.5.2节)中分配的 创建框架的线程。每个帧都有自己的本地数组 变量(第2.6.1节),它自己的操作数堆栈(第2.6.2节)和对它的引用 当前类的运行时常量池(第2.5.5节) 方法
话虽如此,似乎a
和b
应该是你班级的领域。然后通过将参数传递给构造函数或通过setter方法设置它们。这就是编写面向对象代码的方法。浏览Oracle tutorial on Classes。
例如,参加一个简单的课程:
class Operation {
private int a;
private int b;
public Operation(int a, int b) {
this.a = a; this.b = b;
}
public int sum() {
return a + b;
}
}
现在,您通过传递参数来创建此类的实例,稍后将在sum()
方法中使用该参数:
Operation operation = new Operation(4, 5);
System.out.println(operation.sum());
您可以沿此行修改课程。请为您的班级和变量选择一个更好的名称。还要遵循标准的Java命名约定。
答案 1 :(得分:0)
为a
和b
创建字段,并使用参数在f()
中初始化它们。
,例如:
public class CC{
private int a;
private int b;
private int d;
private int c;
public int f(int a,int b)
{
d=a;
c=b;
this.a = a;
this.b = b;
return a+b;
} //want to use a & b outside
public int q(int a, int b)
{
return a+b; //re-initial-is- will delete the previous parameter value;
}
public int w(){
int p=a+b; //error:cannot access or resolve a & b into variables
return p;
}
public int e(){
int u=d+c; //works but this is not the solution
return u;
}
public static void main(String args[]){
CC obj=new CC();
System.out.println(obj.f(3,4));
System.out.println(obj.q(8,9));
System.out.println(obj.w());
System.out.println(obj.e());
}
}
这会将以下内容打印到控制台:
7
17
7
7
但是,字段的使用取决于您要执行的操作。
例如,如果您想要使用 a 和 b 一次(用于计算 a + b ) ,然后使用新值重置它们,并且能够同时使用旧值和新值,您需要执行以下操作:
package test;
public class CC {
private int a;
private int b;
private int d;
private int c;
public int f(int initialA, int initialB) {
this.a = initialA;
this.b = initialB;
return a+b;
} //want to use a & b outside
public int q(int resetA, int resetB) {
// Move values for a + b to other variables for re-use
this.c = a;
this.d = b;
this.a = resetA;
this.b = resetB;
return a+b; //re-initial-is- will delete the previous parameter value;
}
public int w() {
// Use the initial values
int p = c + d;
return p;
}
public int e() {
// Use the reset values
int u = a + b; //works but this is not the solution
return u;
}
public static void main(String args[]){
CC obj = new CC();
System.out.println(obj.f(3,4));
System.out.println(obj.q(8,9));
System.out.println(obj.w());
System.out.println(obj.e());
}
}
这会将以下内容打印到控制台:
7
17
7
17