一.静态static
在介绍静态变量、常量和方法之前首先需要介绍static关键字,因为由static修饰的变量、常量和方法被称作静态变量、常量和方法。
有时在处理问题时,会需要两个类在同一个内存区域共享一个数据。例如,在球类中使用PI这个常量,可能除了本类需要这个常量之外,在另外一个圆类中也需要使用这个常量。这时没有必要在两个类中同时创建PI这个常量,因为这样系统会将这两个不在同一个类中定义的常量分配到不同的内存空间中。为了解决这个问题,可以将这个常量设置为静态的。
如图:
被声明为static的变量、常量和方法被称作静态成员。静态成员是属于类所有的,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员。
语法格式为: 类名.静态类成员
注意:虽然静态成员也可以使用“对象.静态成员”的形式进行调用,但这样的形式通常不被鼓励使用,因为这样容易混淆静态成员和非静态成员。
静态数据与静态方法的作用通常是为了提供共享数据或方法,如数据计算公式等,一static声明并实现,这样当需要使用时,直接使用类名调用这些静态成员即可。尽管使用这种方式调用静态成员比较方便,但静态成员同样遵循着public、private、protected修饰符的约束。
静态方法的规范:
1.可以放在常量、变量、方法前;
2.所有对象都共享一个静态成员;
3.可以用类名.静态成员名 直接调用;
4.静态方法不能直接调用非静态的成员;
5.实例方法可以直接调用静态成员;
6.静态方法里不能用this;
7.实现单例模式:
(1)隐藏默认的构造方法;
(2)开放一个静态方法返回实例;
(3)在类的内部准备一个实例;
(4)判断类内部的实例是否已实例化:
1°.未实例化时进行一次实例
2°.已实例化时直接返回这个实例
静态单例模式的类:
1 package org.hanqi.pn0120; 2 3 public class JingTai { 4 5 public int a=0; 6 7 public static int b=0;//静态属性 8 9 public void add() 10 { 11 a++; 12 13 System.out.print("a="+a); 14 15 b++; 16 17 System.out.println(" b="+b); 18 19 add1(); 20 21 //this 22 } 23 24 public static void add1() 25 { 26 b++; 27 28 // 29 // JingTai t=new JingTai(); 30 // 31 // t.add(); 32 // a++; 33 34 } 35 36 }