(三)封裝與類

目錄

一、類

二、對象

三、封裝對象(JavaBean )

四、this、final關鍵字


一、類

1、成員:屬性(成員變量)、方法

2、類的創建:

package day11;

修飾符 class 類名 {
	修飾符 屬性類型 屬性名稱; //定義屬性;
	
	修飾符 返回值 方法名() { //定義方法
		
	}
}

注意: 

①文件名必須與類名相同,且首字母必須大寫。

②一個Java文件中只允許存在一個public類,但可存在多個非public類。

③修飾符包含:private、default(默認不寫)、protect、public

④上表中,private的作用範圍僅在類內部,表示僅在本類內部可對其進行修改,其它類不能,其餘修飾符同理。

案例:創建學生信息類,包含學生學號、姓名、電話的屬性,還包含輸出學生信息的方法。

package day11;

public class Stuinfo {
	public int id;
	public String name;
	public int tel;
	
	public void showInfo() {
		System.out.println("學生信息如下:");
		System.out.println("學號:"+id+" "+"姓名:"+name+" "+"電話:"+tel);
	}
}

二、對象

1、創建對象:

案例:創建學生信息類的對象,爲屬性賦值並調用該類內部的方法。

package day11;

public class Test1 {
	public static void main(String[] args) {//main方法中創建對象
		Stuinfo stu=new Stuinfo();//new StuInfo對象
		
		stu.id=1;//賦值
		stu.name="張三";
		stu.tel=123456;
		
		stu.showInfo();//調用類中方法
	}
}

運行結果:

注意:要在main方法中創建對象。

 2、構造方法(構造器)

①含義:屬於類中特殊方法,主要用於初始化類中屬性的值。

②語法:

public 類名{
    賦初值語句
    ...
}

案例1:爲Stuinfo類創建含有三個參數的構造方法,併爲類中屬性賦初值。

package day11;

public class Stuinfo {
	public int id;
	public String name;
	public int tel;
	
	public Stuinfo(int ids,String names,int tels){ //含有三個參數的構造器
		id=ids;
		name=names;
		tel=tels;
	}
	
	public void showInfo() {
		System.out.println("學生信息如下:");
		System.out.println("學號:"+id+" "+"姓名:"+name+" "+"電話:"+tel);
	}
}

注意:對一個只包含有變量構造器的類創建對象時,若使用Stuinfo stu = new Stuinfo();會報錯(如下圖)。 

正確創建對象的方法:

 案例2:可變個數的方法形參

package day11;

public class Stuinfo {
	public void ShowInfo(String ...str) { //也可使用String str[]代替String ...str
		System.out.println("輸入的參數爲:");
		for(int i=0;i<str.length;i++) {
			System.out.print(str[i]+" ");
		}
	}
}

注意:當參數即包含確定的類型又包含不確定個數的參數時,要把確定的參數放在String ...str的前面,中間使用逗號隔開。

package day11;

public class Stuinfo {
	public void ShowInfo(int id,String ...str) {
		System.out.println("輸入的參數爲:");
		for(int i=0;i<str.length;i++) {
			System.out.print(str[i]+" ");
		}
	}
}

3、類變量、類方法

①含義:使用static關鍵字修飾的屬性、方法稱爲類變量、類方法。

②類變量:類變量被賦值後其值被共享。

案例:證明類變量被賦值後其值被共享。

package day11;

public class Stuinfo { //Stuinfo類
	public static int id;

	public Stuinfo(int ids) { //構造方法
		id=ids;
	}
	public static void getId() {
		System.out.println(id);
	}	
}

class Test1 {
	public static void main(String[] args) {
		Stuinfo stu1=new Stuinfo(10); //創建stu1對象賦初值爲10並輸出其值
 		stu1.getId();
		Stuinfo stu2=new Stuinfo(11);//創建stu2對象賦初值爲11並輸出stu1的值
		stu1.getId();
	}
}
//比較兩次stu1中的id值是否發生變化,若發生改變則可證上述描述無誤。

運行結果:

③類方法:使用static關鍵字修飾後可使用匿名對象調用其方法。

案例:證明類方法可用匿名對象直接調用。

package day11;

public class Stuinfo {
	public static void print() {
		System.out.println("hello world");
	}	
}
class Test1 {
	public static void main(String[] args) {
		Stuinfo.print(); //注意:不屬於匿名對象
	}
}

運行結果:

若不用static修飾,直接使用匿名對象調用:

④匿名對象:

package day11;

public class Stuinfo {
	public static void print() {
		System.out.println("hello world");
	}	
}
class Test1 {
	public static void main(String[] args) {
		new Stuinfo().print();
	}
}

4、靜態、非靜態代碼塊

①作用:初始化

②非靜態代碼塊:

  • 可調用靜態、非靜態屬性或對象。
  • 創建對象都會執行一次代碼塊。
  • 同爲代碼塊按先後順序執行。

③靜態代碼塊:

  • 不可以調用非靜態屬性、方法。
  • 靜態代碼塊的執行要早於非靜態代碼塊。
  • 靜態代碼塊僅在首次創建對象時執行,以後不再執行。

④執行順序:代碼塊(先靜態後非靜態、先上後下順序)->顯示初始化->構造方法(構造器)

三、封裝對象(JavaBean )

1、含義:使代碼使用更安全,便於操作。

2、封裝方法:

①屬性的修飾變爲private(保證外部不能直接修改屬性的值)。

②添加set、get方法,步驟如下圖:

鼠標右鍵->按下圖操作

勾選屬性

點擊創建

創建完成,如下圖所示

四、this、final關鍵字

1、this關鍵字作用:

      ①當形參與變量重名時使用this區分。

      ②在方法中使用this提高代碼的可讀性。

案例:構造函數中使用this爲屬性初始化。

package day11;

public class Stuinfo {
	private int num;
	private String name;
	
	public Stuinfo(int num,String name) { //儘管形參名與屬性名相同也可以區分
		this.num=num;
		this.name=name;
	}
}

案例2:在構造方法中使用this。

class Person{
	private String name ;		
	private int age ;			
	public Person(){	 
		System.out.println("新對象實例化") ;
	}
	public Person(String name){
		this();      // 調用本類中的無參構造方法
		this.name = name ;	
	}
	public Person(String name,int age){	
		this(name) ;  // 調用有一個參數的構造方法
		this.age = age;
	}
	public String getInfo(){	
		return "姓名:" + name + ",年齡:" + age ;
	}  
}

注意:

①static修飾的方法(類方法)中不可使用this關鍵字。

②this調用本類中的其它構造器,至少保證有一個不適用this()。

2、final關鍵字:

①標記類:該類不能再被繼承。

②標記方法:該方法不能被重寫。

③標記變量:該變量變爲常量(常量要賦初值,並建議全部字符大寫)。

不足請留言!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章