关键字static用例

今天接着看了视频后面的内容,发现自己之前想得太过简单了。原理是不复杂的,但其应用是千变万化的,可能涉及到各个方面,不可大意。郝斌老师举了两个例子,让人挺受启发的。

用例1、统计一个类被创建的次数

分析:需设定一计数变量,且该变量不能被外部所修改(注意private和public的使用)

class A {
	public int i=10;
	private static int cnt=0;	//此处使用private以保证计数变量cnt不会被外部指令修改
	
	public A () {
		cnt++;		//无参创建
	}
	
	public A (int i) {
		this.i = i;
		cnt++;		//有参创建
	}
	
	public static int getcnt () {    //此处的public是因为需调用cnt以显示计数结果,但cnt为private型
		return cnt;
	}
}
public class examples {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("创建的A类的个数为:"+A.getcnt());
		A aa1 = new A ();
		System.out.println("创建的A类的个数为:"+A.getcnt());
		A aa2 = new A ();
		System.out.println("创建的A类的个数为:"+A.getcnt());
	}

}
/*运行结果:
创建的A类的个数为:0
创建的A类的个数为:1
创建的A类的个数为:2
分析:注意其中public和private的使用
 * */
用例2、只允许对某个类创建一次

/* static应用实例:只允许对某个类创建一次
 * 分析:1)创建一次可以是发生多次创建时报错
 * 	 2)或是多次创建都指向同一个类的区域【将类的所有属性均设置为static亦可实现,只是比较麻烦,且易出问题】
 * */
class Student {
	public int num = 0;
	public String name = "0";
	public char sex = '0';
	public static Student s = new Student ();   //定义一个【属性类】
	
	public Student () {
		
	}
	
	public static Student getStudent () {
		return s;
	}
}
public class OnlyOneStatic {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student s = Student.s;
		Student s2 = Student.s;
		System.out.println("初始值全部为0");
		s.num = 12;
		s.name = "cheng";
		s.sex  = 'M';
		System.out.println("修改s后的值");
		System.out.println("编号:"+s.num);
		System.out.println("姓名:"+s.name);
		System.out.println("性别:"+s.sex);
		
		s2.num = 15;
		s.name = "xing";
		s.sex  = 'F';
		System.out.println("修改s2之后的值");
		System.out.println("编号:"+s.num);
		System.out.println("姓名:"+s.name);
		System.out.println("性别:"+s.sex);
	}

}
/*运行结果:
初始值全部为0
修改s后的值
编号:12
姓名:cheng
性别:m
修改s2之后的值
编号:15
姓名:xing
性别:f
分析:修改s2的值就相当于修改s的值,两者其实是相同的
 * */
事实上,这相当于把原来的单一static变量(昨天的文中的示例)替换为现在的一个 类(属性),而类由各种变量组成,即相当于把这些变量设置为static型。


总结:static方法只能直接调用同类中的static成员,而非static方法对两者(s和非s)均可以调用。

原因:静态方法使用前无需创建具体对象,而非静态方法必须先创建一个具体的对象才可使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值