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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 悟佛修道 于 2013-5-19 20:12 编辑

在毕老师讲到内部类的时候,有段是这样说的,为了主函数能直接访问内部类,创建内部类的对象 所以给内部类加上静态,因为主函数是静态的。
对啊主函数是静态的啊 静态不是只能访问静态吗?那主函数是怎么去访问外部类的呢?外部类根本就不是静态 ,也不可能是静态啊?疑惑了,求解!!!

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

10 个回复

倒序浏览
晕,怎么又是main方法的问题啊,这是Java提供好的。main在以后的开发中是会用于测试用。具体是怎么不同的学java的估计没几个懂的。你看一下java深层技术相关的书籍吧。可能会给你有些帮助。。。。
回复 使用道具 举报
我记得老师说静态函数不能调用静态成员(包括成员变量和成员函数)。
而通过验证函数可以通过创建对象来调用其他类中的非静态方法。至于楼主所说的外部类,俺就搞不懂了。。。
回复 使用道具 举报
public class Demo
{
    public static void main(String[] args)
    {
             int[] arr = {5,1,6,4,2,8,9};
             
             
             
             //主函数在访问外部类的成员时,可以建立外部类中的内部类的对象,这样就可以访问了
             //格式:外部类.内部类              对象     =外部类对象.内部类对象;然后就可以调用对象的方法了了
             //比如格式Demo.neib Nei=new Demo().new neib();
             
             
             Demo.Neib nei=new Demo().new Neib();
             nei.printArray(arr);

           
    }
    class Neib
    {
            public  void printArray(int[] arr)
            {
                    System.out.print("[");
                    for(int x=0;x<arr.length;x++)
                    {
                         if(x!=arr.length-1)
                               System.out.print(arr[x]+",");
                         else
                               System.out.println(arr[x]+"]");
                    }
            }          
    }
}

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
赵利斌 发表于 2013-5-18 18:05
public class Demo
{
    public static void main(String[] args)

假如单独一个类里面吧,它没有任何内部类。那么主函数不是静态的吗?静态不是只是能访问静态吗,为什么可以直接访问非静态的类?
就比如class demo这个类里面没有内部类
然后主函数不是可以直接创建它的对象嘛,再创建它对象的时候是不是就是在访问这个类????如果答案是的话,我想问的就是,这个类是非静态,而主函数都是静态的,为什么可以直接访问?
回复 使用道具 举报
1、成员内部类和外部类的成员是一个级别的,所有有相同的特性
2、所谓的静态访问静态,都是一个类的成员之间的事儿,称为成员级别;
而主函数访问本类或者其他类,则是类与类之间的事儿,称为类级别。
3、说到底,弄清楚了它们的等级结构之后,就知道了它们是怎么分工与合作的 。
一般级别:项目级-包级-类级-成员级。。
就像 国家-省-市。。。。。。
回复 使用道具 举报
这个问题是值得疑惑,答案如下:
1、main函数能直接new外部类AAA的对象, new AAA()
2、main函数能直接new外部类AAA中的内部类BBB的对象:  new AAA.BBB()
3、但是对于main函数所处的那个类XXX,里面有个内部类YYY,main函数可以 new XXX(),但是不能直接new XXX.YYY(),这时有两种解决方法:
(1) 将YYY做成静态的,这样同样是静态的main就能看见他
(2) 通过XXX的对象访问其内部类:XXX x = new XXX();   new x.YYY();
这样理解:
1、首先这是个编译时刻的问题,编译时静态方法看不见其所属类中的所有非静态实体,包括但不限于内部类,普通方法,普通成员
2、但是编译时这里的静态方法能看见其他外部类的定义
总结:
希望能解答楼主的疑惑,因为我实在不知道怎么能解释的更清楚了
回复 使用道具 举报
楼主看到哪里了
回复 使用道具 举报
先谢谢大家了,还是比较疑惑,我还是再继续学习慢慢思考吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马