为什么运行的结果是这样的?
package com.qijian;
public class InnerClass {
static private int k = 5;
private void d() {
System.out.println( "java ");
k--;
System.out.println(k);
}
class inner {
void f(int k) {
d();
System.out.println(k);
}
}
public static void main(String[] args) {
InnerClass j = new InnerClass();
InnerClass.inner i = j.new inner();
i.f(k);
InnerClass.inner a = j.new inner();
a.f(k);
}
}
运行的结果是
java
4
5
java
3
4
为什他没有公用那个K,内部类与外部类没有公用K,K结果不是想象的4,3,2,1
------解决方案--------------------你在进行
InnerClass.inner i = j.new inner();
i.f(k);
时,读到K的值是5,让将这个值传到d()中,进行打印“Java”,所以输出“Java”;
再--, 所以输出“4”;
调用d()结束返回到f(),打印K的值,注意这里还是已开始读进的5,所以输出5;
进行
InnerClass.inner a = j.new inner();
a.f(k);
与上面过程类似。
------解决方案--------------------怎么样都不会是4321
至于你的问题
是因为void f(int k)方法里面局部的k
把外面的static 的k“屏蔽”掉了
因为前者的作用域小
你换一个名字就可以达到你的预期了
------解决方案--------------------换句话说,在
void f(int k) {
d();
System.out.println(k);
}
里,System.out.println(k);调用的k是在void f(int k)中定义的k,而不是static private int k = 5。局部变量优先原则。
你可是把System.out.println(k);和void f(int k)中的“k”换成字幕“m”在运行一下,结果是一样的。