0

我们如何在函数外部使用参数变量而不将其存储到另一个变量中?示例:如果我想通过用户输入读取值作为参数?

public 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();
    }

}
4

2 回答 2

4

我们如何在函数外部使用参数变量而不将其存储到另一个变量中?

这是不可能的。局部变量的范围仅限于声明它们的方法。所有局部变量都存储在该方法的堆栈帧中。当方法返回时,栈帧被销毁,因此所有的局部变量和参数都丢失了。

引用JVM 规范 - 框架

框架用于存储数据和部分结果,以及执行动态链接、方法返回值和调度异常。

每次调用方法时都会创建一个新框架。框架在其方法调用完成时被销毁,无论该完成是正常的还是突然的(它会引发未捕获的异常)。帧是从创建帧的线程的 Java 虚拟机堆栈(第 2.5.2 节)分配的。每个帧都有自己的局部变量数组(第 2.6.1 节)、自己的操作数堆栈(第 2.6.2 节)以及对当前方法类的运行时常量池的引用(第 2.5.5 节) .


话虽如此,它似乎a并且b应该真的是你班级的领域。然后通过将参数传递给构造函数或设置方法来设置它们。这就是您编写面向对象代码的方式。阅读有关 Classes的Oracle 教程。

例如,参加一个简单的课程:

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 命名约定。

于 2013-09-25T16:01:15.303 回答
0

为和创建字段,并使用参数对其进行初始化。abf()

例如,像这样:

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

但是,字段的使用应取决于您要执行的操作。

例如,如果您想使用ab一次(用于计算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
于 2013-09-25T16:11:59.697 回答