Day5:面向对象的定义(中)
生活随笔
收集整理的這篇文章主要介紹了
Day5:面向对象的定义(中)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、面向對象的特點------封裝性
/* 封裝:隱藏實現細節,對外提供公共的訪問方式。1,安全性。 2,復用性。 3,隔離的變化。后期應用于分層設計。*/ /* 描述人: 屬性:姓名,年齡。 行為:說話。 */class Person {private String name;private/*私有*/ int age;/*將成員變量私有化,對外提供set get方法,對其訪問的原因就是可以屬性可控。私有關鍵字private 是一個權限修飾符,只能修飾成員(成員變量,成員函數)。注意:私有僅僅是封裝的表現形式之一!*/public void setName(String s){name = s;}public String getName(){return name;}public void setAge(int a){/*可以加入健壯性的判斷。if(a<=0 || a>120)throw */age = a;}public int getAge(){return age;}void speak(){System.out.println(name+":"+age);} }class PersonDemo {public static void main(String[] args) {Person p = new Person(); // p.name = "旺財"; // p.age = -20;p.setName("旺財");p.setAge(20);p.speak();} }?
2、this關鍵字
/* this關鍵字。 1,區分局部變量和成員變量同名的情況。 用this標識的是成員變量。this到底是個啥呢? this其實就代表對象,代表哪個對象呢? 哪個對象調用了this所在的函數。this就指向哪個對象。 (this就代表著當前這個對象)*/class Person {private String name;private int age;Person(){this.name = "baby";System.out.println("Person() run...");}Person(String name){this.name = name;//局部變量和成員變量重名了。System.out.println("person(name)...run...");}Person(String name,int age){this.name = name;this.age = age;System.out.println("person(n,a)....run....");}public void show(){System.out.println(this.name+"...."+this.age);}public void method(int x){this.show();} }class ThisDemo {public static void main(String[] args) {Person p = new Person("李四");p.show();Person p1 = new Person("王武");p1.method();} } /* this關鍵字的用法二: 構造函數間調用。this關鍵字。 用法格式:this(對應的實參列表); 注意:必須定義在構造函數的第一行,因為初始化動作要先執行。構造間調用其實也是為了初始化的復用性。不要出現互相調用,產生遞歸,容易棧溢出。 */class Person {private String name;private int age;Person(){this.name = "baby";System.out.println("Person() run...");}Person(String name){this.name = name;System.out.println("person(name)...run...");}Person(String name,int age){this(name);//用于調用構造函數。注意:調用構造函數的語句必須定義在構造函數的第一行!this.age = age;System.out.println("person(n,a)....run....");}public void show(){System.out.println(this.name+"...."+this.age);}public void method(){this.show();} }class ThisDemo2 {public static void main(String[] args) {Person p = new Person("李四",20);new Person();} } /* this在代碼中的應用。 */ class Person {private int age;Person(int age){this.age = age;}/*定義一個功能,判斷和別人是否是同齡人。結果?boolean參數?Person功能內部如果用到了調用該功能的對象,用this代表這個對象。*/blic boolean equalsAge(Person p)pu{return this.age == p.age;} }class ThisDemo3 {public static void main(String[] args) {Person p1 = new Person(32);Person p2 = new Person(23);boolean b = p1.equalsAge(p2);System.out.println("b="+b);} }?
3、static關鍵字
/* static 關鍵字是一個成員修飾符。static關鍵字的特點: 1,靜態的數據被對象所共享。 2,它優先于對象加載并存在。隨著類的加載而加載。 3,靜態的數據多了一種調用方式:可以直接被類名所調用。既然靜態調用這么方便,是不是可以讓所有的成員變量變成靜態的呢? 不行,因為數據中有些是對象共享的數據需要靜態化,節省內存空間,嚴謹。 有些數據是對象特有的數據,這些存儲到對象中。 這也是成員變量是否要靜態的依據!舉例:教室里的飲水機和每個對象特有的杯子的故事!靜態變量和成員變量的區別?名稱(所屬): 靜態變量所屬于類,也稱為 類變量。 成員變量所屬于對象,也稱為 實例變量。內存位置: 靜態變量存儲于方法區中的靜態區中。 成員變量存儲于堆內存的對象中。加載先后: 靜態變量隨著類的加載而加載,隨著類的消失而消失。 成員變量隨著對象的加載而加載,隨著對象的消失而消失。*/ class Person {String name;static String country = "cn"; }class StaticDemo {public static void main(String[] args) {Person p = new Person();p.name = "lisi";//靜態的成員的調用。 System.out.println(Person.country);} } /* 靜態方法: 1,靜態方法只能訪問靜態成員,不能直接訪問非靜態成員。非靜態的方法可以訪問靜態和非靜態。其實原因就是加載的先后順序問題。先加載的不能訪問后加載。 2,靜態方法中不可以出現this,super關鍵字。什么時候方法靜態? 方法中如果沒有訪問對象的特有數據,或者說沒有調用過非靜態的內容。 該方法就靜態化。雖然不靜態也可以使用,但是創建調用它的對象沒有意義。*/ class Person {String name;static String country = "cn";static void show(){ // System.out.println(this.name);//編譯失敗。 System.out.println(country);}static void method(){System.out.println(Person.country);} }class StaticDemo2 {public static void main(String[] args) { // new Person().show(); // Person.show(); // new Person().method(); Person.method();} }?
4、main方法
/*public static void main(String[] args) public : 權限修飾符,主方法的權限最大。 static : 隨著類的加載而加載,直接被類名調用。 void : 主方法沒有具體的返回值。 main : 方法名稱,不是關鍵字,但是該名字固定。 String[] args : 方法的參數列表,一個字符串數組參數。args就是變量名。*/class MainDemo {int x = 4;public static void main(String[] args) //args = new String[0]; {/*System.out.println(args.length);//[Ljava.lang.String;@19836edfor(int x=0; x<args.length; x++){System.out.println(args[x]);}*/new MainDemo().show();}void show(){System.out.println(x);} }?
5、靜態代碼塊
/* 靜態代碼塊。 特點:隨著類的加載而執行,而且只執行一次。 作用:用來給類進行初始化的。*/class StaticCode { // static int x= 3;static { // x = 5;System.out.println("a");}static void show(){System.out.println("show run");} }class StaticCodeDemo {static {System.out.println("b");}public static void main(String[] args) {StaticCode.show();}static {System.out.println("c");} }?
6、對象的初始化過程
?
7、小練習
A、
class Person {private String name = "baby";{//構造代碼塊作用,給所有的對象初始化。System.out.println("code......"+this.name);cry();}Person()//構造函數只給對應的對象初始化。 { // cry();System.out.println("person() run....");}Person(String name){this.name = name; // cry();System.out.println("person(name) run......");}void cry(){System.out.println("哇哇......");}}class CodeDemo {public static void main(String[] args) {Person p = new Person();Person p1 = new Person("lisi");{//局部代碼塊。控制局部變量的生命周期。int x = 4;System.out.println("x="+x);}System.out.println("x="+x);System.out.println("over");} }B、
/* 綜合練習,練習一下之前的小知識點。主函數定義代碼--->封裝到函數中提高復用性---->將函數封裝到對象中。*/ class ArrayToolDemo {public static void main(String[] args) {int[] arr = {34,120,78,45,90,33};int max = ArrayTool.getMax(arr);int min = ArrayTool.getMin(arr);System.out.println("max="+max);System.out.println("min="+min);}}C、
/** 這是一個用于操作數組的工具類,功能有獲取最值,排序等一系列靜態方法。@author 張三 @version V1.0*/public class ArrayTool {/**構造函數。*/public ArrayTool(){}/**獲取數組的最大值。@param arr 接收的是一個int類型的數組。@return 返回該數組的最大值。*/public static int getMax(int[] arr){int max = arr[0];for(int x=1; x<arr.length; x++){if(arr[x]>max)max = arr[x];}return max;}/**獲取數組的最小值。@param arr 接收的是一個int類型的數組。@return 返回該數組的最小值。*/public static int getMin(int[] arr){int min = arr[0];for(int x=1; x<arr.length; x++){if(arr[x]<min)min = arr[x];}return min;}/**對整型數組進行從小到大的排序。@param arr 接收的是一個int類型的數組。*/public static void selectSort(int[] arr){for (int x=0; x<arr.length-1 ;x++ ){for (int y=x+1; y<arr.length ;y++ ){if(arr[x]>arr[y]){swap(arr,x,y);}}}}/**對數組中的兩個位置的元素進行置換。@param arr 接收的是一個int類型的數組。@param a 需要置換的元素的角標@param b 需要置換的另一個元素的角標*/private static void swap(int[] arr,int a,int b){int temp = arr[a];arr[a] = arr[b];arr[b] = temp;} }?
轉載于:https://www.cnblogs.com/vijay/p/3502917.html
總結
以上是生活随笔為你收集整理的Day5:面向对象的定义(中)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速求幂(Quick Exponenti
- 下一篇: 我的旧电脑