本帖最后由 马州州 于 2012-7-31 20:50 编辑
public class TestInner {
public static void main(String[] args) { // 这里为什么能访问Inner1的私有构造器和私有方法 Inner1 inner1 = new Inner1(); inner1.test(); // 还能访问Inner1的私有成员变量 System.out.println(inner1.num);
}
public static class Inner1 { //私有的 private int num = 5; //私有的 private Inner1() { } //私有的 private void test() { System.out.println("test"); } }
public static class Inner2 { public Inner2() { // 这里为什么能访问Inner1的私有构造器和私有方法 Inner1 inner1 = new Inner1(); inner1.test(); // 还能访问Inner1的私有成员变量 System.out.println(inner1.num); } } }
楼主看红色的static,你把类修饰成静态的,毕老师在视频中讲过,静态是可以直接调用静态的,如果你修饰类的static去掉,就不能引用了
老毕主要讲的是静态在类中的修饰作用,静态直接修饰类的话这个类中的变量,方法都是可以直接被调用的,因为随着类的加载都已经加载进方法区了
因为你用静态去修饰,就算私有了也是在方法区里面被共享的
附上老毕讲的static的知识点
static特点:
1,随着类的加载而加载。
也就说:静态会随着类的消失而消失。说明它的生命周期最长。 2,优先于的对象存在
明确一点:静态是先存在。对象是后存在的。 3,被所有对象所共享
4,可以直接被类名所调用。 实例变量和类变量的区别:
1,存放位置。
类变量随着类的加载而存在于方法区中。
实例变量随着对象的建立而存在于堆内存中。
2,生命周期:
类变量生命周期最长,随着类的消失而消失。
实例变量生命周期随着对象的消失而消失。
静态使用注意事项:
1,静态方法只能访问静态成员。
非静态方法既可以访问静态也可以访问非静态。
2,静态方法中不可以定义this,super关键字。
因为静态优先于对象存在。所以静态方法中不可以出现this。
3,主函数是静态的。
|