您的位置:首页 > 编程语言 > Java开发

Java学习记录01

2016-12-13 00:54 225 查看

构造代码块

一个class里面出现一个大括号里面包含一些代码的东西,我们称之为构造代码块 , 构造代码块是先于构造函数执行的,用来初始化对象共有的内容。而构造函数是用来给相应的对象初始化的。

class Person{
private int age;
private String name;
//构造代码块,每一个人对象建立的时候都是哭着来到人间的
{
System.out.println("crying...");
}
//构造函数
Person(){}
Person(int age, String name){
this.age = age;
this.name = name;
}
}
public class PersonDemo{
public static void main(String[] args){
Person wangwu = new Person();
Person lisi = new Person(20, lisi);
}
}


main函数执行完之后,控制台打印两句crying…,原因就是因为构造代码块 是用来给对象共性初始化的,而构造代码块 是给对应的对象初始化的(上面例子中
wangwu
lisi
用的构造函数是不相同的,各自有自己对应的构造函数

this关键字的用法

为了防止局部变量和成员变量赋值的时候,同名引起的局部变量将成员变量覆盖掉的。引入了this关键字

class Person{
private int age;
Person(int age){
/* age = age; 这样子编译运行时没问题的,但是结果不是我们想要的结果,这里就发生了我们所说的局部变量(参数中的age)将成员变量(private int age)给覆盖了,说的通俗点就是编译器采取的原则就是“自己家里有(局部变量)就用自己家(局部)里面的,没有了就去外边(这里指的就是它自己所属类里面)找。如果还是找不到就会报错*/
//为了避免这种尴尬,有让程序有可读性就有了下面这种写法
this.age = age;
}
}


this后面直接接一对括号,我们称之为this语句,只用于构造函数之间的相互调用,并且只允许放在第一行使用

class Person{
private int age;
private String name;
Person(int age){
this.age = age;
}
Person(int age, String name){
this(age);
this.name = name;
}
}


这里的
this(age)
就相当于调用了
Person(int age){}
.放在第一行的原因就是应该想让人家之前的所有初始化结束了,在执行最新的初始化操作,这样子就不会最新的操作被原来的初始化覆盖(如果Person后面还有一句
this.name = "hahahahah"
,这样子如果this语句放在了
this.name = name
, 后面就会发生最后name的值时”hahahahah”)。

所以记住这个原则,this 语句出现在构造函数之间相互调用,但是出现的位置必须时第一行

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 对象 class