封装:
面向对象语言就是对我们客观世界的模拟,客观的世界的成员变量都是隐藏在对象的内部的,外界无法访问(操作和修改),封装可以被认为就是一个保护屏障,防止该类的代码和数据被其他的类随意访问。要访问该数据,必须通过指定的方法,适当的封装可以让我们的代码容易理解和维护,也加强了代码的安全性。
原则:
将属性隐藏起来,如果想要访问我们的某一个属性,提供公共的方法对你访问。
封装的操作-----private关键字
Private含义:
1、它是一个权限修饰符
2、可以修饰成员变量和成员方法
3、被private关键字修饰后的成员变量和成员方法,只能在本类中使用
private的使用格式:
1、使用priavte关键字修饰我们的成员变量。
public class Dome01 {
//手机类
public class Phone{
//成员变量
private String brand;//品牌
private int price;//价格
private String color;//颜色
}
}
2、提供get和set方法,可以访问我们的成员变量:
public class Student {
//成员变量
private String username;
private int age;
//外界调用我的方法获取成员变量
public String getUsername() {
return username;
}
//外界调用我这个方法给我的成员变量赋值
public void setUsername(String n) {
username = n;
}
public int getAge() {
return age;
}
public void setAge(int a) {
age = a;
}
}
封装的优化1-----this关键字
public class Student {
//成员变量
private String username;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
username = username;
}
}
public class Dome02 {
public static void main(String[] args) {
Student student=new Student();
student.setUsername("zhangsan");
System.out.println(student.getUsername());
}
}
//结果:null
经过我们上面测试,发现了一个新的问题,成员变量赋值失败了,在修改set方法的形式参数,方法并没有给成员变量赋值这是由于形式变量和成员变量重名,导致成员变量名被隐藏,方法中的变量名,无法访问成员变量,从而导致赋值失败,所以我们引出来一个this关键字,来解决重名的问题
this关键字
This代表当前类的对象的引用(地址值),即对象自己的引用
记住:方法被哪个对象调用,方法中的this就代表这个对象,
使用this关键修饰方法变量,解决一下我们的成员变量被隐藏的问题:
public class Student {
//成员变量
private String username;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
封装的优化-----构造方法:
当我们创建对象的时候,构造方法用来初始化该对象,给对象的成员变量赋值初始化。
注意:无论你是否自定义构造方法,所有的类都有构造方法,因为java自动帮你提供了一个无参构造
public class Student {
//成员变量
private String username;
private int age;
public Student(){
}
public Student(String username,int age){
this.username=username;
this.age=age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Demo03 {
public static void main(String[] args) {
Student student1=new Student();//无参构造
Student student2=new Student("wang",12);//有参构造
}
}
注意事项:
1、如果你不提供构造方法,系统默认给你一个无参构造
2、如果你提供了构造方法,系统将不会再给你提供一个无参构造
3、构造方法是可以重载的,既可以定义参数,也可以不定义参数
标准代码:
JavaBean 是java语言编写类的时候一个标准规范,符合我们javaBean的类,要求类必须是具体的和公共的,并且提供了有参和无参构造方法,提供用来操作成员变量的get和set方法
public class Student{
//成员变量
//构造方法
//无参构造方法[必须]
//有参构造方法【建议】
//成员方法
//getxxx()
//setxxx()
}