关于java中static的问题,请高手指教

publicclassgradeBookTest{staticclassgradeBook{publicvoidprint(){System.out.println("h... public class gradeBookTest{
static class gradeBook{
public void print(){
System.out.println("hi");
}
}
public static void main(String[]args){
gradeBook a=new gradeBook();
a.print();

}
}
为什么这个程序可以执行?在类前加static不就是说这个类是静态的,不能实例化吗?可gradeBook a=new gradeBook();将这个类实例化后,为什么还正确?错在哪里呢?
展开
 我来答
Five00
2008-02-28 · TA获得超过206个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:193万
展开全部
其实用static定义的类一般是抽象类,也就是类中给出方法或者参数,但是并不实现方法的类,一般被用作继承,这样的类自然没有必要初始化。

但是现在楼主定义的是内类,这里的static完全可以不要,如果用上static,则表明当前内类在全局中只存在一个实例,这时候的static作用是申请全局变量而已,并不是不能实例化,希望刚才说的对楼主有所帮助:)
廖北伯
2012-07-07 · TA获得超过526个赞
知道小有建树答主
回答量:375
采纳率:66%
帮助的人:287万
展开全部
不能实例化是加abstract, 与static无关.
内部类才有加不加static的问题.
单纯的内部类应加static.
内部类若不加static,就会额外增添一个隐藏的栏位,它在new的时候会指向外包的object.

举例来说:
class A {
public int x;
class B {
B() { x++; }
}
}
class Test {
public static void main(String[] _) {
A a1=new A(); a1.x=2;
A a2=new A(); a2.x=5;
A.B b1=a1.new B();
A.B b2=a2.new B();
System.out.println(a1.x+", "+a2.x) ;
}
}
执行时会印出3, 6.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2008-02-28
展开全部
这种情况叫做静态内部类,用于内部类不需要引用外围类对象的情况下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式