黑马程序员技术交流社区
标题:
关于静态访问和方法函数出了问题
[打印本页]
作者:
何明辉
时间:
2012-7-22 09:55
标题:
关于静态访问和方法函数出了问题
本帖最后由 何明辉 于 2012-7-22 14:32 编辑
class Person
{
String name="HeMingHui";
class Heart-----------1
{
void show1()------2
{
System.out.println("show1");
show2();
}
void run()
{
System.out.println("run");
}
}
void show2()-------3
{
System.out.println("show2");
run();
}
}
class PersonDemo
{
public static void main(String[] args)
{
new Person.Heart().show1();------4
new Person().new Heart().show1();----5
}
}
上面程序程序不能编译,为了说面问题特写出来
(1)若1内部类加了static后,则3也访问必须也为static,为什么了,我认为是非静态访问静态可以前面可以不加static啊
(2)方法找中函数调用3中写run()去调用内部类中的方法不对吗,这里应该怎么写,想在3中调用run();
(3)若内部类前加了static,也可以写5来调用show1()啊,怎么不行,我认为是对象去调用啊,内部类虽为静态,但内容却在堆里面存放啊
作者:
孙飞
时间:
2012-7-22 13:13
(1)若1内部类加了static后,则3也访问必须也为static,为什么了,我认为是非静态访问静态可以前面可以不加static啊
若1内部类静态后,那么它会在外部类一加载 的时候就加载,这时候方法还没有存在,你静态内部类的里面调用外部方法,那么就得在静态内部类存在的时候也存在 ,就得静态
(2)方法找中函数调用3中写run()去调用内部类中的方法不对吗,这里应该怎么写,想在3中调用run();
因为你的内部类不是静态的,要想调用 它内部的方法,就得new出一个它的对象,让对象 去调用,我把怎么写放在下面啊
。
(3)若内部类前加了static,也可以写5来调用show1()啊,怎么不行,我认为是对象去调用啊,内部类虽为静态,但内容却在堆里面存放啊
访问静态内部类的非静态成员的格式 是 new Outer.Inter().function()这是直接new出了一个内部类的对象来调用内部方法。new Person().new Heart().show1();这是先new一个外部类对象,调用内部类对象再调用 方法,对普通内部类来说,内部类的对象有一个隐式的引用指向创建它的外部类对象,但静态内部类没有,外部类一加载就有了静态内部类了,所以创建静态内部类对象不需要外部类对象,我感觉吧,静态对内部类的作用是整体的,它应该在静态区,没有在堆中。
class Person
{
String name="HeMingHui";
static class Heart
{
void show1()
{
System.out.println("show1");
show2();
}
void run()
{
System.out.println("run");
}
}
static void show2()
{
System.out.println("show2");
new Heart().run();
}
}
class PersonDemo1
{
public static void main(String[] args)
{
//new Person().new Heart().show1();
new Person.Heart().show1();
}
}
复制代码
作者:
何明辉
时间:
2012-7-22 14:33
feigecal 发表于 2012-7-22 13:13
(1)若1内部类加了static后,则3也访问必须也为static,为什么了,我认为是非静态访问静态可以前面可以不加 ...
谢谢,早上还有点模糊,现在弄懂了
作者:
魏-玉-彪
时间:
2012-7-22 20:00
研究一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2