一.封装(private)
- 封装:把成员变量/方法私有化,在基本类里面提供他们公共的访问方法
private关键字的作用:
- 私有的,不可访问的
- private可以修饰成员变量,也可以修饰成员方法
- 被private修饰的成员只能在本类中访问,外界不能访问
公共的访问方法:set和/get方法(快捷键:Alt+Shift+s r)
/*
* 一个手机类:
* 成员变量:brand,price,color(将成员变量私有化,提供公共的访问方式)
* 成员方法:手机特有的功能:打电话/玩游戏(将玩游戏的方法私有化)
* */
//手机类
class Phone{
private String brand;
private int price;
private String color;
//提供公共的访问方法
public String getBrand() {
return brand;
}
public void setBrand(String b) {
b = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int p) {
p = price;
}
public String getColor() {
return color;
}
public void setColor(String c) {
c = color;
}
//打电话的成员方法
public void call(){
System.out.println("打电话");
}
//发短信的成员方法
private void playGames(){
System.out.println("玩游戏");
}
}
//测试类
public class Demo {
public static void main(String[] args){
//创建手机类的对象
Phone p = new Phone();
//利用公共的访问方法给变量赋值
p.setBrand("美图");
p.setColor("粉色");
p.setPrice(3500);
//报错,成员变量是私有的,必须用公共的访问方法
// System.out.println(p.Brand()+","+p.Color()+","+p.Price());
System.out.println(p.getBrand()+","+p.getColor()+","+p.getPrice());
p.call();
//报错,私有的成员方法,只能在本类中访问,外界不能访问
// p.playGames();
}
}
二.this关键字
- this关键字:代表所在类的对象引用
- this的应用场景:局部变量隐藏成员变量
/*
* 一个手机类:
* 成员变量:brand,price,color(将成员变量私有化,提供公共的访问方式)
* 成员方法:手机特有的功能:打电话/玩游戏(将玩游戏的方法私有化)
* */
//手机类
class Phone1{
private String brand;
private int price;
private String color;
//提供公共的访问方法
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
//第一个brand为成员变量,第二个为局部变量
//局部变量和成员变量名称一致:就近原则:局部变量隐藏了成员变量
//为了区分成员变量和局部变量java提供了this关键字
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
//打电话的成员方法
public void call(){
System.out.println("打电话");
}
//发短信的成员方法
private void playGames(){
System.out.println("玩游戏");
}
}
//测试类
public class Demo2 {
public static void main(String[] args){
//创建手机类的对象
Phone1 p = new Phone1();
//利用公共的访问方法给变量赋值
p.setBrand("美图");
p.setColor("粉色");
p.setPrice(3500);
System.out.println(p.getBrand()+","+p.getColor()+","+p.getPrice());
p.call();
}
}
三.构造方法
- 构造方法:给对象的数据进行初始化
构造方法格式:
- 方法名与类名相同
- 没有返回值类型,连void都没有
- 没有具体的返回值
构造方法的注意事项:
- 如果你不提供构造方法,系统会给出默认的无参构造方法
- 如果你提供了构造方法,系统将不再提供
- 构造方法也是可以重载的
class Student{
private String name;
private int age;
//提供公共的访问方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//提供构造方法,构造方法是可以重载的
//带有一个参数的构造方法
public Student(String name){
this.name = name;
}
//带两个参数的构造方法
public Student(String name,int age){
this.name = name;
this.age = age;
}
}
public class Demo {
public static void main(String[] args){
Student s1 = new Student("王一");
s1.setAge(20);
System.out.println(s1.getName()+","+s1.getAge());
Student s2 = new Student("王二",22);
System.out.println(s2.getName()+","+s2.getAge());
}
}
4. Student s = new Student()这一句话做了几件事情?
Student s在栈内存中分配空间
new Student()在堆内存中申请空间
通过加载Student类加载成员变量(默认的初始化值)
显示初始化(通过构造方法对数据进行初始化)
通过创建对象进行赋值操作
给堆内存标记一个内存空间的地址值,Student s里面的地址值间接的指向