<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    未知數(shù)據(jù)

    從頭看Java

       ::  :: 聯(lián)系 :: 聚合  :: 管理
      28 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

    1. 類和對(duì)象

      

         類可以認(rèn)為是自定義的數(shù)據(jù)類型,.類用于描述某一類對(duì)象的共同特征,對(duì)象是類的具體存在.

     

    java中的對(duì)象及其屬性數(shù)據(jù)是存放在堆(heap)內(nèi)存中的,而引用變量則是存放在棧內(nèi)存中的.

        Person p = new Person();

        系統(tǒng)會(huì)生成兩個(gè)實(shí)體,一個(gè)是引用變量p,一個(gè)是Person對(duì)象.棧內(nèi)存中的引用變量p指向堆內(nèi)存中的Person對(duì)象,變量p只是存儲(chǔ)了一個(gè)地址值,本身不包含任何實(shí)際數(shù)據(jù).堆內(nèi)存中的數(shù)據(jù)不允許直接訪問,只能通過該對(duì)象的引用去訪問該對(duì)象.

        Person p1 = p;

        將p變量賦給p1,也就是將p變量保存的地址值賦給p1.這樣p1也指向了堆內(nèi)存中的同一個(gè)對(duì)象,這樣不管是通過p還是p1訪問對(duì)象的屬性和方法,結(jié)果都是訪問同一個(gè)對(duì)象的屬性和方法,返回的結(jié)果都是一樣的.也就是說堆內(nèi)存中的對(duì)象可以有多個(gè)引用.

        p = null;

        當(dāng)堆內(nèi)存中的某個(gè)對(duì)象沒有引用執(zhí)行它時(shí),程序?qū)o法再訪問到這個(gè)對(duì)象,這個(gè)對(duì)象也就是無用的了,垃圾回收機(jī)制將回收這個(gè)對(duì)象,釋放該對(duì)象所占用的內(nèi)存空間.因此,如果需要垃圾回收機(jī)制回收某個(gè)對(duì)象,只要切斷該對(duì)象的所有引用即可,也就是將相關(guān)的引用賦為null.

    內(nèi)存示意圖:

    2. 面向?qū)ο蟮奶卣?/font>

        1. 封裝

         對(duì)象的狀態(tài)信息隱藏在對(duì)象內(nèi)部,不允許外部程序直接訪問對(duì)象內(nèi)部信息,而是通過該類所提供的方法來實(shí)現(xiàn)對(duì)內(nèi)部信息的操作和訪問.類似客觀世界中的屬性都是隱藏在對(duì)象內(nèi)部的,外部無法直接操作和修改.良好的封裝是通過對(duì)外暴露足夠的方法來操作和訪問類的內(nèi)部信息.

      訪問控制級(jí)別從private到public逐次變大

     

        2. 繼承

           1. java不支持多重繼承,每個(gè)子類只有一個(gè)直接父類

           2. Object類是一切類的父類

           3. 子類繼承不能繼承父類的私有的成員變量和成員方法.

               在抽象類中定義了私有的成員方法或變量,子類不能訪問到父類的私有成員,所以子類中重寫父類的私有方法,實(shí)際上是新建了一個(gè)方法;在接口定義中的成員是不能為私有的,否則編譯會(huì)報(bào)錯(cuò),因?yàn)榻涌谑怯脕砉_的,私有的變量和方法不能被繼承或?qū)崿F(xiàn).

           4. 覆蓋和被覆蓋的方法必須同是實(shí)例方法或同時(shí)類方法

           5. 子類中的變量可以覆蓋父類中同名的變量,但并不是覆蓋,而只是屏蔽,父類的變量并未改變

           6. 調(diào)用子類構(gòu)造方法之前,系統(tǒng)會(huì)先調(diào)用父類的構(gòu)造方法,如果有多個(gè)父類,則從上到下依次調(diào)用

           7. 內(nèi)存機(jī)制中,父類和子類是占用同一塊內(nèi)存空間的,只是子類在父類的基礎(chǔ)上增加自己的屬性和方法.

           8. 在子類中可通過super訪問父類中的成員.

           9. 系統(tǒng)創(chuàng)建某個(gè)類的對(duì)象時(shí),系統(tǒng)總會(huì)隱式地創(chuàng)建該類父類的對(duì)象.在子類方法中,super指向該方法調(diào)用者的子類對(duì)象的父類對(duì)象.

    代碼清單: 繼承

    abstract class A {    
          int i=1;    
          public void printI() {    
            System.out.println("i="+i);    
          }    
    }    
           
        public class B  extends A{    
          int i=2;    
          public void printI() {
              super.printI();
          }
          public static void main(String[] args) {    
            B b=new B();    
            b.printI();    //i=1;
          }    
        }  

     3. 多態(tài)

         1. 相同類型的變量,執(zhí)行同一個(gè)方法時(shí)呈現(xiàn)出不同的行為特征,就是多態(tài).多態(tài)發(fā)生在編譯時(shí)類型和運(yùn)行時(shí)類型不一致時(shí).

         2. 引用類型在編譯階段只能調(diào)用其編譯時(shí)類型所具有的方法,運(yùn)行時(shí)則執(zhí)行它運(yùn)行時(shí)類型所具有的方法

         3. 引用變量只能調(diào)用聲明該變量的所用的類包含的方法,通過引用變量只能訪問到編譯時(shí)類所定義的屬性.

         例如 BaseClass bsc = new SubClass()通過變量bsc只能調(diào)用BaseClass所定義的方法,而不能訪問sub(),所以bsc.sub()會(huì)編譯不通過.可以通過bsc訪問test(),但運(yùn)行時(shí)調(diào)用的是SubClass類的方法.通過bsc訪問的屬性book是BaseClass的屬性.

     
    class BaseClass {
        
        public int book = 1;
        
        public void base() {
            System.out.println("父類的普通方法");
        }
        
        public void test() {
            System.out.println("父類被覆蓋的方法");
        }
        
    }
     
    public class SubClass extends BaseClass{
        
        public String book = "JAVA";
        
        public void test() {
            System.out.println("子類覆蓋父類的方法");
        }
        
        public void sub() {
            System.out.println("子類的普通方法");
        }
     
        public static void main(String[] args) {
     
            System.out.println("=======BaseClass bc = new BaseClass();=======");
            BaseClass bc = new BaseClass();
            System.out.println(bc.book);
            bc.test();
            bc.base();
            
            System.out.println("=======SubClass sc = new SubClass();=======");
            SubClass sc = new SubClass();
            System.out.println(sc.book);
            sc.test();
            sc.base();
            
            System.out.println("=======BaseClass bsc = new SubClass();=======");
            
            BaseClass bsc = new SubClass();// 編譯時(shí)類型和運(yùn)行時(shí)類型不一致時(shí),發(fā)生多態(tài)
            System.out.println(bsc.book);//打印:1,對(duì)象的屬性不具有多態(tài)性,只能訪問編譯時(shí)類型中的屬性
            bsc.test();//子類覆蓋父類的方法,運(yùn)行時(shí)調(diào)用的是運(yùn)行時(shí)類型所定義的方法.
            bsc.base();//父類的普通方法
            //bsc.sub();// 只能訪問編譯時(shí)類型中所定義的方法
            
        }
     
    }
    posted on 2009-01-14 23:01 wangjc 閱讀(220) 評(píng)論(0)  編輯  收藏 所屬分類: 從頭看Java
    主站蜘蛛池模板: 91在线亚洲精品专区| 国产91成人精品亚洲精品| 无限动漫网在线观看免费| 亚洲成在人线aⅴ免费毛片| 国产精品亚洲mnbav网站 | 国产亚洲福利精品一区二区| 久久激情亚洲精品无码?V| 999在线视频精品免费播放观看| 色偷偷亚洲第一综合| 久久亚洲精品成人| 在线观着免费观看国产黄| a视频免费在线观看| 亚洲影视自拍揄拍愉拍| 亚洲色欲久久久综合网东京热| 国产精品免费网站| 中国一级毛片免费看视频| 亚洲国产精品一区二区三区在线观看| 亚洲七七久久精品中文国产| 无遮免费网站在线入口| 精品无码国产污污污免费网站国产| 亚洲最大的黄色网| 亚洲成A人片在线观看无码不卡| 在线播放高清国语自产拍免费 | 亚洲精品无码你懂的| 亚洲va久久久噜噜噜久久| 国产成人精品免费直播 | 青青草原亚洲视频| 午夜毛片不卡高清免费| 久久不见久久见免费视频7| 免费无码午夜福利片69| 亚洲精品无码久久久久A片苍井空| 久久精品国产亚洲av麻| 亚洲色偷偷狠狠综合网| 黑人粗长大战亚洲女2021国产精品成人免费视频| 丝袜足液精子免费视频| 国产精品亚洲一区二区三区久久 | 国产亚洲精品国产福利在线观看| 91亚洲性爱在线视频| 亚洲v高清理论电影| 成人午夜亚洲精品无码网站| 国产小视频免费观看|