黑马程序员技术交流社区
标题:
静态主函数到底是怎么访问非静态类的?
[打印本页]
作者:
悟佛修道
时间:
2013-5-18 17:13
标题:
静态主函数到底是怎么访问非静态类的?
本帖最后由 悟佛修道 于 2013-5-19 20:12 编辑
在毕老师讲到内部类的时候,有段是这样说的,为了主函数能直接访问内部类,创建内部类的对象 所以给内部类加上静态,因为主函数是静态的。
对啊主函数是静态的啊 静态不是只能访问静态吗?那主函数是怎么去访问外部类的呢?外部类根本就不是静态 ,也不可能是静态啊?疑惑了,求解!!!
作者:
韩秀山
时间:
2013-5-18 17:19
晕,怎么又是main方法的问题啊,这是Java提供好的。main在以后的开发中是会用于测试用。具体是怎么不同的学java的估计没几个懂的。你看一下java深层技术相关的书籍吧。可能会给你有些帮助。。。。
作者:
神之梦
时间:
2013-5-18 17:47
我记得老师说静态函数不能调用静态成员(包括成员变量和成员函数)。
而通过验证函数可以通过创建对象来调用其他类中的非静态方法。至于楼主所说的外部类,俺就搞不懂了。。。
作者:
赵利斌
时间:
2013-5-18 18:05
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]+"]");
}
}
}
}
作者:
殇_心。
时间:
2013-5-18 21:18
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
作者:
悟佛修道
时间:
2013-5-18 21:51
赵利斌 发表于 2013-5-18 18:05
public class Demo
{
public static void main(String[] args)
假如单独一个类里面吧,它没有任何内部类。那么主函数不是静态的吗?静态不是只是能访问静态吗,为什么可以直接访问非静态的类?
就比如class demo这个类里面没有内部类
然后主函数不是可以直接创建它的对象嘛,再创建它对象的时候是不是就是在访问这个类????如果答案是的话,我想问的就是,这个类是非静态,而主函数都是静态的,为什么可以直接访问?
作者:
张世威
时间:
2013-5-18 23:37
1、成员内部类和外部类的成员是一个级别的,所有有相同的特性
2、所谓的静态访问静态,都是一个类的成员之间的事儿,称为成员级别;
而主函数访问本类或者其他类,则是类与类之间的事儿,称为类级别。
3、说到底,弄清楚了它们的等级结构之后,就知道了它们是怎么分工与合作的 。
一般级别:项目级-包级-类级-成员级。。
就像 国家-省-市。。。。。。
作者:
cowthan
时间:
2013-5-18 23:50
这个问题是值得疑惑,答案如下:
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、但是编译时这里的静态方法能看见其他外部类的定义
总结:
希望能解答楼主的疑惑,因为我实在不知道怎么能解释的更清楚了
作者:
8047107
时间:
2013-5-19 17:07
楼主看到哪里了
作者:
悟佛修道
时间:
2013-5-19 20:12
先谢谢大家了,还是比较疑惑,我还是再继续学习慢慢思考吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2