若不是因为你

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

开始进入android程序开发,还没写过java程序,所以只能一点一点补基础了,没有什么顺序,学到哪里记到哪里吧。好记性不如烂笔头嘛

static修饰符可以用来修饰类的成员变量,成员方法,代码块。

修饰成员变量和成员方法,可以直接通过类名来访问。

修饰程序代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码。

被static所修饰的成员变量和成员方法表明归某个类所有,它不依赖于类的特定实例,被类的所有实例共享。

只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区定位到它们。

 

static变量

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

1,静态变量在内存中只有一个拷贝,运行时Java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。可以直接通过类名访问静态变量

2,对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。

 

Java语言不支持不属于任何类的全局变量,静态变量提供了这一功能。它有如下两个作用:

1,能被类的所有实例共享,可作为实例之间进行交流的共享数据。

2,如果类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量类型,从而节省内存空间。

 

 

static方法

成员方法分为静态方法和实例方法。用static修饰的方法叫静态方法,或类方法。静态方法也和静态变量一样,不需要创建类的实例,可以直接通过类名访问。

1,静态方法可访问的内容,因为静态方法不需要通过它所属的类的任何实例就会被调用,因此在静态方法中不能使用this关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法。

注意:Java虚拟机在执行静态方法时,它能顺利地从类的方法区找到静态变量,而对于所属类的实例变量,Java虚拟机无从判断到底属于哪个对象,Java虚拟机只会在包含类信息的方法区内寻找该量,而不会到存放所有对象的堆区去寻找它,所有Java虚拟机无法找到实例变量。

静态方法中也不能使用super关键字。

2,实例方法可访问的内容,如果一个方法没有用static修饰,那么它就是实例方法。在实例方法中可以直接访问所属类的静态变量、静态方法、实例变量和实例方法。

3,静态方法必须被实现,静态方法用来表示某个类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。既然如此,当前类必须为静态方法提供实现。一个静态的方法不能被定义成抽象方法。static和abstract修饰符是一对“冤家”永远不能一起使用。

4,作为程序入口的main()方法是静态方法,把main()方法定义为静态方法,可以使得Java虚拟机只要加载了main()方法所属的类,就能执行main()方法,而无须先创建这个类的实例。

5,方法的字节码都位于方法区,Java编译器把Java方法的源程序代码编译成二进制的编码,称为字节码。Java虚拟机的解析器能够解析这样字节码。

 

 

static代码块

类中可以包含静态代码块,它不存在于任何方法体中。在Java虚拟机加载类时会执行这些静态代码块。如果类中包含多个静态块,那么Java虚拟机将按照它们在类中出现的顺序依次执行它们,每个静态代码块只会被执行一次。

类的构造方法用于初始化类的实例,而类的静态代码块则可用于初始化类,给类的静态变量赋初始化值。

静态代码块与静态方法一样,也不能直接访问类的实例变量和实例方法,而必须通过实例的引用来访问它们。

 

 

 

 

 

 

 

 

 

 

 

posted on 2012-02-16 21:02  若不是因为你  阅读(402)  评论(0编辑  收藏  举报