標籤:des blog java 使用 io strong ar div
12 |
首先,這是一篇自己用的文章,不對讀者承擔任何責任,所以,要帶著批判的眼光來看下面的文章 |
|
|
這篇文章說了些什麼?
這文章是我近來8.6號來在編程思想上打的代碼,從0~200頁的源碼接近到在這裡,下文正是總結這0~200頁的的知識,涉及到介面,內部類.初始化,數值計算的一些細節.此文章不會一下子寫完,可能隔一天可能再補下來.因為代碼確實有點多..
注意
1 我的注釋不一定正確(不過各小標題和代碼一定是正確的,因為是書本上的原話,但是注釋不一定正確),如果你確信我的內容的話,你可能會損失很大,因為我只是個菜鳥,我只是來補救一些知識的而已,如果不複製(最好自己打上)代碼運行一次,可能會被我的在代碼的注釋所誤解, 歡迎提意見和評論~~~你的意見和評論是我更新的動力(促進我更快滴讀完編程思想)
本文適合讀者
適合有一定的編程基礎的人,因為My Code可能出錯,建議零基礎的人找本書先看看,或者一定要複製My Code運行一下,否則,後果將不堪設想 <( ̄▽ ̄)> 哇哈哈…因為我也只是新手
再一次提醒
下面的注釋只是我個人的總結.
我的注釋不一定正確(不過各小標題和代碼一定是正確的,因為是書本上的原話,但是注釋不一定正確)
,但是注釋的語序淩亂各種天花百草不說了.!!!!絕非書本原話!!!!所以要最好還是把My Code複製下來,運行一遍,也可以把我的注釋刪掉,或者提示我說應該怎麼說,應該怎麼說.
再一次感謝
1 感謝你可以抽出你的時間來進行下面閱讀,思考的碰撞是智慧產生的前提.謝謝你的閱讀和你願意複製My Code並閱讀我那千奇百怪無比醜的注釋來進行思考的碰撞!~!~
本文:
內部類對於外部類來說,像是定義的關係外部類對於內部類而言,像是繼承的關係
1.內部類的對象的建立
通常都需要依賴外部類對象來使用
1.定義一個外部類對象p
第一個p.new 內部類對
package test.java;public class Parcel2{class Contents{private int i=11;public int value(){return i;}}class Destination{private String label;Destination(String whereTo){label = whereTo;}String readLabel(){return label;}}//又建立兩個方法來得到對象,實現多態public Destination to (String s){return new Destination(s);}public Contents contents(){return new Contents();}public void ship(String dest){Contents c = contents();Destination d = to(dest);System.out.println(d.readLabel());}public static void main(String[] args) {Parcel2 p = new Parcel2();p.ship("Tasmania");Parcel2 q = new Parcel2();//可以兩種這樣的迴歸Parcel2.Contents c = q.contents();Parcel2.Destination d= q.to("Borneo");} }
3. .this和.new的介紹咯
package test.java;public class DotThis{void f(){System.out.println("DonThis.f()");}public class Inner{public DotThis outer(){return DotThis.this; //這個this 是innner的this}public void haveATry(){//this.f();DotThis.Inner.this.f();}void f(){System.out.println("Inner This");}}public Inner inner(){return new Inner();}public static void main(String[] args) {DotThis dt = new DotThis();//注//DotThis.Inner dt = new DotThis().new Inner();//這樣才可以DotThis.Inner dti = dt.inner();//返回內部類的對象//給dti的inner//在這裡也可以證明 內部類必須依賴一個外部類的對象來建立 對象//但這就奇怪了//如果這樣的話,‘//建立一個內部類的對象-> dti.outer().f();//但是這個通過Inner的返回傳現調用的是外部類的F()方法,也就是說,外部類的dti.haveATry();//這裡證明了DTI是內部類的對象}}
DonThis.f()Inner This
4.在方法裡定義內部類
package test.java;interface Destination{}public class Parcel5{public Destination destination(String s){ //方法裡定義內部類class PDestination implements Destination{ //這個類是方法的一部分,而不是類的一部分private String label;//在方法外不能訪問 PD類private PDestination(String whereTo){label = whereTo;}public String readLabel(){return label;}}return new PDestination(s); //返回內部類對象}public static void main(String[] args) {Parcel5 p= new Parcel5();Destination d = p.destination("ABC"); //也能被賦值}}
5.if裡面的內部類
package test;interface Destination{}public class Parcel6{private void internalTracking(boolean b){if ( b){class TrackingSlip{private String id;TrackingSlip(String s){id =s;}String getSlip(){return id;}}TrackingSlip ts = new TrackingSlip("Slip");String s = ts.getSlip();System.out.println(s);//在if裡面定義 和使用內部類完全 大丈夫~~~ 表明 內部類 也只是一個變數類型(特殊的)}//TrackingSlip ts = new TrackingSlip("x");在 if 外 Tracking類型就無法解析了}public void track(){internalTracking(true);}public static void main(String[] args) {Parcel6 p = new Parcel6();p.track();}}
Slip
6.匿名內部類
new 父類介面(){ //注意在這裡會覆蓋父類的方法.}//分號不能丟;
package test;public class Parcel8{public Wrapping warpping (int x){//這裡設定一個參數,傳過來當構造器的從參數return new Wrapping(x)//如果高早起裡有參數,就這樣來{public int value(){return super.value()*47; //匿名內部類只能寫同名方法,來進行局部覆蓋,匿名內部類方法的調用//必須依賴一個類,也必須依賴一個 返回該類的對象的方法}};}public static void main(String[] args) {Parcel8 p = new Parcel8();Wrapping w = p.warpping(10);//這裡返回了明顯值得是匿名內部類的對象System.out.println(w.value());}}class Wrapping{private int i;public Wrapping (int x){i =x;}public int value(){return i;}}
470
7.內部類裡面的賦值的數字必須final
package test.java;public class Parcel9{//public Destination destination (final String dest){public Destination destination ( String dest){return new Destination(){private String label = dest;//在內部類賦值的的時候,一定要將賦值的參數變成終態public String readLabel(){return label;}};}public static void main(String[] args) {Parcel9 p = new Parcel9();Destination d = p.destination("ABC");}}class Destination{private String label;Destination (){}}
8.在內部類裡面使用方法
new 父類(){ //注意這裡像是一個新類那樣,不能調用方法. 而調用方法就 { //初始化域. }};
package test.java;abstract class Base{public Base(int i){System.out.println("Base constroct , i =" +i);}public abstract void f();}public class AnnoymousConstructor{public static Base getBase(int i){return new Base(i){//首先會new一下建構函式{System.out.println("inside instatnce initializer");//在main {} static{}裡頭才能調用方法- -~~~暈菜了}public void f(){System.out.println("In anoymous f()");}//沒有實現f()方法會報錯, 因為是抽象的方法};}public static void main(String[] args) {Base base = getBase(47);base.f();}}
8.匿名內部類實現Factory 方法
package test.java;interface Service{void method1();void method2();}interface ServiceFactory{Service getService();} class Implementation1 implements Service{//聲明為abstract class的時候,就不會產生奇葩行為//privat/e Implemention1{}//public void method1();//public vo private Implementation1(){} public void method1() { System.out.println("Implements method"); } public void method2() { System.out.println("Implements method2"); } //static方法 public static ServiceFactory factory = new ServiceFactory() { public Service getService() { return new Implementation1(); } };} class Implementation2 implements Service{ private Implementation2(){} public void method1() { System.out.println("Implementation2 method1"); } public void method2() { System.out.println("Implementation2 method2"); } //static 方法 public static ServiceFactory factory = new ServiceFactory() { public Service getService() { return new Implementation2(); } }; } public class Factories{ public static void serviceConsumer(ServiceFactory fact) { Service s = fact.getService(); s.method1(); s.method2(); } public static void main(String[] args) { //為了讓別人不輕易滴製造類的對象, 運用 static來返回對象 ,匿名內部類,不用再建立類的對象的調用serviceConsumer(Implementation1.factory);serviceConsumer(Implementation2.factory);} }
9.在介面中可以定義類的裡面.
package test.java;public interface ClassInIterface{void howdy();class Test implements ClassInIterface{public void howdy(){System.out.println("howdy!");}public static void main(String[] args) {new Test().howdy(); //因為介面都是自動提升為 public 和static的, 變數添加為final ,//這樣的話證明了介面裡面應該是可以定義類,和實作類別,但是不可以寫明方法體}}}