1. 程式人生 > >Java的Inner Class的例項及作用分析

Java的Inner Class的例項及作用分析

1 首先看程式碼

/*
 * DataStructure.java
 *
 * Created on 2008年3月1日, 上午10:37
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 
*/


package hiber;

/**
 *
 * 
@author rulinma
 
*/

publicclass DataStructure {
    
//create an array
privatefinalstaticint SIZE =15;
    
private
int[] arrayOfInts =newint[SIZE];
    
    
public DataStructure() {
        
//fill the array with ascending integer values
for (int i =0; i < SIZE; i++{
            arrayOfInts[i] 
= i;
        }

    }

    
    
publicvoid printEven() {
        
//print out values of even indices of the array
        InnerEvenIterator iterator 
=this.new InnerEvenIterator();
        
while (iterator.hasNext()) {
            System.out.println(iterator.getNext() 
+"");
        }

    }

    
//inner class implements the Iterator pattern
privateclass InnerEvenIterator {
        
//start stepping through the array from the beginning
privateint next =0;
        
        
publicboolean hasNext() {
            
//check if a current element is the last in the array
return (next <= SIZE -1);
        }

        
        
publicint getNext() {
            
//record a value of an even index of the array
int retValue = arrayOfInts[next];
            
//get the next even element
            next +=2;
            
return retValue;
        }

    }

    
    
publicstaticvoid main(String s[]) {
        
//fill the array with integer values and print out only values of even indices
        DataStructure ds =new DataStructure();
        ds.printEven();
    }

}



 2 執行結果:

init:
deps-jar:
compile-single:
run-single:
0
2
4
6
8
10
12
14
生成成功(總時間:1 秒)

3 作用分析

  3.1 內部類的使用可以有效避免外界對InnerEvenIterator 類的訪問,滿足了面向物件的封裝性。

  3.2 內部類InnerEvenIterator可以直接使用上面定義的  private int[] arrayOfInts = new int[SIZE];
        Java編譯器在建立內部類物件時,隱式的把其外部類物件的引用也傳了進去並一直儲存著。這樣就使得內部類物件始終可以訪問其外部類物件

相關推薦

Java的Inner Class例項作用分析

1 首先看程式碼 /**//* * DataStructure.java * * Created on 2008年3月1日, 上午10:37 * * To change this template, choose Tools | Template Manager * a

證書的應用之一 —— TCP&SSL通訊例項協議分析(中)

SSL建立握手連線目的: 1.身份的驗證,client與server確認對方是它相連線的,而不是第三方冒充的,通過證書實現 2.client與server交換session key,用於連線後資料的傳輸加密和hash校驗 簡單的SSL握手連線過程(僅Ser

通過例項原始碼分析關於SpringBoot啟動類啟動時自動配置問題

SpringBoot啟動類大家都不陌生,只要在main方法上增加一個@SpringBootApplication註解,就可以啟動了。 我們點開該註解 其中關鍵註解為@EnableAutoConfiguration,再次跟進 其中引入了EnableA

java中的構造方法的使用作用分析

java中構造方法是一個重要的概念,初學時有人會對此構造方法的使用特別是其作用不清楚,下面我就來談談我對java中構造方法的理解,有不對或不清楚的地方希望各位看官提出意見,謝謝! 一.構造方法的定義宣

JavaScript執行環境作用域鏈例項分析

1、執行環境: 每個執行環境都有一個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。 執行環境包括全域性執行環境和函式執行環境。 全域性執行環境是最外圍的一個執行環境,在瀏覽器中,全域性執行環境被認為是是window物件,所有全域性變數和屬性都是作為window

【discuzX2】/source/class/class_core.php文件中數據庫操作類DBdb_mysql分析

mathjax fetch bus _for pre 影響 str sql_mod 進行 <?php /** * Discuz MySQL 類的支持 程序中一般不直接使用此類,而是使用DB類,DB類對db_mysql類中的方法又進行了二次封裝 * *

phpstorm+xdebug作用解釋原理分析

今天學習了php 的 xdebug除錯工具,感覺很強大,從一點不會到慢慢了解,翻閱了很多資料,也算是跋山涉水,翻山越嶺了,為了避免再有像我這樣的新手學習此知識點時遇到困惑,特把今天看到的一些優秀文章貼下來,供大家參考 xdebug使用參考文件 https://xdebug

c#中static的作用程式碼分析

說明2:C# 是面向物件的程式設計語言,每一個函式都屬於一個類。 當一個方法被宣告為Static時,這個方法是一個靜態方法,編譯器會在編譯時保留這個方法的實現。也就是說,這個方法屬於類,但是不屬於任何成員,不管這個類的例項是否存在,它們都會存在。就像入口函式Static void Main,因為它是靜態函式,

Netty入門例項分析

import java.net.InetSocketAddress; import java.util.concurrent.Executors; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel

SparkR安裝部署資料分析例項

1. SparkR的安裝配置 1.1.       R與Rstudio的安裝 1.1.1.           R的安裝 我們的工作環境都是在Ubuntu下操作的,所以只介紹Ubuntu下安裝R的方法: 1)  在/etc/apt/sources.list新增源

Executor執行框架原始碼分析(一)——executor、threadFactory、ThreadPoolExecutor 、Future元件的關係作用

       executor執行框架是JDK1.5新增的,用於專注於任務執行的框架。其最大的特點就是將任務的建立和任務的執行分離,鬆耦合,已達到最大限度的利用計算機資源(執行緒和記憶體等)。在併發程式設計中,executor是一個必備的工具。     在分析原始碼之前,首先

Springmvc+Apache Camel+Mybatis整合例項分析

Spring MVC+Apache Camel+Mybatis整合例項及分析 最近在學習camel,公司之前做過的專案使用到了camel進行了很多工作。就連資料庫的操作也是通過camel來完成的。至於用camel來操作資料庫有什麼優點,目前就我自己的體會來說,利用came

註冊 Jdbc 驅動程式的三種方式Class.forName 的作用

(1)jdbc中註冊驅動,首先匯入對應的包,例如mysql-connector-java-5.0.8-bin.jar。驅動包是java和具體資料庫之間的連線橋樑,由資料庫廠商開發。每一種資料庫對應一款驅動jar,甚至每一個版本的資料庫都有自己對應版本的驅動jar。 (2

Class.forName的作用用newInstance()和new建立物件的區別

Class.forName(xxx.xx.xx) 返回的是一個類 首先你要明白在java裡面任何class都要裝載在虛擬機器上才能執行。這句話就是裝載類用的(和new 不一樣,要分清楚)。 至於什麼時候用,你可以考慮一下這個問題,給你一個字串變數,它代表一個類的包名和

JAVA反射機制CLASS.FORNAME的作用含義

最近由於工作上需要,對reflection做了一番瞭解,以下是學習總結,有不少內容是借鑑的,但已無法找到源文出處,還請原文作者見諒。 Reflection 是Java被視為動態(或準動態)語言的一個關鍵性質。這個機制允許程式在執行時透過Reflection APIs取得任

Java GC 分析,JVM生產環境引數例項分析,JVM詳細配置

什麼是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)機制,是Java與C++/C的主要區別之一,作為Java開發者,一般不需要專門編寫記憶體回收和垃圾清理程式碼,對記憶體洩露和溢位的問題,也不需要像C程式設計師那樣戰戰兢兢。這是

JVM系列四:生產環境引數例項分析

java application專案(非web專案) 改進前: -Xms128m-Xmx128m-XX:NewSize=64m-XX:PermSize=64m-XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=78-XX:ThreadStac

RRTI的概念以及Class對象作用

eat 有趣的 getclass 2種 init null java虛擬機 class對象 小例子   深入理解Class對象    RRTI的概念以及Class對象作用    認識Class對象之前,先來了解一個概念,RTTI(Run-Time Type Identifi

常用正則表達式爬取網頁信息HTML分析總結

logfile mpi 開始 order 標題 ear 爬取網頁 常用 enter Python爬取網頁信息時,經常使用的正則表達式及方法。 1.獲取<tr></tr>標簽之間內容 2.獲取<a href..></a>超鏈接

利用python爬取龍虎榜數據後續分析

登錄 one 可能 股市 .com 爬蟲 但我 由於 相關 ##之前已經有很多人寫過相關內容,但我之前並未閱讀過,這個爬蟲也是按照自己的思路寫的,可能比較醜陋,請見諒! 本人作為Python爬蟲新手和股市韭菜,由於時間原因每晚沒辦法一個個翻龍虎榜數據,所以希望借助爬蟲篩選出