如果将域定义为 static, 每个类中只有一个这样的域。
【关键字static】 : 【属于 类且不属于类对象的变量和函数】
一、静态变量
以雇员职工为例
- 【静态常量】 常用
- 例如:Math.PI
- 在 Math类 中: 有 public static final double PI = 3.14159265358979323846;
- 最好不要将域设计 为 public。然而, 公有常量(即 final 域)却没问题
二、静态方法
- 静态方法是一种不能向对象实施操作的方法 (【类对象】不能调用),即静态方法就是函数
- 例如, Math 类的 pow 方法就是一静态方法。 表达式 Math.pow(x, a) 计算幂 X的a次方,在运算时, 不使用任何 Math对象
在下面两种情况下使用静态方法:
1.方法不需要访问对象状态,其所需参数都是通过显式参数提供(例如: Math.pow)
2.一个方法只需要访问类的静态域(例如:Employee.getNextldh)
三、工厂方法
- 类似 LocalDate 和 NumberFormat 的类使用【静态工 厂方法】 来 构造对象。
- 工厂方法 LocalDate.now 和 LocalDate.of
- NumberFormat 类如下使用工厂方法生成不同风格的【格式化对象】:
-
NumberFormat currencyFormatter = NumberFormat.getCurrencylnstance(); -
NumberFormat percentFormatter = NumberFormat.getPercentlnstance(); -
double x = 0.1 ; -
System.out.println(currencyFormatter.format(x)); // $0.10 货币实例 -
System.out.println(percentFomatter.format(x)); // 10% 百分比 -
为什么 NumberFormat 类不利用构造器完成这些操作呢? 这主要有两个原因:
1.无法命名构造器。构造器的名字必须与类名相同。但是, 这里希望将得到的货币实例 和百分比实例采用不用的名字。
2.当使用构造器时,无法改变所构造的对象类型。而 Factory方法将返回一个 DecimalFormat 类对象,这是 NumberFormat 的子类
四、main方法
- 不需要使用对象调用静态方法,例如,不需要构造 Math 类对象就可以调用 Math.pow。
- 同理, main方法也是一个静态方法
- main方法不对任何对象进行操作。事实上,在启动程序时还没有任何一个对象。静态的 main方法将执行并创建程序所需要的对象。
- 每一个类可以有一个 main 方法。 【这是一个常用于对类进行单元测试的技巧。】
- 如果想要独立地测试 Employee 类,可以在Employee类中加入:
- public static void main(String[] args)
- {
-
Employee e = new Employee("Romeo", 50000, 2003, 3, 31); -
e.raiseSalary(lO); -
System.out.println(e.getName() + " " + e.getSalary()); - }