摘:
使用顯式的方法來達成動態性,意味著我們要自己動手處理類別載入時的細
節部分。處理細節部分雖然需要撰寫一些額外的程式碼,但是可以讓程式變的更
具彈性,我們以上面這個 Office.java、Word.java、以及 Excel.java的例子來
說,這個程式雖然很有彈性(可以讓執行程式的人在執行時期決定要載入哪個類
別) ,但是,如果我們新增了Access.java和PowerPoint.java 這兩個新類別時,
Office.java 裡的主程式就必須增加兩個if … else 的迴圈。身為一個強調程式
維護性的工程師,接下來要問的一定是:「那麼,有沒有更好的方法,可以在不
修改主程式的情況下增加主程式的功能?」 有的,使用顯式的方法所達成的動態
性,可以增加程式的彈性,並達成我們不希望修改主程式的需求。程式碼如下所
示:
檔案:Assembly.java
public interface Assembly
{
public void start() ;
}
檔案:Office.java
public class Office
{
public static void main(String args[]) throws Exception
{
Class c = Class.forName(args[0]) ;
Object o = c.newInstance() ;
Assembly a = (Assembly) o ;
a.start() ;
}
}
檔案:Word.java
public class Word implements Assembly
{
public void start()
{
System.out.println("Word starts") ;
}
}
檔案:Excel.java
public class Excel implements Assembly
{
public void start()
{
System.out.println("Excel starts") ;
}
}
如此一來,我們的主程式 Office.java 只要編譯之後,往後只要叫用:
java Office Word或 java Office Excel
就可以動態載入我們需要的類別,如下圖所示:
除此之外,輸入
java Office Access
的時候,雖然會出現錯誤訊息(因為我們還沒有完成Access.java),如下圖所示:
但是,一旦往後我們完成了 Access(Access.java) 這個類別,或是
PowerPoint(PowerPoint.java),只要他們都實作了 Assembly這個介面,我們 12
就可以在不修改主程式(Office.java)的情況下,新增主程式的功能:
檔案:Access.java
public class Access implements Assembly
{
public void start()
{
System.out.println("Access starts") ;
}
}
檔案:PowerPoint.java
public class PowerPoint implements Assembly
{
public void start()
{
System.out.println("PowerPoint starts") ;
}
}
注意: 請仔細端看加入 –verbose:class 之後的螢幕輸出,您會看到
Assembly.class 也被系統載入了。在此您可以發現,interface如同 class 一般,
會由編譯器產生一個獨立的類別檔(.class),當類別載入器載入類別時,如果發
現該類別繼承了其他類別,或是實作了其他介面,就會先載入代表該介面的類別
檔,也會載入其父類別的類別檔,如果父類別也有其父類別,也會一併優先載入。
換句話說,類別載入器會依繼承體系最上層的類別往下依序載入,直到所有的祖
先類別都載入了,才輪到自己載入。舉例來說,如果有個類別 C 繼承了類別 B、
實作了介面 I,而 B 類別又繼承自A 類別,那麼載入的順序如下圖:
- 大小: 34.6 KB
- 大小: 41.8 KB
- 大小: 74.8 KB
- 大小: 7.7 KB
分享到:
相关推荐
《Java深度历险》是一本深入探讨Java技术的书籍,旨在帮助读者理解Java的内在机制,包括JVM(Java虚拟机)、JDK(Java开发工具包)和JRE(Java运行环境)之间的关系,以及类加载的过程等核心概念。通过这本书,你...
关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的...推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。
《Java深度历险》这本书是Java开发者的一本深入学习指南,它涵盖了Java编程语言的核心概念、高级特性以及实际开发中的应用技巧。通过本书,读者可以系统地了解Java的各个方面,从而提升自己的编程技能和问题解决能力...
《Java深度历险》是一本全面探讨Java技术的书籍,主要关注Java虚拟机(JVM)的深入理解和相关概念。本书旨在帮助读者不仅掌握Java编程的基本语法,而且能够理解Java平台的工作原理,从而提升编程技能和解决问题的...
java深度历险.rarjava深度历险.rarjava深度历险.rarjava深度历险.rarjava深度历险.rar
Java深度历险 深入Java 2 SDK 深入类别载入器 Java与MS Office 用Visual Studio.net操控Java虚拟机 package与import机制 Ant 附录A.Java 2 SDK原版码概观
《王森 Java深度历险》是一本专门为Java初学者精心编写的教材,旨在引领读者深入探索Java编程的世界。王森,作为业界知名的IT专家,以其丰富的教学经验和深厚的编程功底,将复杂的Java知识以易懂的方式呈现出来,...
《Java 深度历险》是一本专为Java开发者准备的深度学习书籍,它涵盖了Java编程语言的核心概念、高级特性以及实战应用。通过这本书,读者可以深入理解Java的内部机制,提升编程技能,实现从初级到高级的跨越。下面...
Java深度历险.pdf
《Java深度历险》这本书主要探讨了Java编程语言的深度知识,涵盖了从早期版本到Java 2 SDK的演进历程。Java是由Sun Microsystems开发的一种高级编程语言,最初被称为OAK,后来发展为Java 1.0,并逐步演变为Java 1.1...
《Java深度历险》是Java学习者的一本经典著作,由王森编著,深受广大编程爱好者喜爱。这本书深入浅出地讲解了Java语言的核心概念和技术,是初学者步入Java世界的理想指南。作为一本深度探索Java的书籍,它涵盖了从...
Java深度历险(合集).pdf,深度介绍!
《JAVA深度历险》是由知名Java专家王森撰写的一本深度探索Java编程的著作,PDF格式使得读者可以方便地在电子设备上阅读和学习。这本书是Java开发者提升技能、深化理解的重要参考资料,涵盖了从基础到高级的众多Java...
《Java深度历险》是一本面向已有基础的Java程序员的高级读物,旨在帮助读者深入理解Java语言的核心机制和高级特性。这本书涵盖了多个关键知识点,包括但不限于类加载机制、垃圾回收、多线程、并发编程、JVM优化、...
《Java深度历险.pdf》这份文档主要围绕Java技术的一些深入理解和应用展开,涵盖Java的运行环境(JDK和JRE)、Java虚拟机(JVM)、Java程序的运行机制以及Java开发工具的配置等多方面的知识。接下来,我将对文档中...
捉虫历险记 - 常见 C++ Bug 大围剿。
在《Java深度历险》这本书的第二章中,作者深入探讨了Java语言中的一个重要概念——**类别加载器**(Class Loader)。这一章节旨在揭示Java语言的动态性,并通过深入分析类别加载器的工作原理来帮助读者理解如何实现...