程序在运行时可能需要一些全局数据,比如远程资源的URL,标识名称,游戏中关卡的总数,当前的关卡,游戏角色的数量,还有一些实用工具用于格化转换,数据验证等。这些数据和功能属于全局概念,无需在运行时动态创建对象来维持这些数据和功能,而在程序在初始化应该为些数据分配空间和初始化。
Java使用static关键字在定义这全局数据和全局部功能的成员,称为静态属性和静态方法,由于Java程序最基本的单位是类,所以这些静态属性和静态方法也定义在类中,但需要注意是这类创建的对象和这些静态成员没有关系,对象并有维持这些成员数据。
既然作为全局成员因些访问也比较方便,访问静态属性直接通过类名.属性名,访问静态方法直接通过类名.静态方法,需要创建对象。当同类中其他成员方法(即非static方法,必须通过创建对象才能访问)和静态方法可以省略类名限定,但外部类访问必须加上类名限定。
静态方法内部除了可操作自身的定义局部变量外,只能访问外部的全局数据static属性。尽管它委身所在类中还定了其他成员变量,但不能访问。
import java.text.SimpleDateFormat; import java.util.Date;
class MyTool { private String str; public static String PATTERN="yyyy-MM-dd"; public static String format(Date date){ SimpleDateFormat sdf=new SimpleDateFormat(PATTERN); return sdf.format(date); } public void setStr(String str) { this.str = str; } public String getStr() { return str; } public void largeFistLetter(){ String s=str.toLowerCase(); char ch=s.charAt(0); str=ch+str.substring(1,str.length()); }
}
public class Demo1 { public static void main(String[] args) { MyTool mt=new MyTool(); mt.setStr("Hello"); System.out.println(mt.getStr());
Date now=new Date(); String str=MyTool.format(now); System.out.println(str); MyTool.PATTERN="yyyy/MM/dd"; str=MyTool.format(now); System.out.println(str); } }
|
程序运行的结果如下: