欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

對(duì)Java的面對(duì)對(duì)象編程中對(duì)象和引用以及內(nèi)部類的理解

 更新時(shí)間:2016年01月07日 08:45:13   作者:jevien  
這篇文章主要介紹了對(duì)Java的面對(duì)對(duì)象編程中對(duì)象和引用以及內(nèi)部類的理解,需要的朋友可以參考下

最近利用下班的時(shí)候看了看的think in java感覺再看 和第一次看大不一樣
接下來說一下java中對(duì)象和引用的關(guān)系,以及內(nèi)部類的概念。
1、java中一切都是對(duì)象
 在java中是什么來操作者對(duì)象呢?答案是引用,這就好比C或者C++中的指針。
如果用擁有一個(gè)引用,那么此時(shí)你必須讓其和一個(gè)對(duì)象關(guān)聯(lián)在一起,否則這個(gè)引用并不會(huì)像你想象的那樣任由你的控制,例如你創(chuàng)建了一個(gè)String的引用:

String s ;

而此時(shí)并未與任何對(duì)象關(guān)聯(lián),如果此時(shí)你去做一些操作,如調(diào)用String的一些方法,肯定是會(huì)出現(xiàn)問題,(一些基本類型除外,因?yàn)槟阍诙x的時(shí)候,它們就會(huì)賦予初始值的),所以在使用錢必須和對(duì)象進(jìn)行關(guān)聯(lián):

String s = new String();

或者

String s = “my name is ajun”;

像這樣就可以了。
2、怎么和對(duì)象進(jìn)行關(guān)聯(lián)
在java中通常會(huì)通過new來創(chuàng)建一個(gè)對(duì)象,來和引用進(jìn)行關(guān)聯(lián),如:

String s = new String("my name is ajun");

這樣不僅創(chuàng)建了一個(gè)對(duì)象和引用s進(jìn)行關(guān)聯(lián),同事也進(jìn)行初始化,同時(shí)我們也可以創(chuàng)建屬于自己的對(duì)象類型。
3、存儲(chǔ)位置
(1)堆棧:一般存儲(chǔ)引用和基本類型變量,堆棧主要是通過堆棧指針上下移動(dòng)來對(duì)內(nèi)存進(jìn)行分配和釋放。
基本類型變量并不適應(yīng)于new進(jìn)行創(chuàng)建,因?yàn)槠渌嫉膬?nèi)存較小。
(2)堆:用于存儲(chǔ)java對(duì)象,當(dāng)程序執(zhí)行new的時(shí)候,堆就會(huì)分配一個(gè)空間給這個(gè)對(duì)象,記住堆進(jìn)行內(nèi)存的分配和釋放是比堆棧進(jìn)行存儲(chǔ)和釋放內(nèi)存消耗更多的時(shí)間,這就是基本類型變量要存在堆棧中了,因?yàn)榛绢愋妥兞渴怯玫淖铑l繁的,頻繁的存儲(chǔ)和釋放內(nèi)存,在消耗更多的時(shí)候,性能可想而知的。
4、內(nèi)部類
(1)、內(nèi)部類基礎(chǔ)知識(shí):
一般定義在java類內(nèi)部的類成為內(nèi)部類
內(nèi)部類可以分為:定義在方法體外部的類、定義方法內(nèi)部的類、靜態(tài)內(nèi)部類(只能定義在方法外部),匿名內(nèi)部類
說明:
定義在方法外面的類:
類的成員變量(靜態(tài)、非靜態(tài))可以訪問,為了保證能夠正確的引用的類的成員變量,所以必須先實(shí)例化外部類的對(duì)象,才可以實(shí)例化內(nèi)部類的對(duì)象
訪問權(quán)限可以任何,可以把它看成類的成員變量,這樣理解就好多來了。
定義在方法體內(nèi)的類;
類的成員變量(靜態(tài)、非靜態(tài))可以訪問,為了保證能夠正確的引用的類的成員變量,所以必須先實(shí)例化外部類的對(duì)象,才可以實(shí)例化內(nèi)部類的對(duì)象
訪問權(quán)限不可以有,把他看成方法的局部變量就可以了。
靜態(tài)內(nèi)部類:
只能訪問類的靜態(tài)成員變量
訪問權(quán)限任何
匿名內(nèi)部類:
類的成員變量(靜態(tài)、非靜態(tài))可以訪問,為了保證能夠正確的引用的類的成員變量,所以必須先實(shí)例化外部類的對(duì)象,才可以實(shí)例化內(nèi)部類的對(duì)象
訪問權(quán)限不可以有
(2)、內(nèi)部類的作用
內(nèi)部類可以很好的隱藏類,一般類不允許有private protect default訪問權(quán)限。
內(nèi)部類可以實(shí)現(xiàn)多重繼承,彌補(bǔ)了java不能多繼承的特點(diǎn)
(3)、例子

package com.ajun.test.innerclass.example; 
 
/** 
 * 水果內(nèi)容 
 * @author Administrator 
 * 
 */ 
public interface Contents { 
   String value(); 
} 

package com.ajun.test.innerclass.example; 
 
/** 
 * 水果目的地 
 * @author Administrator 
 * 
 */ 
