本帖最后由 黄玉昆 于 2013-2-10 19:00 编辑
我们在学习java的最初就接触到了static这个修饰main方法的修饰符,那么static在java中有什么特点和作用呢?下面是对static的几点总结: 一、总体来说static有这么几个特点: 1、随类的加载而加载,在类中生命周期最长;类存在,static修饰的成员就存在,否则消亡。 2、优先于对象而存在,在对象建立之前,就已经初始化了。 3、可被所有对象共享,因在类中是惟一的,属于此类,可以被此类对象共享。 4、可直接被类名调用,用类名.方法名调用。 二、static的用法:1、修饰成员:包括成员变量和成员方法,当成员被static修饰后,就多了一种调用方式,即可以被对象和类名调用 需要注意的一点:static绝对不能修饰局部变量。为什么呢?
局部变量的作用域就是它所在的方法或代码块中,而static的变量刚是定义在类中方法体外,是作为整个类共同使用的,它从类加载开始就存在,而局部变量在它所在的方法或代码块结束后就要被回收的。所以是不能修饰局部变量的
1)静态常量:例如:在Math类中定义了一个静态常量PI
- public class Math
- {
- ...
- public static final double PI = 3.14159265358979323846;//final将PI设置为不可再定义的常量
- ...
- }
如果省略了static,PI就变成了一个实例常量,那么,每一个Math对象就都有自己的一个PI拷贝了,这样的话,对内存也是一种占用。
2)静态变量:如果将变量定义为static,那么每个类中只有这样一个变量。例如:
- class Student
- {
- private int id;
- private static int nextId = 1;//共享一个nextId
- //获取id的访问器
- public int getId()
- {
- return id;
- }
- public void setId()
- {
- id = nextId;
- nextId++;
- }
- }
每个学生都有自己的一个id号,但这个Student的所有对象都共享一个nextId,即使不存在对象,也仍存在nextId,因为它是属于类的,而不属于任何独立的对象,所以它是随着类的加载而加载的,随着类的消亡而消亡的。
3)静态方法: 静态方法是一种不向对象进行操作的方法。当方法被static修饰时,是用类名.方法名的方式使用的,当然也可用对象名.方法名,但这样会让别人误以为此方法是非静态的。但静态方法有一点需要注意的是:静态方法只能访问静态成员,因此静态方法也就不能定义this和super等关键字了。 那么在什么时候用到静态方法呢?第一、当一个方法不需要访问对象是,其中所需的参数都是通过显示参数提供的。比如说Math.sqrt(double n)。第二、一个方法只需要访问累的静态变量时,如Person.getCountry();
- private static String country = "CN";//因为国家是共有的,共享
- public static void getCountry()
- {
- return country;
- }
2、静态的应用:
当每个应用程序都有共同之处,可将其封装,提高其复用性。需要注意的是:a.对象时用于封装数据的;b.对数据的操作方法,若没用到方法中特有的数据,则无需创建对象而占用多余的内存。 3、静态代码块 特点:a.随着类的加载而执行,且优先于主函数;b.只执行一次,类再创建对象,则不再执行,已经存在于内存中。 格式:
由于字数限制,下面是代码截图,具体代码请看:http://blog.csdn.net/shengfeixiang/article/details/8567254
|