Java筆記5——面向物件,類,成員變數,成員方法
接下來進入Java語言中的重要的部分:面向物件 首先講解一下類的概念: 類:是一組相關的屬性和行為的集合體; 物件:是該類事物的具體體現; 類是java中最小的單位,體現了封裝的思想,封裝了成員變數和方法; 類是一個抽象的概念,不能直接進行呼叫,我們需要建立物件,對其進行例項化後,通過物件呼叫該類的方法和屬性,物件才是該類的具體體現; 面向物件的例子:洗衣服 泡衣服——洗衣粉搓衣服——漂洗衣服——晾衣服 這一系列的動作是面向過程的洗衣服,如果是面向物件洗衣服,我們只需要用一個全自動洗衣機即可,只關注洗衣機,不用關注洗衣機到底是怎樣洗衣服的; 面向物件的特點:封裝,繼承,多型; 學生事物與學生類的對應關係: 學生事物--------------------學生類 屬性--------------------------成員變數 行為--------------------------成員方法
例子1:定義一個學生類 成員變數:姓名,年齡,學號 成員方法:睡覺,吃飯,上課
public class Student{ String name"小明";; int age=12; String number="130212"; public void eat(){ System.out.println("吃飯"); } public void sleep(){ System.out.println("睡覺"); } public void study(){ System.out.println("上課"); } }
既然定義了類,我們需要再定義一個測試類來呼叫此類: 建立物件格式:類名 物件名=new 類名 成員變數呼叫格式:物件名.變數名 方法呼叫格式:物件名.方法名(…)
public class StudentTest{ public static void main(String[] args){ Student student=new Student();//建立物件 System.out.println("姓名:"+student.name+",年齡:"+student.age+",學號:"+student.number); student.sleep(); student.eat(); } }
2.一般成員變數進行私有化,採用 set ,get 方法設定初值,得到初值。 private 私有的,用它來修飾成員變數,學生類和測試類的程式碼改為如下格式:
public class Student{
private String name;
private int age;
private String number;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public void setNumber(String number){
this.number=number;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getNumber(){
return number;
}
}
在測試類中採用set設定初值,get 得到初值
public class StudentTest{
public static void main(String[] args){
Student student=new Student();//建立物件
student.setName("小明");
student.setAge(12);
student.setNumber("130212");
System.out.println(student.getName());//小明
System.out.println(student.getAge());//12
System.out.println(student.getNumber());//130212
}
}
3.一個類要包含:成員變數,構造方法,成員方法;上面我們介紹了成員變數與成員方法,接下來要說的就是構造方法了 ; 構造方法:名字與類名相同,沒有void ,也沒有return; 可以有引數,稱之為有參構造,也可無引數,稱之為無參構造;在沒有定義構造方法時,系統預設為無參構造;當有確定的有參構造時,系統將不再預設為有無參構造了,如果此時需要用無參構造,需要定義出來; 採用有參構造可以直接在呼叫成員變數時給賦初值; 例如對學生類使用構造方法:
public class Student{
private String name;
private int age;
private String number;
public Student(String name,int age,String number){
this.name=name;
this.age=age;
this.number=number;
}
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public void setNumber(String number){
this.number=number;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getNumber(){
return number;
}
}
測試類如下:
public class StudentTest{
public static void main(String[] args){
Student student=new Student("小明",12,"130212");
System.out.println(student.getName());//小明
System.out.println(student.getAge());//12
System.out.println(student.getNumber());//130212
}
}
構造方法可以過載,方法名一致,引數不同,呼叫方法時根據引數不同,確定呼叫哪個方法; 4.接下來說下static關鍵字,其意思是靜態的; 在其他的一些成員方法中我們也可以定義為靜態的。但是有幾點需要注意:1.靜態方法中只能訪問靜態成員變數或者靜態成員方法,非靜態方法可以呼叫靜態的,也可以呼叫非靜態的。2.在靜態方法中沒有this關鍵字; static關鍵字的特點:隨著類的載入而載入;優於物件先存在;被類的所有物件所共享。 一般在呼叫static修飾的變數或者方法時,採用類名進行呼叫。 例子2:定義一個國籍為static成員變數,所有人共享這個國籍;
public class GuojiDemo {
private String name;
static String guoJi;//國籍是共用的,所以定義為static
public void setName(String name){
this.name=name;
}
public void setGuoJi(String guoJi){
this.guoJi=guoJi;
}
public String getName(){
return name;
}
public static String getGuoJi(){
return guoJi;
}
}
測試類:
public class TestGuoJi {
public static void main(String[] args) {
GuojiDemo guoJi1=new GuojiDemo();
guoJi1.setName("張三");
guoJi1.setGuoJi("中國");
System.out.println(guoJi1.getName());
System.out.println(GuojiDemo.getGuoJi());//被靜態所修飾的成員,推薦使用類名呼叫
GuojiDemo guoJi2=new GuojiDemo();
guoJi2.setName("李四");
guoJi2.setGuoJi("美國");
System.out.println(guoJi1.getName());
System.out.println(GuojiDemo.getGuoJi());//靜態記憶體中的中國被美國覆蓋,故輸出不一致
System.out.println(guoJi2.getName());
System.out.println(GuojiDemo.getGuoJi());
}
}
以上是我學習過程中的一些知識點的總結,如果有錯誤的地方,歡迎大家指正評論,希望我們一起學習,一起進步!