封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
private关键字(private是封装的一种体现,并不代表封装。)
是一个权限修饰符,可以修饰成员变量和成员方法。被private修饰的成员只在本类中才能访问。
步骤
- 属性私有化;
- 创建方法(设置属性的方法//set属性名,一般带参和获取属性的方法//get属性名,一般带返回值);
- 使用控制语句。
this关键字
代表所在类的对象引用。
作用
调用属性:this.成员变量;(当局部变量和全局变量同名时,this.变量名可以使用全局变量。)
调用方法:this.方法名;
调用构造方法:this();
注意
this只能使用在本类中。
如果用this来调用构造方法的话必须在构造方法的第一行。
构造方法
作用
给对象的数据进行初始化。
格式
方法名与类名相同,没有返回值类型,连void都没有,没有具体的返回值。
注意
构造方法是这个类第一个加载的方法,只执行一次。所以构造方法不要写太多代码。
构造方法也是可以重载的。如果你不提供构造方法,系统会给出默认无参构造方法。如果你提供了构造方法,系统将不再提供。为了防止调用new Xxx()时报错,定义了带参的构造方法后,手写一个参数为空的构造方法。
当通过new为一个对象分配内存时,如果构造方法中没有为成员变量提供初值,则Java进行自动初始化。对于数值变量,赋初值0;对于布尔变量,赋初值false;对于引用,即对象类型的任何变量,使用一个特殊的值null作为初值。
给成员变量赋值有两种方法
set方法()
class Student {
private String name;
public String getName() {
return name; //这里其实是隐含了this
}
public void setName(String name) {
this.name = name;
}
}
class StudentTest {
public static void main(String[] args) {
//创建一个对象
Student s1 = new Student();
s1.setName("林青霞");
System.out.println(s1.getName());
}
}
构造方法
class Student {
private String name;
public Student(String name) {
this.name = name;
}
public void show() {
System.out.println(name);
}
}
class StudentTest {
public static void main(String[] args) {
//创建一个对象
Student s1 = new Student("林青霞");
s1.show();
}
}
成员变量和局部变量区别
在类中位置不同:
- 成员变量:在类中方法外。
- 局部变量:在方法中定义或者方法上声明。
在内存中的位置不同:
- 成员变量:在堆内存。
- 局部变量:在栈内存。
生命周期不同:
- 成员变量:随着对象的创建而存在,随着对象的消失而消失。
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。
初始化值不同:
- 成员变量:有默认值初始化。
- 局部变量:没有默认值初始化,必须定义,赋值,然后才能使用。
注意
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
在同一个方法中,不允许有同名局部变量。
变量什么时候定义为成员变量
如果这个变量是描述这个类的信息,那么该变量定义为成员变量。
变量定义在什么范围好
变量的范围是越小越好,因为能及时被回收。