A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

炀bin

中级黑马

  • 黑马币:64

  • 帖子:38

  • 精华:0

© 炀bin 中级黑马   /  2014-9-5 18:41  /  4073 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
外部类静态方法可以访问静态内部类,但静态内部类里的成员可以是非静态,为什么行得通呢?

        Outer o=new Outer();
        o.method();

class Outer
{
    public static void method(){   
        Inner inner = new Inner();
        System.out.println(inner.age);
        inner.getInnerName();
    }
    static class Inner
    {
        int age;
        public void getInnerName(){
            System.out.println(age);
        }
    }
}

最佳答案

查看完整内容

静态类的内部可以定义非静态成员吧,如果反过来,非静态的类的内部是不能定义静态成员的

16 个回复

正序浏览
静态内部类里面的方法可以使静态的也可以是非静态的,如果内部类中有static修饰的,则内部类必须是静态的,static修饰的内部类已经随着外部类的加载而加载了,也就是说静态内部类中的方法也也已经加载进方法区了。说的可能不是很详细,还有疑问可以提出
回复 使用道具 举报
bjznh 中级黑马 2014-12-16 13:43:17
15#
学习中啊,哈哈
回复 使用道具 举报
内部类的static知识方便调用外部类的成员变量和方法,而内部类是一个类,当然可以访问静态和非静态了。但匿名内部类又不一样了,没被static修饰的匿名内部类不能访问非静态变量。
回复 使用道具 举报
因为Inner是个类,而不是你说的方法,一个类当然可以访问非静态了,这里面的static相当于可以不用定义外部类的对象来调用它,可以直接用类名new Outer.Inner()来创建内部类对象。
回复 使用道具 举报
学习了,谢谢
回复 使用道具 举报
静态内部类,就相当于是单独提出来的类(外部类),不在是内部类了好么
回复 使用道具 举报
同学你好  面向对象的一个重要特征封装 封装的意义就是你只要知道它能做什么事就可以了 具体怎么做 你不用管
外部类你就把他当一个类 这个类有成员变量 成员函数
内部类你可以理解为他就是一个成员函数 只是这个成员函数内容比较多 封装成了类的形式 它里面定义静态,非静态,调用了什么都跟外部类没关系 外部类只要知道这个内部类能实现什么功能就行 具体怎么实现不需要知道
回复 使用道具 举报
静态类意思是方法是静态,可以通过类名.直接调用,不用再堆内存中开辟空间;
成员变量设置成静态非静态与类没有关系啊
回复 使用道具 举报
2100 初级黑马 2014-9-15 06:58:37
8#
静态内部类是随类一起加载进内存的,也就是没有创建对象之前就可以使用,而其它的一些方法、内部类是需要创建对象才能使用的,希望能够帮到你
回复 使用道具 举报
好像记得静态内部类可以直接当外部类使用的
回复 使用道具 举报
这个与静态内部类成员是不是静态无关,只要这个类是静态内部类就可以了,因为你首先是在访问这个类
回复 使用道具 举报
静态内部了说白了其属性是外部类的属性,只是出于内部类的位置上。
回复 使用道具 举报
二楼的正解
回复 使用道具 举报
外部类的静态方法只能调用静态的成员,这个是肯定的,不用多讲了吧
内部类你现在把他当成一个成员,那么给他加静态的作用就是可以让类名打点调用,如果成员中有静态方法那么定义静态也可以让成员方法调用,
内部类也是一个类,外部是不是静态和他没有什么关系,一个类中是可以定义静态成员和非静态成员的

如果你有学过其他语言可能会不一样那我觉得你需要单独记忆这个东西了
回复 使用道具 举报
Seven` 发表于 2014-9-5 20:46
静态类的内部可以定义非静态成员吧,如果反过来,非静态的类的内部是不能定义静态成员的 ...

补充下,我说的是内部类
回复 使用道具 举报
静态类的内部可以定义非静态成员吧,如果反过来,非静态的类的内部是不能定义静态成员的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马