我目前正在参加CSE的入门课程,并从班级的某些材料中得到了一个问题。在其中一张幻灯片中,教授定义了这种方法:
public int myMethod()
{
int retval, itemp = 100;
retval = itemp;
{
int retval, itemp = 75;
retval = itemp;
}
return retval;
}
从教授的说法来看,retval返回/保持值为100,但是当我打开Eclipse / Command行并编写方法时,它就无法编译。它一直说retval被宣布两次,因此不会编译该程序。对这里出了什么问题的任何指导?另外,“retval = itemp”的重点是什么? ?它们都被初始化为相同的值,那么该行的目的是什么?
答案 0 :(得分:1)
Eclipse / Command行并编写了方法,它不会编译。它一直说retval被宣布两次,因此不会编译该程序。
更好的可能就是这样的代码:
public class Foo {
int retval, itemp = 100;
public static void main(String[] args) {
Foo foo = new Foo();
System.out.println(foo.myMethod());
}
public int myMethod() {
retval = itemp;
{
int retval, itemp = 75;
retval = itemp;
}
return retval;
}
}
另外,“retval = itemp”的重点是什么? ?
这会将retVal变量设置为保存值。
它们都被初始化为相同的值,那么这条线的目的是什么?
不,他们不是。 itemp在两个位置保持不同的值。
答案 1 :(得分:1)
这不能编译,因为您无法在identifier
中两次声明具有相同same scope
的变量。
可以做的是重新声明给定范围内的现有变量:
class MyClass {
private int myVar = 1;
public void redeclare() {
// ...
int myVar = 2;
System.out.println(myVar);
// ...
}
}
这是有效的,因为myVar在visible
的范围内是redeclare()
但未在其中声明!
{}
不会创建一个全新的范围,因此您的老师想要做的就是失败。
此外:
int retval, itemp = 100;
retval = itemp;
此处第一行声明retval 和 itemp ,但仅初始化 itemp,因此retval未初始化。这就是第二行为其分配itemp值的原因。但由于这些是原始值,它将复制itemp的值并将其放在堆栈上,因此现在您有2个不同的值。改变一个不会改变另一个。
对教授没有冒犯。但是,如果我是你,我会放弃那些幻灯片并拿一本关于Java的书(例如Core Java或Thinking in Java)以及CS书的一些介绍(因为这是本课程的目标吗?),如“结构和对计算机程序的解释“。