public interface Destination { 
 
  //目的地 
  String readLabel(); 
} 

package com.ajun.test.innerclass.example; 
 
public class Goods { 
 
  private String des="is ruit!!"; 
   
  //方法外部 
  private class Content implements Contents{ 
    private String name = "apple "+des; 
    @Override 
    public String value() { 
      return name; 
    } 
  } 
   
  //方法外部 
  private class GDestination implements Destination{ 
    private String label ; 
    private GDestination(String label){ 
      this.label= label; 
    } 
    @Override 
    public String readLabel() { 
      return label; 
    } 
  } 
   
   
  //匿名內(nèi)部類 
  public Destination getdestination(final String label){ 
    return new Destination(){ 
      @Override 
      public String readLabel() { 
        return label; 
      } 
    }; 
  } 
   
  public Destination dest(String s){ 
    return new GDestination(s); 
  } 
   
  public Contents content(){ 
    return new Content(); 
  } 
   
  public Destination dest2(String s){ 
    class GDestination implements Destination{ 
        private String label; 
        private GDestination(String label){ 
          this.label= label; 
        } 
        @Override 
        public String readLabel() { 
          return label; 
        } 
    } 
    return new GDestination(s); 
  } 
   
} 

package com.ajun.test.innerclass.example; 
 
public class Test { 
 
  public static void main(String [] a){ 
    Goods gs = new Goods(); 
    Contents c = gs.content(); 
    Destination d = gs.dest("Beijing"); 
    System.out.println(c.value()); 
    System.out.println(d.readLabel()); 
    Destination d1 = gs.getdestination("Shanghai"); 
    System.out.println(d1.readLabel()); 
    System.out.println(gs.dest2("Tianjin").readLabel()); 
  } 
} 

其中Content和Gdestination得到了很好的隱藏,外面調(diào)用的時(shí)候,根本就不知道調(diào)用的是具體哪個(gè)類,使這個(gè)類擁有多繼承的特性。


輸出;

apple is ruit!! 
Beijing 
Shanghai 
Tianjin 

相關(guān)文章

  • Java線程池框架核心代碼解析

    Java線程池框架核心代碼解析

    這篇文章主要針對(duì)Java線程池框架核心代碼進(jìn)行詳細(xì)解析,分析Java線程池框架的實(shí)現(xiàn)ThreadPoolExecutor,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 學(xué)習(xí)非阻塞的同步機(jī)制CAS

    學(xué)習(xí)非阻塞的同步機(jī)制CAS

    現(xiàn)代的處理器都包含對(duì)并發(fā)的支持,其中最通用的方法就是比較并交換(compare and swap),簡(jiǎn)稱CAS。下面我們來一起學(xué)習(xí)一下吧
    2019-05-05
  • java 定時(shí)器線程池(ScheduledThreadPoolExecutor)的實(shí)現(xiàn)

    java 定時(shí)器線程池(ScheduledThreadPoolExecutor)的實(shí)現(xiàn)

    這篇文章主要介紹了java 定時(shí)器線程池(ScheduledThreadPoolExecutor),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 淺析JVM的垃圾回收器

    淺析JVM的垃圾回收器

    這篇文章主要介紹了JVM垃圾回收器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java虛擬機(jī)的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-11-11
  • Spring Cloud Feign請(qǐng)求添加headers的實(shí)現(xiàn)方式

    Spring Cloud Feign請(qǐng)求添加headers的實(shí)現(xiàn)方式

    這篇文章主要介紹了Spring Cloud Feign請(qǐng)求添加headers的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot實(shí)現(xiàn)發(fā)送郵件功能

    SpringBoot實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要介紹了SpringBoot 發(fā)送郵件功能實(shí)現(xiàn),本文以163郵箱為例通過這個(gè)小案例給大家介紹,需要的朋友可以參考下
    2019-12-12
  • Java實(shí)現(xiàn)布隆過濾器的示例詳解

    Java實(shí)現(xiàn)布隆過濾器的示例詳解

    布隆過濾器(Bloom?Filter)是1970年由布隆提出來的,實(shí)際上是由一個(gè)很長(zhǎng)的二進(jìn)制數(shù)組+一系列hash算法映射函數(shù),用于判斷一個(gè)元素是否存在于集合中。本文主要介紹了Java實(shí)現(xiàn)布隆過濾器的示例代碼,希望對(duì)大家有所幫助
    2023-03-03
  • mybatis 連接mysql數(shù)據(jù)庫 tinyint 為boolean類型詳解

    mybatis 連接mysql數(shù)據(jù)庫 tinyint 為boolean類型詳解

    這篇文章主要介紹了mybatis 連接mysql數(shù)據(jù)庫 tinyint 為boolean類型詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • springboot添加https服務(wù)器的方法

    springboot添加https服務(wù)器的方法

    這篇文章主要介紹了springboot添加https服務(wù)器的方法,小編在android開發(fā)中發(fā)現(xiàn)很多app都是https訪問的,為了方便測(cè)試,自己搭建了一個(gè)https服務(wù)器,需要的朋友可以參考下
    2017-11-11
  • dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter

    dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter

    這篇文章主要介紹了dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論