2012-01-12 35 views
0

例如,当,范围重载方法

class ClassOne{ 

int y = 3 
int x = 2 

void foo(){ 
--y; 
} 
void bar(){ 
y--; 
} 
void tesla(){ 
int y = 10; 
} 
} 

据我了解,方法将改变以这种方式类变量:

  1. foo()不会做任何事情在任何变量
  2. bar()将使var减1,因此y=2
  3. tesla()将创建专用或受保护的变异只能在这个tesla()方法内访问。

我不确定第三个,请评论,我理解了吗?

+1

'foo()'和'bar()'对y有同样的效果,而'tesla'有它自己的局部变量。 – 2012-01-12 11:16:51

+1

不要将成员*字段*与*局部变量*混淆的一个好理由。他们有不同的名字(以及不同的范围) – 2012-01-12 11:19:13

回答

3

foobar都将使对象y减1,从而达到相同的效果。 tesla将为该方法创建一个局部变量y。您可能会收到警告。

+0

--y和y--有什么区别?当我用--y和y - 时? – 2012-01-12 11:18:37

+1

区别在于执行顺序。 '--y'首先降低,然后评估'y',然后'' - 先评估y然后减小。我的情况并不重要,但是,当调用像“DoSomething( - y)”这样的函数时,它确实很重要。这会减小y并将减小的值传递给'DoSomething'。调用'DoSomething(y - )'调用具有y值的'DoSomething',然后减少y。 – 2012-01-12 11:21:19

+1

不同的是,当你在express.i.e的RHS中使用它时。如果y是5,则k = y--;将k设置为5并且y将变为4,同时k = -y;将k设为4,将y设为4.请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html – 2012-01-12 11:22:54

0

是的,没错。但是给一个局部变量和成员变量同名是你永远不应该做的事 - 它只是让你的代码太混乱。

+1

我的意思是说,你对第3点是对的。当然,第1点是错误的 - 'foo()'会减少'y',就像'bar() '确实。 – 2012-01-12 11:18:30