Java——反射(Class.forName()讀取配置文件舉例).

榨汁機(Juicer)榨汁機的案例:

分別有水果(Fruit),蘋果(Apple),香蕉(Bananal),橘子(Orange),榨汁(squeeze)

要求:

榨出不同的水果汁來喝
//一般方法求解
package com.testl;public class Text1 {public static void main(String[] args) {Juicer j = new Juicer();                //購買榨汁機j.run(new Apple());                     //向榨汁機中放入蘋果,榨汁機里面必須有接收蘋果方法才行j.run(new Orange());                    //向榨汁機中放入橘子,榨汁機里面必須有接收橘子方法才行//①不同種類的水果都得調用run方法;}}
class Apple{                                    //買了蘋果,定義蘋果類public void squeeze(){                      //蘋果可以榨成蘋果汁,所以里面有一個榨汁的方法System.out.println("榨出一杯蘋果汁兒");     }
}//蘋果汁喝膩了,想喝橘子汁兒
class Orange {public void squeeze(){                      //橘子可以榨成橘子汁,所以里面也有一個榨汁的方法System.out.println("榨出一杯橘子汁兒");     }
}//②不同種類的水果都得定義不同的類class Juicer{                                   //蘋果要放在榨汁機里才可以榨汁,所以要,買一個榨汁機
//方法重載  public void run(Apple a){                   //這個方法只管接收蘋果,榨汁機里面有個run方法,可以榨汁,這里是放個蘋果進去a.squeeze();                            //榨蘋果汁}public void run(Orange o){                  //這個方法只管接收橘子,榨汁機里面有個run方法,可以榨汁,這里是放個蘋果進去o.squeeze();                            //榨蘋果汁//③不同種類的水果都得創建接收不同水果的run方法}
}
從這個程序中,我們可以看出,如果要榨出的果汁種類特別的多的話,這樣會特別的麻煩,每種不同的水果都得經過①②③這三步驟。

代碼改進:

package com.student.model;
/*多態方法:將蘋果,橘子這些水果類向上抽取,抽取成一個接口,一個 水果 接口,
然后,在水果這個接口中有個squeeze(榨汁)的抽象方法,這樣的話,
讓每個不同種類的水果進行實現那個  水果  接口,
多態的作用是提高了代碼的復用性,讓程序的擴展性更強*/
public class Text2 {public static void main(String[] args) {Juicer j = new Juicer();                //購買榨汁機 //這之后,想喝什么水果汁就放什么水果就行j.run(new Orange());                    //榨橘子汁兒j.run(new Apple());                     //榨蘋果汁兒//①這之后,想喝什么水果汁就放什么水果就行}}
interface   Fruit {public void squeeze();
}class Apple implements Fruit{                                   //買了蘋果,定義蘋果類public void squeeze(){                      //蘋果可以榨成蘋果汁,所以里面有一個榨汁的方法System.out.println("榨出一杯蘋果汁兒");     }
}class Orange implements Fruit {public void squeeze(){                      //橘子可以榨成橘子汁,所以里面也有一個榨汁的方法System.out.println("榨出一杯橘子汁兒");     }
}//②想榨什么水果得將該水果去實現這個水果接口即可class Juicer{public void run(Fruit f){                   //在這個榨汁的方法里面,直接給  水果 這個對象就行了f.squeeze();}
}
從這個程序中,我們可以看出,如果要榨出的果汁種類特別的多的話,相對于第一個程序來看的話,這樣相對簡單點,但是,還是有點麻煩,每種不同的水果都得經過①②這兩步驟。

代碼再進行優化:

package com.StudentSystem.wsq;import java.io.BufferedReader;
import java.io.FileReader;
//配置文件里面只需要寫你要讀取的類名就行了,創建一個文本即可;
//例如:com.StudentSystem.wsq.Apple
//就是調用了蘋果這個方法,先調用哪個直接在配置文件里調用即可    包名.方法名
public class Text3 {public static void main(String[] args) throws Exception {/*public static Class<?> forName(String className)throws ClassNotFoundException返回與帶有給定字符串名的類或接口相關聯的 Class 對象。調用此方法等效于: Class.forName(className, true, currentLoader)其中 currentLoader 表示當前類的定義類加載器。參數:className - 所需類的完全限定名。*/BufferedReader br = new BufferedReader(new FileReader("config.txt"));Class clazz = Class.forName(br.readLine());//public T newInstance()throws InstantiationException,IllegalAccessException//創建此 Class 對象所表示的類的一個新實例。如同用一個帶有一個空參數列表的 new 表達式實例化該類。如果該類尚未初始化,則初始化這個類。   Fruit f = (Fruit) clazz.newInstance();      //父類引用指向子類對象,水果的引用指向了蘋果對象Juicer j = new Juicer();                    //購買榨汁機 j.run(f);}}
interface   Fruit {public void squeeze();
}class Apple implements Fruit{                       //買了蘋果,定義蘋果類public void squeeze(){                          //蘋果可以榨成蘋果汁,所以里面有一個榨汁的方法System.out.println("榨出一杯蘋果汁兒");     }
}class Orange implements Fruit {public void squeeze(){                          //橘子可以榨成橘子汁,所以里面也有一個榨汁的方法System.out.println("榨出一杯橘子汁兒");     }
}class Juicer{public void run(Fruit f){                       //在這個榨汁的方法里面,直接給  水果 這個對象就行了f.squeeze();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379827.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 根據類名示例化類_Java類類getEnclosingClass()方法及示例

java 根據類名示例化類類的類getEnclosingClass()方法 (Class class getEnclosingClass() method) getEnclosingClass() method is available in java.lang package. getEnclosingClass()方法在java.lang包中可用。 getEnclosingClass() method is used to return recent or im…

C++:cin.getline

轉&#xff1a;百度百科 http://baike.baidu.com/view/2383876.htm cin.getline 此函數是按行讀取,其語法為:cin.getline(字符指針,字符個數N,結束符); 功能是&#xff1a;一次讀取多個字符(包括空白字符&#xff09;&#xff0c;直到讀滿N-1個&#xff0c;或者遇到指定的結束符…

端口復用和重映射--STM32F103

什么是端口復用&#xff1f; STM32中有很多內置外設&#xff0c;這些外設的引腳都是與GPIO復用的&#xff0c;什么時候復用呢&#xff1f;就是當一個GPIO作為內置外設引腳使用時&#xff0c;就叫做復用。比如串口1的發送接收引腳是PA9&#xff0c;PA10&#xff0c;當PA9&#…

考研數學

眼前儼然一副冬的氣象&#xff0c;伴隨氣溫的驟降&#xff0c;考研復習也進入異常緊張的階段。在考試前這兩個月里&#xff0c;考生如何復習數學&#xff0c;成績還可以有所提高。萬學?海文數學教研組針對沖刺階段數學復習歸納總結以下復習經驗和建議&#xff0c;供大家參考。…

一個很好的自學網站~推薦一下

http://www.51zxw.net/study.asp?vip15746908

[轉]Ubuntu遠程桌面登陸

原文地址&#xff1a;http://www.cnblogs.com/xdzone/archive/2011/03/10/1979644.html 1.xp下默認的遠程桌面協議是rdp&#xff0c;默認端口3389&#xff0c;而ubuntu用的時vnc&#xff1a;默認端口5900 2.首先被訪問的主機&#xff08;windows/linux&#xff09;都要設置為允…

NVIC中斷管理---STM32

NVIC&#xff1a;嵌套向量中斷控制器 在了解中斷之前&#xff0c;我們先了解搶占優先級和響應優先級 搶占優先級和響應優先級 搶占優先級決定能不能打斷&#xff0c;高優先級的搶占可以中斷低優先級的搶占響應優先級在搶占優先級相同時&#xff0c;高響應優先級先執行&#x…

Java BigDecimal stripTrailingZeros()方法與示例

BigDecimal類stripTrailingZeros()方法 (BigDecimal Class stripTrailingZeros() method) stripTrailingZeros() method is available in java.math package. stripTrailingZeros()方法在java.math包中可用。 stripTrailingZeros() method is used to get a BigDecimal that is…

外部中斷---STM32F1

外部中斷概述 STM32的中斷控制器支持19個外部中斷/事件請求&#xff1a; 線0-15&#xff1a;對應外部IO口的輸入中斷線16&#xff1a;連接到PVD輸出線17&#xff1a;連接到RTC鬧鐘事件線18&#xff1a;連接到USB喚醒事件 STM32每個IO口都有可以作為外部中斷輸入&#xff0c;…

轉:點9圖

關于”點九” 轉&#xff1a;http://mux.baidu.com/?p1506“點九”是andriod平臺的應用軟件開發里的一種特殊的圖片形式&#xff0c;文件擴展名為&#xff1a;.9.png 智能手機中有自動橫屏的功能,同一幅界面會在隨著手機(或平板電腦)中的方向傳感器的參數不同而改變顯示的方向…

Python HTMLCalendar類| 帶實例的formatyear()方法

Python HTMLCalendar.formatyear()方法 (Python HTMLCalendar.formatyear() Method) formatyear() method is an inbuilt method of the HTMLCalendar class of calendar module in Python. It works on HTMLCalendar class object and returns an HTML table consisting of th…

2009中國企業家新春聯誼會

2009中國企業家新春聯誼會——把握當前機遇&#xff0c;笑對經濟危機&#xff0c;暢飲將帥美酒尊敬的嘉賓&#xff1a;當前&#xff0c;國際形勢正在發生深刻而復雜的變化&#xff0c;由美國次貸危機引發的全球經濟危機已經愈演愈烈&#xff0c;美國前五大投資銀行有3家宣告破產…

串口通信的基本原理----STM32

串口通信基本原理 1. 處理器與外部設置通信的基本方式 并行通信&#xff1a;數據各個位同時傳輸串行通信&#xff1a;數據按位順序傳輸 在串行通信中&#xff0c;按照數據的傳輸方向&#xff0c;又分為&#xff1a; 單工&#xff1a;數據傳輸只支持在一個方向傳輸半雙工&am…

java獲取vm運行參數_如何獲取在Java中運行Java VM的版本?

java獲取vm運行參數To get the version of running VM (Virtual Machine) in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the version of running Java VM. 要獲取Java…

Spring MVC+Ant+Tomcat+Eclipse最簡單的demo

第一步是Java的Web環境搭建&#xff0c;下載Eclipse&#xff08;或者更好的但收費的IDE-IntelliJ Idea&#xff0c;和Resharper一家公司出的&#xff09;&#xff0c;下載Tomcat&#xff0c;下載JDK&#xff0c;下載Spring&#xff0c;注意安裝Tomcat的時候配置一下管理員賬號和…

MySQL的環境變量配置詳細步驟

1.下載MySQL 例如下載&#xff1a;mysql-installer-community-5.5.60.1 我以這個版本為例 2.右擊->我的電腦->屬性 3. 4.找到在 系統變量 中找到 Path 5.找MySql的bin目錄&#xff08;每個人的電腦上這個文件的位置應該是差不多的&#xff0c;找到之后復制下來&#x…

轉帖:強命名程序集(Strong Name Assembly)的概念

強命名程序集&#xff08;Strong Name Assembly&#xff09;的概念因為不同的公司可能會開發出有相同名字的程序集來&#xff0c;如果這些程序集都被復制到同一 個相同的目錄下&#xff0c;最后一個安裝的程序集將會代替前面的程序集。這就是著名的Windows “DLL Hell”出現的原…

串口發送通信---UART發送---STM32F4實現

串口發送程序配置過程&#xff08;HAL庫&#xff09; 初始化串口相關參數&#xff0c;使能串口 HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)該函數的參數是串口的基址&#xff0c;在stm32f429xx.h文件中&#xff0c;定義了8個UART_HandleTypeDef的值&#x…

開源軟件 許可證密鑰_自由和開源軟件-1中的重要許可證

開源軟件 許可證密鑰Its important to take note that there are no good or bad licenses and that no license is superior to another. Anybody can make an open-source license that suits their extravagant, which is the explanation that there are such huge numbers…

串口接收中斷配置過程---STM32F4--HAL

串口接收中斷程序配置過程&#xff08;HAL&#xff09; 初始化相關參數&#xff0c;使能串口&#xff1a; HAL_UART_Init();該函數的參數是串口的基址&#xff0c;在stm32f429xx.h文件中&#xff0c;定義了8個UART_HandleTypeDef的值&#xff0c;分別是USART1、USART2、USART…