1. 封装概述
-
封装:隐藏事物的属性和实现细节,对外提供公共的访问方式。
-
封装的好处:
-
隐藏了事物的实现细节
-
提高了代码的复用性
-
提高了安全性
-
-
封装的原则:
-
隐藏事物的属性
-
隐藏事物的实现细节
-
对外提供公共的访问方式
-
2. private关键字
-
含义:私有的
-
可以修饰的内容:
-
修饰成员变量
-
修饰成员方法
-
修饰构造方法
-
修饰内部类
-
-
修饰之后的效果:被
private
修饰的成员,只能在本类中被访问。-
注意事项:
private
只是封装的一种体现形式,封装还可以使用其他的修饰符来完成。
-
-
示例:
public class Demo {
private String username = "张三";
private String password = "123456";
public void method1() {
System.out.println(111);
}
private void method2() {
System.out.println(222);
}
public static void main(String[] args) {
Demo demo = new Demo();
demo.method1();
demo.method2();
}
}
3. Getter & Setter方法
-
当属性被私有之后,外界无法直接访问,所以需要提供公共的访问方式,让外界可以间接的访问属性。对于当前类,就可以控制外界访问属性的方式。(我让你怎么访问,你就只能怎么访问)
-
一般提供
get
方法,获取成员变量的值;提供set
方法,设置成员变量的值。 -
示例:
public class Demo {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String u) {
username = u;
}
public String getPassword() {
return password;
}
public void setPassword(String p) {
password = p;
}
public static void main(String[] args) {
Demo demo = new Demo();
demo.setUsername("张三");
demo.setPassword("12345");
System.out.println(demo.getUsername());
System.out.println(demo.getPassword());
}
}
4. 变量访问原则和this关键字
-
变量访问原则:
-
就近原则:当在访问某个变量名称的时候,会先寻找最近的该变量名称的定义,如果寻找到了,就使用该变量,如果没有找到,才到更远的位置寻找该变量名称的定义。
-
当局部变量和成员变量同名的时候,一定是先使用局部位置定义的变量,如果没有,才会使用成员位置定义的变量。
-
-
this
关键字:-
表示当前类型当前对象的引用:哪个来调用this所在的方法,this就代表哪个对象
-
作用:用于区分局部变量和成员变量同名的情况。使用
this.属性名称
的一定是成员变量,没有使用this.
的变量,根据就近原则来确定使用哪个变量。
-
-
示例:
-
public class Demo {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public static void main(String[] args) {
Demo demo = new Demo();
demo.setUsername("张三");
demo.setPassword("12345");
System.out.println(demo.getUsername());
System.out.println(demo.getPassword());
}
}
5. 构造方法
5.1 构造方法概述
-
构造方法:构造函数,构造器,Constructor
-
作用:用于给对象中的成员变量赋初始值。在创建对象的同时,JVM会自动调用构造方法,等对象创建完成的时候,对象中的成员变量就已经有指定的值了。
-
语法结构:
修饰符 方法名称(参数列表) {
方法体
}
-
构造方法说明:
-
构造方法的方法名称,必须和类名一模一样,连大小写都一样
-
构造方法没有返回值类型,连void也没有
-
构造方法没有return语句,如果一定需要return语句,就写一个return;return后面不能跟内容,加return没有实际的意义
-
构造方法不需要手动调用,由 JVM 在创建对象的时候自动调用
-
对象本身不能调用构造方法
-
构造方法只调用一次
-
-
示例:
public class Demo {
private String username;
private String password;
public Demo() {
}
public static void main(String[] args) {
Demo d1 = new Demo();
}
}
注意事项:
-
构造方法可以是有参数的,也可以是没有参数的。
-
如果是没有参数的构造方法,外界无需传入任何的参数值,只能给成员变量赋固定值或者不赋值。
-
如果是有参数的构造方法,外界在调用构造方法的时候,需要传入实际的参数值,通常用于赋值给成员变量。
-
-
如果在类中没有定义任何的构造方法,那么系统会自动提供一个空参构造(空实现)。
-
如果在类中手动定义了一个构造方法(无论是空参还是有参),系统都不再会提供任何的构造方法。
-
构造方法的重载:构造方法都在同一个类中,构造方法的方法名称都和类名一致,参数列表不同,没有返回值类型,一般在类中,既需要空参构造,也需要有参构造,都手动定义出来。
-
示例:
public class Demo {
private String username;
private String password;
public Demo() {
}
public Demo(String username) {
this.username = username;
}
public Demo(String username, String password) {
this.username = username;
this.password = password;
}
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo("张三");
Demo d3 = new Demo("张三", "12345");
}
}
5.2 构造方法和set方法的比较
-
共同点:构造方法和set方法都是用于给成员变量赋值。不希望外界直接访问私有成员变量,通过构造方法或者set方法,间接的访问私有变量。
-
区别:
-
构造方法:构造方法是在创建对象的同时,由 JVM 自动调用执行,用于给属性赋值,只能执行一次。
-
set方法:set方法是在创建对象之后,由对象手动调用执行,用于给属性修改值,可以调用多次。
-
-
使用场景比较:
-
构造方法:只能在创建对象的时候被自动调用一次,代码更加简洁。一旦对象创建成功,就不能继续使用构造方法修改成员变量的值。
-
set方法:一般set方法使用更加灵活,使用更加频繁。
-