亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于反射技術(shù)的高校體育測(cè)評(píng)系統(tǒng)優(yōu)化實(shí)現(xiàn)研究

        2021-10-23 10:21:14
        體育科技文獻(xiàn)通報(bào) 2021年10期
        關(guān)鍵詞:機(jī)制方法設(shè)計(jì)

        戈 俊

        1 研究目的

        通過動(dòng)態(tài)獲取類中成員的Java反射技術(shù),從而提高并優(yōu)化高校體育測(cè)評(píng)系統(tǒng)的功能。

        2 研究方法

        2.1 文獻(xiàn)資料法

        根據(jù)研究?jī)?nèi)容和研究目的,查閱了近年來有關(guān)Java反射技術(shù)等方面的專著、期刊、論文和資料,并對(duì)資料進(jìn)行整理分析、篩選、歸納、概括。為寫作提供依據(jù),為后續(xù)研究提供了充足的理論支持。

        2.2 實(shí)驗(yàn)法

        通過Eclipse集成開發(fā)軟件,建立JavaSE開源項(xiàng)目,通過創(chuàng)建包、接口、類、配置文件等方法,進(jìn)行項(xiàng)目開發(fā)的基本配置,通過WindowBuilder插件,進(jìn)行GUI可視化組件開發(fā),結(jié)合Java反射技術(shù)對(duì)已存在的NJFU_PECS高校體育成績(jī)?cè)u(píng)測(cè)系統(tǒng)進(jìn)行技術(shù)優(yōu)化。

        3 研究結(jié)果與分析

        3.1 Java程序性能優(yōu)化分析

        前期為了滿足教學(xué)與訓(xùn)練工作需求,已做好可以獨(dú)立運(yùn)行的應(yīng)用程序NJFU_PECS高校體育成績(jī)?cè)u(píng)測(cè)系統(tǒng),可以正常安裝并使用。用戶在使用過程中需要提高該程序的擴(kuò)展性,想加入一些自己所需的新功能。在程序開發(fā)初期,如果想添加新功能,其做法是定義一個(gè)類,并建立方法,通過new對(duì)象的方法,在主線程中調(diào)用該對(duì)象,并指揮對(duì)象調(diào)用功能方法即可。但是,現(xiàn)實(shí)生活中的應(yīng)用程序是已經(jīng)封裝好的程序,是不可以隨便將其源碼進(jìn)行改變同時(shí)建立對(duì)象的,又何況很多的程序開發(fā)時(shí)并非開源程序,是無法獲取其程序源碼的。因此,這種提高程序擴(kuò)展性的想法是錯(cuò)誤的。在這種情況下,程序需要提高擴(kuò)展性,往往在設(shè)計(jì)初期會(huì)對(duì)外提供一個(gè)便于后期擴(kuò)展使用的接口,程序設(shè)計(jì)廠商對(duì)外暴露接口規(guī)則,二次開發(fā)時(shí)通過實(shí)現(xiàn)該接口規(guī)則,第三方通過使用符合該接口規(guī)則的對(duì)象。這種操作方式可以形象的比作計(jì)算機(jī)對(duì)外提供的USB接口,通過該接口可以實(shí)現(xiàn)與外部設(shè)備的互聯(lián)互通,如U盤、移動(dòng)硬盤等。因此,對(duì)外提供接口只是為了進(jìn)行功能擴(kuò)展。

        當(dāng)需要進(jìn)行功能擴(kuò)展時(shí),就應(yīng)該針對(duì)接口的規(guī)則設(shè)計(jì)一個(gè)類,并通過該類實(shí)現(xiàn)接口,緊接著通過接口引用指向子類對(duì)象,以多態(tài)調(diào)用的形式即可使用擴(kuò)展對(duì)象的方法。但是,回到原點(diǎn)還是之前的問題,如果無法在已寫好的程序中更改其代碼。那么,應(yīng)該如何操作呢?新的思考方式是通過配置文件的方式,應(yīng)用程序在啟動(dòng)時(shí)可通過流對(duì)象直接讀取該配置文件,配置文件里配置的是即將使用到的擴(kuò)展功能擴(kuò)展類的類名,通過類名的讀取,即可找到該類對(duì)應(yīng)的class字節(jié)碼文件。通過反射技術(shù)加載class字節(jié)碼文件,并能成功獲取該class字節(jié)碼文件中的所有內(nèi)容,通過類中的構(gòu)造函數(shù)可以進(jìn)行對(duì)象的創(chuàng)建,并且調(diào)用類中定義好的功能。如果想要對(duì)指定名稱的字節(jié)碼文件進(jìn)行加載并獲取其中的內(nèi)容并調(diào)用,怎么可以實(shí)現(xiàn)?這就需要使用到反射技術(shù)。

        3.2 Java程序基礎(chǔ)調(diào)用與反射機(jī)制對(duì)比分析

        3.2.1 Java反射技術(shù)的原理分析

        JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類(class文件),都能夠知道這個(gè)類的所有屬性和方法,即反向的映射類中的所有內(nèi)容,對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性,這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為Java語(yǔ)言的反射機(jī)制,即動(dòng)態(tài)獲取類中信息,就是Java反射[1]。通過反射技術(shù)與配置文件相關(guān)聯(lián),運(yùn)行配置文件中指定類的對(duì)應(yīng)方法,讀取配置文件中的數(shù)據(jù),通過反射技術(shù),來完成指定對(duì)象的創(chuàng)建[2]。只要在代碼或配置文件中看到類的完整路徑(包、類),其底層原理基本上使用的就是Java的反射機(jī)制。

        3.2.2 獲取任意類字節(jié)碼文件對(duì)象的方法分析

        第一種方法:Object類中有一個(gè)方法叫做getClass(),該方法必須明確被操作的類[3]。通過對(duì)象引用創(chuàng)建對(duì)象后,通過變量名稱調(diào)用Object類中的可以被所有對(duì)象繼承的getClass()方法,同時(shí)用描述字節(jié)碼文件對(duì)象的類Class來接收該方法的返回值。

        第二種方法:任何數(shù)據(jù)類型都具備一個(gè)靜態(tài)的屬性.class來獲取其對(duì)應(yīng)的Class對(duì)象[3]。該方法直接用類名.class的形式即可得到該數(shù)據(jù)的字節(jié)碼文件對(duì)象,該方法的優(yōu)點(diǎn)是簡(jiǎn)單,但還是要明確用到類中的靜態(tài)成員,缺點(diǎn)是擴(kuò)展性受限。

        第三種方法:只要通過給定類的字符串名稱就可以獲取該類,描述字節(jié)碼文件的類是Class,因此我們可以用Class類中的方法完成,Class類被定義在java.lang包內(nèi),此方法更為擴(kuò)展[3]。該類中定義了一個(gè)靜態(tài)方法forName(),該方法返回與帶有給定字符串名的類或接口相關(guān)聯(lián)的Class對(duì)象,該方法在定義時(shí)拋了一個(gè)ClassNotFoundException類未找到異常,因此值得注意的是該forName方法的參數(shù)字符串類名應(yīng)該填寫正確,并要求填寫全類名即包名加類名。這種方式只要有類的名稱即可,更為方便,擴(kuò)展性更強(qiáng)。

        3.2.3 常規(guī)創(chuàng)建對(duì)象和通過反射創(chuàng)建對(duì)象的區(qū)別

        常規(guī)創(chuàng)建對(duì)象,通過包名加類名的方式,創(chuàng)建類所對(duì)應(yīng)的實(shí)體對(duì)象,這樣new對(duì)象后,就要在classpath路徑內(nèi)尋找名為包名加類名的字節(jié)碼文件,并將其加載進(jìn)內(nèi)存,同時(shí)在堆內(nèi)存中開辟一片空間。

        通過反射創(chuàng)建對(duì)象,初期筆者手上只有字符串的類名,但是也想完成創(chuàng)建對(duì)象的動(dòng)作。創(chuàng)建對(duì)象的基本原則是通過指定類名稱,到指定位置找到字節(jié)碼文件,加載進(jìn)內(nèi)存并在堆內(nèi)存中開辟空間[4]。該步驟可通過Class.forName(“字符串包名+類名”)方法進(jìn)行實(shí)現(xiàn)。反射機(jī)制作用下,獲取其對(duì)象的方法是通過Class類中定義的方法newInstance()方法實(shí)現(xiàn)的,該方法可創(chuàng)建此Class對(duì)象所表示的類的一個(gè)新實(shí)例[4]。同時(shí)該實(shí)例返回值是Object,因?yàn)镺bject可接受任意對(duì)象。

        兩者創(chuàng)建實(shí)例的區(qū)別在于,傳統(tǒng)創(chuàng)建需要程序員根據(jù)使用對(duì)象的不同,反復(fù)在程序中創(chuàng)建不同的對(duì)象,擴(kuò)展性極弱,若對(duì)象眾多,暫時(shí)無需使用到的對(duì)象也必須提前創(chuàng)建出來,極其浪費(fèi)內(nèi)存。而通過反射機(jī)制,可以將日后可能被使用到的對(duì)象類名寫入配置文件中,需要用時(shí)讓程序自身自動(dòng)通過反射機(jī)制讀取配置文件,逐個(gè)加載即可,提高擴(kuò)展性的同時(shí)降低了內(nèi)存的消耗。

        3.3 高校體育評(píng)測(cè)系統(tǒng)反射設(shè)計(jì)思路與開發(fā)步驟分析

        3.3.1 可視化界面設(shè)計(jì)思路分析

        由于該系統(tǒng)的主要功能是提供用戶進(jìn)行高校體育成績(jī)測(cè)試結(jié)果與評(píng)分的換算,因此開發(fā)前期首先要進(jìn)行評(píng)測(cè)系統(tǒng)的GUI即可視化界面設(shè)計(jì)。按照普通設(shè)計(jì)思路,每一個(gè)測(cè)試項(xiàng)目的換算都需要獨(dú)立設(shè)計(jì)一個(gè)測(cè)試類,也可以獨(dú)立設(shè)計(jì)成一個(gè)測(cè)試換算系統(tǒng),這樣做的缺點(diǎn)是用戶在同時(shí)錄入多個(gè)測(cè)試項(xiàng)目時(shí),需要頻繁的啟動(dòng)并關(guān)閉不同的測(cè)評(píng)系統(tǒng),浪費(fèi)了大量的時(shí)間。而此系統(tǒng)在設(shè)計(jì)初期考慮到了使用反射機(jī)制來優(yōu)化系統(tǒng)功能,因此在GUI界面設(shè)計(jì)時(shí),可以通過設(shè)計(jì)下拉菜單的方式,靈活方便的轉(zhuǎn)換體育評(píng)測(cè)項(xiàng)目,優(yōu)勢(shì)是不用關(guān)閉系統(tǒng)即可實(shí)現(xiàn)體育評(píng)測(cè)項(xiàng)目的切換,而該設(shè)計(jì)的技術(shù)基礎(chǔ)就是使用Java的反射機(jī)制完成。

        3.3.2 接口與實(shí)現(xiàn)類的設(shè)計(jì)思路分析

        設(shè)計(jì)初期,由于該系統(tǒng)是保障數(shù)據(jù)換算結(jié)果的輸出,那么此項(xiàng)目設(shè)計(jì)思路是首先定義一個(gè)測(cè)試接口,該接口中的抽象方法需要接受一個(gè)測(cè)試者測(cè)試項(xiàng)目的結(jié)果,由于不同項(xiàng)目的測(cè)試結(jié)果數(shù)據(jù)類型不同。如,50米跑、800米跑、立定跳遠(yuǎn)等測(cè)試結(jié)果數(shù)據(jù)類型均是浮點(diǎn)型;而仰臥起坐、引體向上等測(cè)試結(jié)果數(shù)據(jù)類型又都是整數(shù)類型,為了統(tǒng)一方便,筆者將該方法接收的參數(shù)類型均設(shè)計(jì)成雙精度的浮點(diǎn)類型double。而該方法的轉(zhuǎn)換測(cè)試必然會(huì)有一個(gè)結(jié)果,那么該方法的返回值類型也設(shè)計(jì)成雙精度的double類型,該方法的方法名稱就直截了當(dāng)?shù)卦O(shè)計(jì)成test,以便于體現(xiàn)方法的見名知意。

        緊接著,需要設(shè)計(jì)每一個(gè)運(yùn)動(dòng)項(xiàng)目的測(cè)試類,他們的共性特點(diǎn)都是測(cè)試,因此都需要實(shí)現(xiàn)之前設(shè)計(jì)的接口,并覆蓋掉接口中的抽象方法,只有覆蓋掉接口中的抽象方法,并完成方法體中具體測(cè)試方法的設(shè)計(jì),才能使用該方法。

        3.3.3 配置文件的創(chuàng)建步驟分析

        實(shí)現(xiàn)接口后的測(cè)試類定義完畢以后,筆者在該項(xiàng)目中創(chuàng)建一個(gè)配置文件test.properties,該配置文件的建立以便于后期通過反射機(jī)制找到該配置文件,并找尋配置文件中所需要運(yùn)行的類文件的名稱。下一步,將所有測(cè)試類的全類名即包名+類名通過鍵值對(duì)的形式寫入配置文件。創(chuàng)建反射機(jī)制關(guān)聯(lián)的配置文件test.properties如圖一所示:

        圖一 創(chuàng)建反射機(jī)制關(guān)聯(lián)的配置文件test.properties

        3.3.4 反射機(jī)制的實(shí)現(xiàn)步驟分析

        下面筆者就要開始進(jìn)行反射機(jī)制的代碼實(shí)現(xiàn),首先需要通過緩沖字符輸入流BufferedReader關(guān)聯(lián)配置文件test.properties。通過循環(huán)讀取,將配置文件中的所有鍵值對(duì)信息讀取進(jìn)來,通過字符串的切割方法將鍵值對(duì)通過“=”切成字符串?dāng)?shù)組,通過下拉菜單的選定測(cè)試項(xiàng)目類別與該字符串鍵值進(jìn)行equals比對(duì),如果比對(duì)成功,那么該鍵值對(duì)的值就是需要測(cè)試的項(xiàng)目類的類名,順利獲取該類名。流對(duì)象關(guān)聯(lián)配置文件切割并校對(duì)鍵值對(duì)如圖二所示:

        圖二 流對(duì)象關(guān)聯(lián)配置文件切割并校對(duì)鍵值對(duì)

        通過Class.forName()方法,將上述獲取的類名作為參數(shù)傳遞給該方法,得到該類所對(duì)應(yīng)的字節(jié)碼文件對(duì)象。AccessibleObject類是Field字段、Method方法和Constructor構(gòu)造方法對(duì)象的基類[5]。它提供了將反射的對(duì)象標(biāo)記為在使用時(shí)取消默認(rèn)Java語(yǔ)言訪問控制檢查的能力[6]。通過該對(duì)象調(diào)用getMethod()方法,同時(shí)將測(cè)試方法名稱“test “和該方法所需的參數(shù)類型的一個(gè)靜態(tài)屬性.class來獲取其對(duì)應(yīng)的Class對(duì)象,再通過之前字節(jié)碼文件對(duì)象調(diào)用newInstance()方法,創(chuàng)建測(cè)試類實(shí)例對(duì)象,最后通過方法類的invoke()方法將對(duì)象實(shí)例和文本框中獲取的測(cè)試數(shù)據(jù)傳遞給該方法參數(shù),最后得到測(cè)試類轉(zhuǎn)換的分值。再通過文本域?qū)⑥D(zhuǎn)換后的分值通過字符串表現(xiàn)在文本域中。反射機(jī)制完成對(duì)象建立并調(diào)用方法進(jìn)行成績(jī)換算如圖三所示:

        圖三 反射機(jī)制完成對(duì)象建立并調(diào)用方法進(jìn)行成績(jī)換算

        4 結(jié)論與建議

        4.1 結(jié)論

        前期開發(fā)的NJFU_PECS高校體育成績(jī)?cè)u(píng)測(cè)系統(tǒng)過于臃腫,代碼量過于冗長(zhǎng)[7][8]。反射機(jī)制在本系統(tǒng)性能優(yōu)化中使代碼更加靈活,更加容易實(shí)現(xiàn)面向?qū)ο螅蟠蟮靥岣吡顺绦虻臄U(kuò)展性,實(shí)際優(yōu)勢(shì)表現(xiàn)為在不關(guān)閉系統(tǒng)前提下實(shí)現(xiàn)體育評(píng)測(cè)項(xiàng)目的切換;面向配置文件,降低了用戶和開發(fā)者理解程序代碼及執(zhí)行流程的難度。

        4.2 建議

        為了提高程序的可擴(kuò)展性,反射機(jī)制是程序開發(fā)的普遍設(shè)計(jì)趨勢(shì)和方向;為了更具體的描述配置文件中的信息,后期可使用XML結(jié)構(gòu)性的標(biāo)記語(yǔ)言進(jìn)行數(shù)據(jù)的描述與封裝,再使用dom4j解析XML文檔更利于維護(hù)。

        猜你喜歡
        機(jī)制方法設(shè)計(jì)
        自制力是一種很好的篩選機(jī)制
        文苑(2018年21期)2018-11-09 01:23:06
        瞞天過?!律O(shè)計(jì)萌到家
        設(shè)計(jì)秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設(shè)計(jì)叫而專
        Coco薇(2017年5期)2017-06-05 08:53:16
        可能是方法不對(duì)
        用對(duì)方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        破除舊機(jī)制要分步推進(jìn)
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        捕魚
        注重機(jī)制的相互配合
        在线a人片免费观看高清| 亚洲国产欧美在线观看| 国产性生交xxxxx无码| 无码aⅴ在线观看| 99精品国产自产在线观看| 丝袜美腿亚洲综合第一页| 欧美丰满老熟妇aaaa片| 久久精品无码专区免费青青| 国产无码十八禁| av免费在线播放一区二区| 国产免费av手机在线观看片| 五月综合激情婷婷六月色窝| 色丁香在线观看| av网址大全在线播放| 国产人妖网站在线视频| 国产莉萝无码av在线播放| 图图国产亚洲综合网站| 日本一曲二曲三曲在线| 欧美高清视频手机在在线| 欧产日产国产精品精品| 亚洲电影一区二区| 日韩av水蜜桃一区二区三区| 午夜免费啪视频| 精品乱码一区二区三区四区| 亚洲精品中文字幕尤物综合| 国产91人妻一区二区三区| 777午夜精品免费观看| 亚洲av无码专区在线亚| 亚洲av一二三四五区在线| 夜夜爽妓女8888888视频| 国产亚洲日韩欧美一区二区三区| 男人的av天堂狠狠操| 日本一区二区不卡精品| 国产一卡2卡3卡四卡国色天香| 中文字幕巨乱亚洲| 美女被内射中出在线观看| 先锋中文字幕在线资源| 国产乱人视频在线看| 日本伊人精品一区二区三区 | 内射人妻少妇无码一本一道| 秋霞午夜无码鲁丝片午夜精品|