如果将域定义为 static, 每个类中只有一个这样的域。
【关键字static】 : 【属于 类且不属于类对象的变量和函数】

一、静态变量

以雇员职工为例
Java中静态域、静态方法、工厂方法和main方法

  • 【静态常量】 常用
  • 例如: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());
    
  • }

相关文章: