黑馬程序員--面向對象編程-封裝

----------------- android培訓java培訓、期待與您交流!-----------------
-


package com.zhy;

/**
 * 面向對象的特徵一:封裝
 * 封裝:  是指隱藏對象的屬性和實現細節,進對外提供公共訪問方式
 * 好處:  將變化隔離,便於使用,提高重要性,提高安全性
 * 原則:  將不需要對外提供的內容都隱藏起來
 *           把屬性都隱藏,提供公共方法對其訪問 
 */


/**
 * private : 私有,全縣修飾符:用於修飾內中的成員(~變量、~方法)
 * 私有的只能用於本類中
 * 
 * 我們將age私有化後,那麼類意外即使建立了對象也不能訪問。
 * 但我們需要在persion類中提供對應的方法訪問age的方式。
 * 這就需要我們提供修改set和得到get的方法修改和獲取age的值。
 * 
 * 注意:  private 私有僅僅知識分裝的一種表現形式,還有以下權限
 * defult(默認)  本包以內可以訪問
 * protected(受保護)     同一個包或不同包的子類可以訪問
 * public(公共)      任何類都可以訪問	
 */
public class Persion{
	
	/**
	 * 靜態:static 
	 * 用法:  是一個修飾符,用於修飾成員(~變量、~方法)
	 * 當成員被靜態修飾後,就可以直接被類名調用  class.xxx;
	 * 可節約堆內存空間---》static修飾的放於方法區(共享區|數據區)
	 * 注意:   需要共享的數據用static.
	 * 
	 * 特點:  1隨着類加載的加載而加載,隨類消失而消失,週期最長  2優先於對象存在  
	 * 				3被所有對象共享  4 可直接被類名調用
	 * 
	 * 類變量和成員變量區別:
	 *  1 存儲位置:   類變量隨類加載存於方法區中,成員變量隨對象的建立而存在堆內存中
	 *  2 生命週期:   類變量生命週期最長,隨類消失而消失
	 *  					  成員變量隨對象消失而消失
	 *  
	 * static注意事項:
	 *  		1  靜態方法只能訪問靜態成員,非靜態方法可訪問 靜態|非靜態變量
	 *         2  靜態方法中不可以定義this,super關鍵字
	 *         		因爲靜態優先於對象存在,所以靜態方法中沒有this
	 * static 利弊:
	 * 	       利:  1  對對象的共享數據進行單獨空間存儲,節約空間  2 可以直接被類名調用
	 *        弊:  1   生命週期過長  2 訪問有侷限(只能訪問靜態)
	 */
	private  int age;
	private  String name;	
	private  String sex;		//成員變量
	public  static String country="CN";	//類變量
	
	/**
	 * 構造代碼塊
	 * 作用:   給對象進行初始化---是所有對象進行統一初始化
	 * 對象一建立就運行,優先於構造函數
	 * 
	 * 構造代碼庫中定義的是不同對象共性的初始化內容
	 */
	 {
		System.out.println("代碼塊:----初始化");
	 }
	 
	 /**
	  * 靜態代碼塊
	  * 特點: 隨類加載而加載,只執行一次,給類進行初始化操作
	  */
	 static {
		 System.out.println("static 代碼塊!");
	 }
   
	/**
	 * 構造函數:  與類名相同的函數,無返回值
	 * 對象一旦建立就會調用與之對應的構造函數
	 * 構造函數作用:可以用於給對象初始化
	 * 注:   1:若一個類沒有定義構造函數時,那麼系統會默認給該類添加一個
	 * 		   空參數的構造函數
	 *         2:若以創建構造函數,那麼系統會取消默認的構造函數
	 * 與其他函數區別:
	 * 構造函數是對象已建立就運行,給對象初始化,而其他函數是要對象調用才執行
	 * 一個對象建立,構造函數只運行一次而其他可被對象多次調用
	 */
	Persion(int age, String name,String sex){
		//this  關鍵字:-----》this指代本類當前的對象
		//this  簡單說就是哪個對象調用this所在的函數,this就代表誰
		//        --用於構造函數間互相調用
		//注:   只能定義在構造函數第一行,因爲初始化要先執行
		this();
		this.age =age ;
		this.name =name;
		this.sex =sex;
	}
	
	Persion(String country){
		System.out.println("XXX==name"+age);
	}
	
	Persion(){
		//無參構造函數
	}
	public int getAge() {
		return age;
	}
	
	/**
	 * 之所以對外提供訪問方式,是可以訪問方法中加入
	 * 邏輯語句對訪問的數據進行操作,提高代碼的健壯性
	 */
	public void setAge(int age) {
		if (age>0  && age<130) {
			this.age = age;
			speak();
		}else {
			System.out.println("are  you persion? failed age!");
		}
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	void speak(){
		System.out.println("age="+age);
	}
}

public class test7 {

	/**
	 * 主函數:   是一個特殊的函數,作爲程序的入口,可別jvm調用(主函數是固定格式--jvm識別)
	 * public :   代表函數訪問權限是最大的
	 * static :   代表主函數隨着類 的加載就已經存在了
	 * String[] args:   主函數參數
	 */
	public static void main(String[] args) {
		Persion persion = new Persion();
		//實現的構造函數
	    Persion p1 =new Persion(18, "張三", "男");
	    p1.speak();
	    System.out.println(Persion.country);
		//這是不能直接訪問的
		//persion.age = 20;
		//通過方法設置私有變量值
		persion.setAge(20);
		persion.speak();
	}
}




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