成员变量vs局部变量
- 局部变量没有默认值
成员变量有默认值 - 局部变量在栈中开辟内存
成员变量在堆中开辟内存 - 局部变量是当其所在的函数被调用时开辟内存
成员变量是创建对象时开辟内存 - 局部变量是当其作用域结束时立刻释放内存
成员变量是当其所属的对象成为垃圾时等待垃圾回收线程回收 - 局部变量的作用域是从其定义的位置开始,到其所在的大括号结束
成员变量的作用域是整个类
this
java内部定义好的一个引用变量,总是指向当前正被使用的对象(当前用的对象是哪个,this会自动指向该对象)
class Person
{
private int age;
public void setAge(int nianliang)
{
this.age=nianling;
}
public int getAge()
{
return this.age;
}
}
class Demo4
{
public static void main(String[] args)
{
Person xiaoBai=new Person();
//执行这行代码时,使用的对象是xiaoBai指向的对象,所以this指向的是xiaoBai指向的对象
xiaoBai.setAge(20);//xiaobai
System.out.println(xiaoBai.getAge());//xiaoBai
Person xiaoHei=new Person();//xiaoHei
xiaoHei.setAge(18);//xiaoHei
}
}
-
局部变量和成员变量同名时,优先使用成员变量,因此需要使用this来指定对象的成员变量
class Student { String name;//成员变量 int age; Student(){} Student(String name,int age)//局部变量和成员变量同名 { this.name=name; this.age=age; } } class Demo7 { public static void main(String[] args) { Student stu=new Student("赵四",66); System.out.println(stu.name+", "+stu.age); } }
-
构造函数的调用,使用this,且必须写在构造函数的第一行
class Person { int age; Person() { this(18); //构造函数的调用使用this,必须写在构造函数的第一行 } Person(int age) { this.age=age; } } class Demo8 { public static void main(String[] args) { Person xiaohei=new Person(); System.out.println(xiaohei.age); } }
构造函数
java自动在Person类中加入了一个构造函数,用来创建对象。
class Person
{
Person(){}
}
-
特点:
- 和类名相同
- 不能有返回值类型
-
注意:
-
构造函数只能用来创建对象
-
若自己没有在类中写构造函数,那么系统会自动加入一个空参的构造函数:
类名(){} -
若自己在类中写了构造函数,那么系统就不会自动加入空参的构造函数
-
一个类中可以有多个构造函数(重载:函数名称相同,但是参数不同)
-
可以利用给构造函数指定参数,给属性赋值:
- 但无法变更数据,因此在下面的例子中有参的构造函数和setAge缺一不可
class Person { private int age; Person(){} Person(int nianling){ age=nianling; } public void setAge(int nianling){ age=nianling; } public int getAge(){ return age; } } class Demo5 { public static void main(String[] args) { Person xiaoBai=new Person();//用来创建对象 System.out.println(xiaoBai.age); //利用给构造函数指定参数,给属性赋值 Person xiaoHei=new Person(18); xiaoHei.setAge(19); System.out.println(xiaoHei.getAge); } }
-