封裝
1.封裝概述
是面向對象三大特徵之一
是面向對象編程語言對客觀世界的模擬,客觀世界裏成員變量都是隱藏在對象內部的,外界無法直接操作和修改。就像年齡。
2.封裝原則:
將不需要對外提供的內容都隱藏起來。
把屬性隱藏,提供公共方法對其訪問。
成員變量private,提供對應的getXxx()/setXxx()方法
3,優點:
通過方法來控制成員變量的操作,提高了代碼的安全性
把代碼用方法進行封裝,提高了代碼的複用性
this關鍵字
1.this:代表所在類的對象引用
方法被哪個對象調用,this就代表那個對象
2.什麼時候使用this?
局部變量隱藏成員變量
- java中有就近原則
- 在定義變量名稱的時候需要達到見名之意
- this
- 方法被那個對象調用,this就是那個對象
public class Student {
private String name;//成員變量
private int age;
public void show(String name){//局部變量
System.out.println(this);
System.out.println(this.name+"你好"+"我來自北京,我是:"+name);
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
學生的測試類
public class DemoStudent {
public static void main(String[] args) {
//創建學生對象
Student stu = new Student();
System.out.println(stu);
//對成員變量進行賦值
stu.setName("小明");
stu.setAge(38);
stu.show("小紅");
System.out.println("======================");
Student stu2 = new Student();
System.out.println(stu2);
stu.setName("小李");
stu2.show("小軍");
}
}
構造方法
1.構造方法作用概述
給對象的數據進行初始化
2.構造方法格式
方法名與類名相同
沒有返回值類型
public Person(){
System.out.println("構造方法被執行了...");
}
3.構造方法注意事項
如果你不提供構造方法,系統會給出默認構造方法
如果你提供了構造方法,系統將不再提供
構造方法也是可以重載的
4,構造的作用:
(1)創建對象
(2)用來對變量進行賦值
public Person(String name){
this.name = name;
}
public Person(String name,int age){
this.name = name;
this.age = age;
}
如何調用構造方法?
構造方法需要new關鍵字進行調用
格式: 類名 對象名 = new 類名(...);
public class DemoPerson {
public static void main(String[] args) {
Person p = new Person();
System.out.println("------------");
Person p2 = new Person("小明");
p2.show();
System.out.println("------------");
Person p3 = new Person("小軍",18);
p3.setAge(18);
p3.show();
}
}
標準類的寫法
1,標準的學生類:
也稱爲JavaBean是Java語言編寫類的一種標準規範。符合JavaBean的類,要求類必須是具體的和公共的,並且具有無參數的構造方法,提供用來操作成員變量的set和get方法。
2,給成員變量賦值的方式:
(1)無參構造方法+setXxx()
(2)帶參構造方法
我們現在要定義一個標準的類,這個標準的類又被稱爲javabean。
什麼是javabean
類的修飾符是公共的
具備有參和無參構造
成員變量必須是private私有修飾
必須爲變量提供get和set方法
public class Student {
private String name;
private int age;
private boolean male;
public Student() {
}
public Student(String name, int age, boolean male) {
this.name = name;
this.age = age;
this.male = male;
}
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 boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
}
public static void main(String[] args) {
//創建兩個對象,使用構造和set方法分別去進行賦值
Student stu1 = new Student();
stu1.setName("小明");
stu1.setAge(18);
System.out.println("姓名:"+stu1.getName()+"年齡:"+stu1.getAge());
Student stu2 = new Student("小紅",19,true);
System.out.println("姓名:"+stu2.getName()+"年齡:"+stu2.getAge());
}
3,注意事項:
如果你的成員變量裏面涉及到Boolean類型,
那麼變量對應的setXxx方法不變,
但是getXxx方法需要寫成 isXxx
fn+alt+insert 快捷鍵
類名作爲形式參數和返回值
1,類名作爲形式參數案例
其實是該類的對象
public class Student {
public void study(){
System.out.println("每天在學習");
}
}
public class Teacher {
public void method(Student s){
s.study();
}
}
如果類作爲方法的參數,其實就是傳遞當前類的對象
public class Test {
public static void main(String[] args) {
Teacher t = new Teacher();
Student stu = new Student();
t.method(stu);
}
}
2,類名作爲返回值案例
返回的其實是該類的對象
public class Student {
public void study(){
System.out.println("每天在學習");
}
}
public class Teacher {
public Student getStudent(){
Student stu = new Student();
return stu;
}
}
如果類作爲方法的返回值,返回的其實是對象
public class Test {
public static void main(String[] args) {
Teacher t = new Teacher();
Student stu = t.getStudent();
stu.study();
}
}