4.4 静态域和静态方法

4.4.1 静态域
每个类只有一个被定义为static的静态域;静态域属于类不属于任何独立的对象。(静态域有称类域)

4.4.2 静态常量
静态常量使用较多。例如,在Math类中定义一个静态常量:
public class Math {
public static final double PI = 3.14159265358979323846;
.....
}
在程序中可以采用Math.PI的形式来获取这个常量

4.4.3 静态方法
1、静态方法是不能向对象操作的方法。例如,Math类的pow方法:Math.pow(x, a);在运算是没有使用任何Math对象,即没有隐式参数(this)。

2、因为静态方法没有操作对象,所以在静态方法中访问实例域。但是,静态方法可以访问自身的实例域。
public static int getNextId() {
return nextId;
}
可以通过类名调用该方法:int n = Employee.getNextId;
注释:建议使用类名而不是对象来调用静态方法。

3、使用静态域的两种情况:
(1)一个方法不需要访问对象状态时
(2)一个方法只需要访问量类的静态域时

4.4.5 Main方法
1、不需要使用对象调用静态方法。例如,不需要构造Math对象就可以使用Math.pow。main方法也是一种静态方法
public calss Application {
public static void main(String[] args) {
//创建对象。。。
}
}
main方法不对任何对象操作。静态的main方法将执行并创建程序所需的对象。
提示:每个类可以有一个main方法,这样便于进行单元测试。
class Employee {
public Empolyee(String n, double s, int year, int month, int day)
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hirday = calendar.getTime();
}
...
class static void main(String[] args) {
Employee e = new Employee("Romeo", 5000, 2003, 3, 31);
e.raiseSalary(10);
System.out.println(e.getName() + "" + e.getSalary());
}
....
}
如果想独立测试Employee类,只要执行java Empolyee
如果Employee类是一个大型应用的一部分,只要执行java Application
并且Employee类中的main方法永不执行

6、源代码:例4-3中的程序包含Employee类,其中有一个静态域nextId,一个静态方法getNextId。将三个Empolyee对象写入数组,然后打印雇员信息。最后,打印下一个可用员工标识来作为静态方法使用的演示。
需要注意:Employee类也有一个静态的main方法用于单元测试。分别运行java Employee和java StaticTest执行两个main方法。
StaticTest.java
package com.vincent.javacore.statictest;

import com.vincent.javacore.statictest.Employee;

public class StaticTest {
	public static void main(String[] args) {
		//创建三个职员列表作为Employee的对象
		Employee[] staff = new Employee[3];
		staff[0] = new Employee("Tom", 4000);
		staff[1] = new Employee("Dick", 5000);
		staff[2] = new Employee("Harry", 6000);
		
		//打印每个员工的信息
		for (Employee e : staff) {
			e.setId();
			System.out.println("name: " + e.getName() 
					+ ", id = " + e.getId() 
					+ ", salary: " + e.getSalary());
			//调用静态方法
			int n = Employee.getNextId();
			System.out.println("Next available id = " + n);
		}
	}
}

Employee.java
package com.vincent.javacore.statictest;

public class Employee {
	public Employee(String n, double s) {
		name = n;
		salary = s;
		id = 0;
	}
	
	public String getName() {
		return name;
	}
	
	public double getSalary() {
		return salary;
	}
	
	public int getId() {
		return id;
	}
	
	public void setId() {
		id = nextId;
		nextId++;
	}
	
	public static int getNextId() {
		return nextId;
	}
	public static void main(String[] args) {
		Employee e = new Employee("Harry", 5000);
		System.out.println("name: "+ e.getName() + ", Salsry: " + e.getSalary());
	}
	
	private String name;
	private double salary;
	private int id;
	private static int nextId = 1;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值