java关键字static详解

来源:互联网 发布:win2008r2安装数据库 编辑:程序博客网 时间:2024/05/18 15:28


    static在英语中有静态变量和全局的意思.用来修饰成员变量和成员方法,也可以形成静态static代码块.被static修饰的成员变量和成员方法独立与该类的任何对象,也就是说,不依赖与认识对象实例,在程序中只会实例化一次.


  当类被加载时,虚拟机就能根据类名在运行时数据区的方法中找到它们.static对象可以在任何类对象创建之前访问,无需引用任何对象.用public和static修饰的变量本意上是全局变量,当声明类对象时,只会生成一个实例,多个对象共享这个实例.


    static变量也可以被private修饰,被private修饰的变量能在类的静态代码块或类的静态方法中访问,当然也能在类的非静态方法中访问,但是不能通过新建类的实例来访问他.这与java访问修饰符权限有关.




被static修饰的变量或方法称为静态变量或静态方法,可以通过如下的方式访问他:


类名.静态方法名(参数列表1,...参数列表n)


类名.静态变量 




静态变量




被static修饰的变量称为静态变量,而没有被static修饰的变量则称为实例变量,




静态变量与实例变量的区别:






静态变量在类被初始化的时候被自动加载,在整个程序运行期间JVM只会生成一个类变量的实例,多个类对象共享这个静态对象,而实例变量每new出一个类对象时都会在JVM对该实例变量做一个拷贝,不同类对象之间的实例变量在内存之间是不相等的.
静态变量的作用:
在多个类对象中共享变量
静态方法:


在类中被static修饰的方法被称为静态方法,静态方法能够被类自身访问和能够被被其他的类实例访问实例.


 
静态方法使用时注意事项:




静态方法方法中不能出现关键字this,super.不能直接访问类的成员变量和成员方法(未用static修饰的成员变量或方法).成员方法的执行过程栈帧的创建与退出的过程而静态方法是类的class文件被加载进虚拟机时将静态方法加载进方法区时被执行,如果静态方法中调用成员方法,此时由于虚拟机栈还未创建,所以静态方法中不能调用非静态方法和成员变量.
 
因为static独立于任何对象,所以staitc成员方法必须被实现,而不能被声明为抽象方法.




静态代码块:




用static修饰的代码块,称为静态代码块,当JVM加载类时,就会执行该方法.类中可能有多个static代码块,静态代码块的执行顺序与我们类中静态代码的声明顺序一致,这与将这多个代码块中的代码放入一个静态代码块中(保持代码与前面多个代码块的顺序一致即可)的效果一样.


例如public   class  Test
{
public  static  int  _i;
static
{
_i=1;
}
static 
{
_i=2; 
}
}
这与下面这段代码效果完全相同
public class Test
{
public  static  int  _i;
static  
{
_i=1;
_i=2;
}   
}




static  final 代表什么:




static  final来代表全局常量的意思


单变量被static final修饰时,表示这个变量在整个程序生命期间不可以被改变,并且可以直接访问.


而被 static  final  修饰的成员方法则不可以被继承,并且可以通过类名直接访问. 






静态方法和静态代码快的区别:






静态代码快是类一旦被虚拟机加载就会自动执行,而静态方法则要通过类名调用才会执行.






看别人博客的一段代码:
public  class    StaticTest
{


public  static  int  _i=10;   


static
{


int  _i=20;


}


public  static  void   main(String[]  args)
{


System.out.println(_i);


}


}




public  class    StaticTest
{


public  static  int  _i=10;   


static
{




  _i=20;




}
public  static  void   main(String[]  args)
{


System.out.println(_i);


}


}
0 0
原创粉丝点击