-
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();
}
}