class b{
static int a=3;
}
1.a是公用的,还是私有的.
2.想问下,static 到底为什么有特权可以不生成对象就可以使用.
3.调用时要注意什么??
static int a=3;
}
1.a是公用的,还是私有的.
2.想问下,static 到底为什么有特权可以不生成对象就可以使用.
3.调用时要注意什么??
解决方案 »
- 我想编一个实现背景图片的程序,但是我编写的有错误,不知为何,请大家支个招!!!
- 在面试的时候,遇到一个自己以前没有看到过的Java的static用法,好像是一个初级问题,有知道的朋友帮忙解释一下。
- 怎样把java中生成的class文件打包成jar文件啊!
- java 往列表内读取文件夹
- java能不能定义一个定长的char数组?
- 学java已有几个月,现在想放弃了
- 求Together for Eclipse的keymaker,以前贴子的下载链接打不开
- 我想学JAVA,请指教
- 请问java 怎么将一个gif图片画在另一个上 然后存为一个新的gif? 有门路的也可
- 写java程序,中文打印出来是乱码,是怎么回事?请教大虾
- (在线等)字符串为什么写不到文件中去?
- 连接sqlserver2000的时候 出现Error establishing socket
2.好象static是在池中声明的;
3.注意父类和间的关系!(本人也在学习中,有错误的地方也请前辈们指出)
2.如1楼所讲基于JAVA机制.对于变量来讲,static关键字意味着在类初始化时就已经分配了内存空间.
3.类其他类中调用无须实例化此类,直接b.a就可以了.
如果b类中有方法被static,它不能调用非static的变量.
问题答案参看楼上
第2个问题,将会引起学术讨论不发表个人言论,个人觉得只是jvm行为无需特别关注。
调用时尽可能的使用类来调用
over
没有不生成对象就使用的特权,如
public static Test t;
。。
你在使用前必须对其进行初始化,否则会出现空指针异常。
public static Test t=new Test();是正确的。
再就是“静态成员变量被所有实例所共享”
这是最重要的,相当于单例模式一样,所以要注意并发的问题如
class TestSta{
public static int i= 0;
public static void main(String[] args){
TestSta t1=new Teststa();
TestSta t2=new Teststa();
t1.i++
System.out.println(t1.i);//打印1
t2.i++
System.out.println(t2.i);//打印2}
}
两个TestSta的实例共享了一个static的变量
1。答,a是java中默认的访问权限,即就是在该包中可以访问
2,答,至于为什么可以直接用对象.a来访问它,我个人认为是由于在分配内存时,处于全局变量和常量区域中,这样这个a就属于蕾类成员而不是对象成员,它在内存中有唯一一个内存地址,
3,答,这个就看你具体情况了,在c++中static分static const static,
2.好象static是在池中声明的;什么池?
第三个问题:用类调用或者用实例来调用(若:已创建了实例的话),都是一样的。编译时编译程序自动全部用同一条指令:putstatic来完成的。效率是一样的。
Statics (Objective 1.3)
q
Use static methods to implement behaviors that are not affected by the state of any instances.
q
Use static variables to hold data that is class specific as opposed to instance specific—there will be only one copy of a static variable.
q
All static members belong to the class, not to any instance.
q
A static method can't access an instance variable directly.
q
Use the dot operator to access static members, but remember that using a reference variable with the dot operator is really a syntax trick, and the compiler will substitute the class name for the reference variable, for instance:d.doStuff();becomes:Dog.doStuff();
q
static methods can't be overridden, but they can be redefined.
访问的时候是类名.静态名
b.a
有什么特权,这是规定好了的,就是可以实现全局变量的作用
3,要注意这个变量对于所有对象是公用的,也就是所有对象的引用指向一个内存空间,即static类型变量只有一个内存空间,并不为某个对象单独开辟空间。
再就是在继承的时候,关于static类型变量或者方法的在继承关系中的调用是按照引用的类型去调用的,并不是看引用所指向的对象的类型。例如:
class A
{
public static String s="dfdfdfd";}class B extends A
{ public static String s="sdfsdfsdf";
public static void main(String[] args)
{
A a = new B();
System.out.println(a.s);
}}这个时候应输入dfdfdfd也就是A类中定义的s变量。因为a引用的类型是A所以对于静态成员则根据类型邦定,调用A中的s,static 类型的方法在继承中也是这个道理