Java學習筆記五(封裝和幾個關鍵字的使用)

面向對象的特徵一:封裝性

問題的引入: 當我們創建一個類的時候,我們可以通過實例化類來對類中的屬性進行賦值操作。這時,賦值操作只受到屬性的數據類型和存儲範圍的限制,沒有其他的限制條件。但在實際問題中,我們可能還存在一些其他的限制條件,但是這些限制條件並不能在屬性聲明時體現,我們只能通過方法進行限制條件的添加,同時要防止用戶再通過對象 . 屬性的方法在對屬性進行賦值,則需要把屬性聲明爲私有的(private)。此時針對屬性就體現了封裝性。

封裝性的體現: 我們將類的屬性私有化(private),然後提供公共的(public)方法設置(set)和獲取(get)屬性的值。
注意:除了上面提到的屬性的私有化,封裝性還體現在不對外暴露的私有方法以及單例模式。

權限修飾符:Java規定的四種權限修飾符從小到大排列依次是private、缺省、protected、public。
這四種權限修飾符可以修飾類及類的內部成員;具體的說,可以修飾類中的:屬性、方法、構造器、內部類;修飾類時只能使用public和缺省兩種修飾符。
四種權限修飾符的課件範圍:private只在類內可見,缺省可以在同一個包內的類間可見,protected可在不同包的子類中可見,public在不同包之間可見;

總結封裝性:Java提供了四種權限修飾符來修飾類及類的內部成員,體現了類及類的內部成員在被調用時對外可見性的大小。
例子如下:

public class MyAnimalTest{
	public static void main(String[] args) {
		Animal1 ani = new Animal1();
		System.out.println(ani.getLeg());
		ani.setLeg(4);
		System.out.println(ani.getLeg());
		ani.setLeg(5);
		System.out.println(ani.getLeg());
	}
}
class Animal1{
	String name;
	private int age;
	private int leg;
	
	public void setLeg(int l) {
		if(l > 0 && l%2==0) {
			this.leg = l;
			
		}else {
			System.out.println("Error");
		}
	}
	public int getLeg() {
		return leg;
	}
}

類的內部成員之構造器(constructor)

構造器的作用
1、創建對象
2、初始化對象的信息

構造器的結構:權限修飾符 類名(形參列表);
幾點注意事項:
1、如果類中沒有提供構造器,則系統會默認提供一個空參的構造器;
2、一旦類中提供了構造器則系統就不會再提供空參的構造器;
3、同一個類中不同形參列表的構造器之間會構成重載;
4、每個類中至少會有一個構造器;

this關鍵字可以理解成創建或擬創建的對象。

public class MypersonTest {
	public static void main(String[] args) {
		
		Person1 p = new Person1();
		Person1 p1 = new Person1("shenshuo",24);
		System.out.println(p.getName()+","+p1.getName());
		p.setName("花花");
		System.out.println(p.getName()+","+p1.getName());
	}

}
class Person1{
	private String name;
	private int age;
	
	public Person1() {
		
	}
	
	public Person1(String name,int age) {
		this(); // 調用前面的構造器
		this.name = name;
		this.age = age;
	}
	
	
	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 void eat() {
		System.out.println("人喫飯");
	}
	public void study() {
		System.out.println("人可以學習");
	}
	
	
}

JavaBean是一種Java語言寫成的課重用組件

所謂的JavaBean是符合以下標準的Java類:
1、一個公共的類(即用public修飾的類)
2、有一個無參的公共的構造器(即有public修飾的無參構造器)
3、有屬性,且提供了屬性的get、set方法

public class Customer {//公共的類
	
	private int id;
	private String name;//屬性
	
	public Customer(){//公共的無參構造器
		
	}
	
	public void setId(int i){
		id = i;
	}
	public int getId(){//對應屬性的get、set方法
		return id;
	}
	public void setName(String n){
		name = n;
	}
	public String getName(){
		return name;
	}
	
}

屬性賦值的先後順序:

依次爲:
①默認初始化
②顯式初始化
③構造器初始化
④通過對象。屬性、對象。方法的方式賦值
①>②>③>④其中大於號是早於的意思。

三個關鍵字this、package和import:

this關鍵字的使用
this關鍵字可以用來修飾:屬性、方法、構造器;

this修飾屬性和方法理解成當前對象,this修飾構造器理解成正在創建的當前對象。

在類的方法中:可以通過this.屬性、this.方法的方式來調用當前對象的屬性和方法,但一般this省略不寫。特殊情況下,如果方法的形參名和類中的屬性名相同時,則需要顯示的使用this來說明此變量是屬性而非形參。
在構造器中:可以使用this.屬性、this.方法的方式來調用正在創建的當前對象中的屬性和方法,但通常this省略不寫,特殊情況下,如果構造器的形參名和類中的屬性名相同時,則需要顯示的使用this來說明此變量是屬性而非形參。

this調用構造器:可以通過this(形參列表)的方式來調用本類中其他指定的構造器。
幾點注意:
1、this(形參列表)只能放在構造器的首行,而且不能通過這種方式來調用它本身。
2、每個構造器中最多隻能聲明一個this(形參列表)來調用其他的構造器。
3、如果本類中有n個構造器,則最多隻能有n-1個構造器使用了this(形參列表)來調用其他的構造器;

class Person{
	
	private String name;
	private int age;
	
	
	public Person(){
		
//		this.eat();
		String info = "Person初始化時,需要考慮如下的1,2,3,4...(共40行代碼)";
		System.out.println(info);
	}
	
	public Person(String name){
		this();
		this.name = name;
		
	}
	
	public Person(int age){
		this();
		this.age = age;
		
	}
	
	public Person(String name,int age){
		this(age);
		this.name = name;
		//this.age = age;
		//Person初始化時,需要考慮如下的1,2,3,4...(共40行代碼)
	}
	
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}
	public void setAge(int age){
		this.age = age;
	}
	public int getAge(){
		return this.age;
	}
	
	public void eat(){
		System.out.println("人喫飯");
		this.study();
	}
	public void study(){
		System.out.println("人學習");
	}
	
}

package關鍵字的使用
爲了更好的實現項目中類的管理,提出了包的概念;
使用package聲明類或接口所屬的包,聲明在源文件的首行;
包也屬於標識符,要遵循標識符的命名規則,包名都使用小寫字母,還要做到見名知意;
其中,沒 . 一次,代表了一層文件目錄
注意:同一個包下不能有同名的類或接口,不同的包下可以有同名的類或接口。

import關鍵字的使用:(導入)
在源文件中使用import結構來導入指定保重的類和接口;
import一般聲明在package和類的聲明之間;
幾點注意事項
1、如果是本包下的或者是java.lang包下的類和接口,則不需要使用import導入;
2、如果有多個包中的結構需要導入,並列寫出即可;
3、如果有兩個不同包中的同名類,則在使用時至少要有一個類需要以全類名的方式顯示。
4、可以使用“xxx.*”的方式導入xxx包下的所有結構。但是如果時該包下子包中的結構則還需要顯示的導入子包。
import static用於導入類或接口中的靜態結構(屬性和方法);
例如:

package com.atguigu.java2;

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