方法参数

news/2024/5/18 15:37:00 标签: 显示域初始化, 静态, static

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

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则会一直的增大,这样就会输出了上述的东西。


http://www.niftyadmin.cn/n/898655.html

相关文章

HTML在线visio进行简单布局

我们先来看一下这个需要布局的页面&#xff1a; w 我们对红色的标注部分进行舍去操作&#xff0c;我们只进行相应的布局&#xff1a; <!DOCTYPE html> <html><head><title></title><meta charset"utf-8" /><link rel"…

复合类型(json)

复合类型是由多个基本数据类型&#xff08;也可以是包括复合类型&#xff09;组成的数据体。JavaScript中的复合类型大致上有如下三种。 &#xff08;1&#xff09;Object &#xff1a;对象 &#xff08;2&#xff09;Array &#xff1a;数组 &#xff08;3&#xff09;Func…

打印出水仙花数

水仙花数&#xff08;Narcissistic number&#xff09;也被称为超完全数字不变数&#xff08;pluperfect digital invariant, PPDI&#xff09;、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数&#xff08;Armstrong number&#xff09;&#xff0c;水仙花数是指一个 3 位数&#…

初始化块的执行顺序

我们先来看一段代码。 public class Car {private static String Name "汽车";private String name "汽车";private double price 10000;public Car() {System.out.println("这是构造函数");System.out.println(this);}{System.out.println(…

用超类对象接收new出来的子类对象时,数据会不会丢失

我么会常常遇到用超类的对象来接收new的子类对象&#xff0c;这样会不会出现数据丢失呢&#xff1f;我们先来看这段代码&#xff1a; public class Car {private String name "汽车";private double price 10000;public String getName() {return name;}public vo…

对象调用方法的解析过程

弄清楚如何在对象上应用方法调用非常重要。下面假设要调用x.f(args)&#xff0c;隐式参数x声明为类C的一个对象。 下面是调用过程的详细描述: &#xff08;1&#xff09;编译器查看对象的声明类型和方法名。假设调用x.f(param),且隐式参数x声明为C类的对象。 需要注意的是:有可…

阻止继承:final类和方法

有时候&#xff0c;可能希望阻止人们利用某个类定义子类。不允许扩展的类被称为final类。如果在定义类的时候使用了final 修饰符就表明这个类是final类。例如&#xff0c;假设希望阻止人们定义Executive类的子类&#xff0c;就可以在定义这个类的时候&#xff0c;使用final修饰…

对象的强制类型转换

我们以前说过&#xff0c;将一个类型强制转换成另外一个类型的过程被称为类型转换。Java程序设计语言提供了一种专门用于进行类型转换的表示法。例如: double X 3.405;int nx (int) x; 将表达式x的值转换成整数类型&#xff0c;舍弃了小数部分。 正像有时候需要将浮点型数…