JAVA零基础小白自学日志——第十天


今日提要:记得昨天我说过的static静态修饰么?今天就来简单的说说它;

1.static修饰变量

[1].静态变量的定义

  • static修饰的变量被称为静态变量,也叫类变量;
  • 静态变量被所有对象共享,在内存中只有一个副本;
  • 当且仅当类被初次加载时会被初始化;
  • 静态变量属于类;
  • 通过类名可以调用静态变量,例:类名.静态变量名;
  • 也可通过对象名调用,例:对象名.静态变量名;
    说实话我一个中心小学肄业生,揣摩这个定义还真是有难度,反正到现在也没揣摩明白

[2].静态变量属于类

先来看个XX科技公司的员工登记表格

员工名册(类)员工小张(对象)员工小王(对象)员工小李(对象)备注
姓名(name)小张小王小李实例变量(属于对象)
性别(gender)实例变量(属于对象)
员工编号(id)001002003实例变量(属于对象)
职务( job)文员销售程序员实例变量(属于对象)
部门(department)办公室销售部开发部实例变量(属于对象)
公司(COMPANY)XX科技公司XX科技公司XX科技公司静态变量(属于类)
员工数量(NUMBER):3人——————静态变量(属于类)

从表格内可以看出,静态变量与对象的无关性,即便继续添加员工小红、小明等,所属公司也是不会变化的,还是XX科技公司,而员工数量的变化,也不影响每个对象的输出结果;

[3]静态变量的初始化

静态变量在类被初次加载时会被初始化,在内存中只有一个副本,这个对程序效率的影响应该是很大的,当一个程序指数级增长的时候,这种与对象无关的变量,不用在每一个对象开辟的内存都保存相同的内容,就好比公司变量,如果不使用静态变量每增加一个对象,就会在内存中增加一个副本;

[4].静态变量的调用

先看个例子

public class TestStaffRoster {

	public static void main(String[] args) {
		
		StaffRoster srOne = new StaffRoster("小张", "男", "001", "文员", "办公室");
		StaffRoster srTwo = new StaffRoster("小王", "女", "002", "销售", "销售部");
		StaffRoster srThree = new StaffRoster("小李", "男", "003", "程序员", "开发部");
		
		srOne.showInfo();
		srTwo.showInfo();
		srThree.showInfo();
		
		System.out.println("员工人数: " + StaffRoster.NUMBER);		

	}//end main
}//end class

class StaffRoster{
	
	//声明项目变量
	private String name;
	private String gender;
	private String id;
	private String job;
	private String department;
	
	//声明静态变量并赋值
	private static String COMPANY = "XX科技公司";
    static int NUMBER = 0;
	
	StaffRoster (String tempName, String tempGender, String tempID, String tempJob, String tempDepa){
		name = tempName;
		gender = tempGender;
		id = tempID;
		job = tempJob;
		department = tempDepa;
				
		NUMBER++;
		
	}// end StaffRoster
	
	void showInfo() {
		
		System.out.println("员工姓名: "+ name + ", 性别: " + gender + ", 员工编号: " + id +", 职位: " + job + ", 部门: " + department + ", 单位: " + COMPANY);
		
	}//end showInfo()
}//end class StaffRoster

从程序里可以看出来,静态变量也必须遵守范围权限的要求,而且个人认为静态变量对封装的要求应该更严格的,因为静态变量影响的数据范围更大

静态变量咱们先学习到这里,有些问题还是搞不清楚,能搞清楚的就是上面这些了

2.static修饰方法

[1].静态方法的定义

  • static修饰的方法叫做静态方法,也称为类方法;
  • 静态方法内只能通过对象调用非静态变量和非静态方法(看看main()的对象调用,这点就明白了);
  • 静态方法内不能有this关键字;
  • 静态方法可以通过:类名.方法名 和 对象名.方法名,调用;

定义很好理解,所以就不多解释了,但是应用方法应该很具有挑战性,未来练习里面再看吧

[2].静态方法的调用

public class TestStaffRoster {

	public static void main(String[] args) {
	    
	    StaffRoster.info();
	
	}// end main
}//end class

class StaffRoster{
    
    static void info(){
    
        System.out.print("这是静态方法");
        
    }//end info
}//end class StaffRoster

没啥可说的一眼就能看明白了,实在不明白,运行下也明白了;

3.静态块

[1].静态块定义

  • 类加载的时候,静态块会执行一次,且只执行一次;
  • 一个类里可以有多个静态块,静态块里面不能包含this关键字;

[2].静态块和匿名块的演示,运行下程序就能看出来区别

public class TestStaffRoster {

	public static void main(String[] args) {
		
		StaffRoster srOne = new StaffRoster("小张", "男", "001", "文员", "办公室");
		StaffRoster srTwo = new StaffRoster("小王", "女", "002", "销售", "销售部");
		StaffRoster srThree = new StaffRoster("小李", "男", "003", "程序员", "开发部");
		
		srOne.showInfo();
		srTwo.showInfo();
		srThree.showInfo();		
				
		System.out.println("员工人数: " + StaffRoster.NUMBER);
		
	}//end main
}//end class

class StaffRoster{
	
	//声明项目变量
	private String name;
	private String gender;
	private String id;
	private String job;
	private String department;
		
	//声明静态变量并赋值
	private static String COMPANY = "XX科技公司";
    static int NUMBER = 0;
	
	StaffRoster (String tempName, String tempGender, String tempID, String tempJob, String tempDepa){
		name = tempName;
		gender = tempGender;
		id = tempID;
		job = tempJob;
		department = tempDepa;
				
		NUMBER++;
		
	}// end StaffRoster
	
	{
		System.out.println("这是匿名构造块");
		
	}
	
	static {
		System.out.println("这是静态构造块");
	}
	
	void showInfo() {
		
		System.out.println("员工姓名: "+ name + ", 性别: " + gender + ", 员工编号: " + id +", 职位: " + job + ", 部门: " + department + ", 单位: " + COMPANY );
		
	}//end showInfo()
}//end class StaffRoster

定义还是相当好理解的,根据我学习过的东西的常识,越是好理解的东西,运用好了,就越难

小贴士

向方法传递参数,基础类型参数,传递的只是副本,在方法中改变的只是副本的值,不会改变原始对象;如果传递的是引用型参数,传递的是存储值的内存位置,并不产生副本,所以在方法中改变值,会改变原始对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值