方法参数

通过重载类的构造器方法,可以采用多种形式设置类的实例域的初始状态。确保不管怎样调用构造器,每个实例域都可以被设置为一个有意义的初值,这是一种很好的编程习惯。

class Employee {
    private String name = "";
}

当然了,初始值不一定都是常量值。也可以用方法对域进行初始化。例如:

class Employee {
    private static int nextId;
    private int id = this.changeid();
	private int id2 = changeid2();

    public int changeid() {
		int r = id;
		id++;
		return r;
	}
	
	public static int changeid2() {
		int r = nextId;
		nextId++;
		return r;
	}
}

public static void main(String[] args) {
		Student s1 = new Student();
		s1.setAge(100);
		s1.setName("李四");
		
		for(int i = 0 ; i < 10 ; i++) {
			Student s = new Student();
			System.out.println("id:"+ s.getid());
			System.out.println("id:"+ s.getid());
			System.out.println("id2:"+ s.getid2());
			System.out.println("id2:"+ s.getid2());
		}
		
		Student s2 = new Student();
		s2.setAge(11);
		s2.setName("王五");
		swapStudent(s1, s2);
		System.out.println("s1 : " + s1);
		System.out.println("s2 : " + s2);		
		
	}

输出的结果为:

id:0
id:0
id2:1
id2:1
id:0
id:0
id2:2
id2:2
id:0
id:0
id2:3
id2:3
id:0
id:0
id2:4
id2:4
id:0
id:0
id2:5
id2:5
id:0
id:0
id2:6
id2:6
id:0
id:0
id2:7
id2:7
id:0
id:0
id2:8
id2:8
id:0
id:0
id2:9
id2:9
id:0
id:0
id2:10
id2:10

我们来分析一下他为什么用静态的域初始化就会发生不断变大的操作,大家都知道,静态的变量跟其他的变量存放的位置是不一样的,他们都存放在堆中,而静态的变量存放在属于自己的一个小位置中,任何新的类实例化的时候,静态的变量只有一块存储区域,不会改变,也不会新开辟一块区域。而其他的变量就会随着对象实例化的时候,新开辟自己的空间来存放自己的变量,也就是封装。我们用图来解释一下:

随着对象的增加,id会不断地开辟新的内存,而id2则会一直的增大,这样就会输出了上述的东西。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值