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

来源:百度知道 编辑:UC知道 时间:2024/05/10 09:31:12
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();将这个类实例化后,为什么还正确?错在哪里呢?

其实用static定义的类一般是抽象类,也就是类中给出方法或者参数,但是并不实现方法的类,一般被用作继承,这样的类自然没有必要初始化。

但是现在楼主定义的是内类,这里的static完全可以不要,如果用上static,则表明当前内类在全局中只存在一个实例,这时候的static作用是申请全局变量而已,并不是不能实例化,希望刚才说的对楼主有所帮助:)

不能实例化是加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.

这种情况叫做静态内部类,用于内部类不需要引用外围类对象的情况下。