一个新手的java之旅(4)
- 关于构造方法
当我们想要一个对象时,类名 引用变量名 = new 类名();这样即可创建一个对象。但我们也注意到我们调用方法时常常是标识符();类名也是标识符,那么(类名 引用变量名 = new 类名();)这里是有方法吗?这里是构造方法,就是产生对象的方法。但这个方法我们没定义啊。这个方法是被定义的,这个方法是系统自己默认的。这个方法是无参的。系统给赋初值。
我们也可以自己定义一个有参构造方法,那系统就不会自己默认一个无参的构造方法了。这里要注意括号里的就不能为空。
构造方法的定义:
方法名和类名一致
方法没有返回值类型
它可以有参数,也可以没有参数,是一个重载了的方法
它的参数个数最少0个,最多只能是成员属性的个数。如果超出了成员属性参数个数的范围,编译报错。
它的参数列表中的形参类型一定要和成员属性的参数类型匹配。否则编译报错。
2. static关键字
静态属性:在类体中,方法外被static关键字修饰的。
静态方法:被static关键字修饰的方法。
在创建对象时,有些属性是对象都有的,比如对于人来说都要吃饭,如果每个对象都定义一个吃饭的属性是很浪费内存的。那么就有了静态变量,也因此静态变量是类级别,它的访问不依赖对象,用"类名."就可以访问。静态数据是存放在方法区的,因为在堆内存浪费内存,栈内存空间存局部变量,不是成员变量。静态变量在加载时就已经执行了,静态变量是可以定义的时候赋值的。这是为了节省时间。
静态代码块:
static {
java 语句;
…
}
其中的Java语句在加载时就会执行。就和方法一样进行压栈。 - this关键字
只有已经定义了,我们才能用。所有的成员方法中都有一个隐含的this参数。这个参数在建立对象时保存了对象在堆内存中的内存地址。所以实际是有(类名 this)的。其实我觉得保存对象在堆内存中的内存地址不太合适,我觉得是在遇到(类名 this)时,就开辟了一块关于对象的内存空间,这个空间的地址就在this里,给属性赋值后,地址在传回给等号左边的引用。