啥是Java静态变量

public class Employee {
	
	/*
	 * - 静态变量的默认值规则和实例变量一样。
	 * - 静态变量值是所有对象共享。
	 * - 静态变量的值存储在方法区。
	 * - 静态变量在本类中,可以在任意方法、代码块、构造器中直接使用。
	 * - 如果权限修饰符允许,在其他类中可以通过“类名.静态变量”直接访问,也可以通过“对象.静态变量”的方式访问(但是更推荐使用类名.静态变量的方式)。
	 * - 静态变量的get/set方法也静态的,当局部变量与静态变量重名时,使用“类名.静态变量”进行区分
	 */
	
	//私有的静态变量需要通过 类名.getTotal()来访问
	private static int total;
	
	//不私有的静态变量可以直接通过 类名.company访问
	static String company;
	
	private int id;
	private String name;
	
	//这样的块叫做非静态代码块,可用来作为多个构造器的公共代码,即在每创建一个对象时会执行一次
	{
		total++;
		id = total;
	}
	
	public Employee() {}
	
	public Employee(String name) {
		this.name = name;
	}

	public static int getTotal() {
		return total;
	}

	public static void setTotal(int total) {
		Employee.total = total;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Employee {company = "+ company +", id=" + id + ", name=" + name + "}";
	}

	
}

public class TestStaticVariable {
	public static void main(String[] args) {
		//静态变量的默认值与实例变量一样,此处为0
		System.out.println("Employee total = " + Employee.getTotal());
		
		//company值默认为null,每创建一个对象都会执行一次非静态代码块,即total加了两次,值为2
		Employee c1 = new Employee("yangtao");
		Employee c2 = new Employee();
		
		System.out.println(c1);
		System.out.println(c2);
		
		System.out.println("Employee total = " + Employee.getTotal());
		
		//非私有的静态变量可以通过 类名.静态变量名 来访问与赋值
		Employee.company = "atguigu";
		System.out.println(c1);
		System.out.println(c2);
		
		//静态变量为所有对象共有的变量,修改了其中一个对象的静态变量会影响所有对象
		c1.company = "object change static";
		System.out.println(c1);
		System.out.println(c2);
		
	}
}
posted @ 2022-04-10 21:34  ··十方··  阅读(377)  评论(0)    收藏  举报