Java基礎(chǔ)類Class使用指南
大家都知道Java是一門面向?qū)ο缶幊陶Z(yǔ)言,在Java世界里,萬(wàn)事萬(wàn)物皆對(duì)象,那個(gè)Java中怎么表示對(duì)象呢?Class
我們知道Java中的對(duì)象都是Object類的子類,那么今天我們就一起來(lái)研究一下Java中的Class的使用。
問(wèn)一下小問(wèn)題:類是對(duì)象嗎?類是誰(shuí)的對(duì)象?答案是:類是對(duì)象,是java.lang.Class類的實(shí)力對(duì)象。
package com.edu.hpu;
public class Test { public static void main(String[] args) { //通過(guò)new實(shí)例化一個(gè)對(duì)象 Foo foo = new Foo(); //通過(guò)實(shí)例化對(duì)象的getClass()方法得到Class類的實(shí)例 Class c1 = foo.getClass(); //任何一個(gè)類都有一個(gè)隱含的靜態(tài)變量class Class c2 = Foo.class; //c1、c2表示了Foo類的類類型(class type) System.out.println(c1 == c2); Class c3 = null; try { //第三種獲得類的類類型的方法 c3 = Class.forName("com.edu.hpu.Foo"); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println(c1 == c3); try { //通過(guò)類的類類型來(lái)創(chuàng)建類的實(shí)例對(duì)象 Foo c4 = (Foo) c1.newInstance(); c4.start(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } class Foo{ public void start(){ System.out.println("Foo類"); } }
通過(guò)上面的代碼大家是不是對(duì)于Class有了一個(gè)更深入的認(rèn)識(shí),我們可以通過(guò)new關(guān)鍵字來(lái)創(chuàng)建類的實(shí)例對(duì)象,同樣可以通過(guò)類的類類型來(lái)創(chuàng)建類的實(shí)例對(duì)象,獲取類的類類型的方式以上有三種形式,他們得到的類類型只有一個(gè),所以c1==c2==c3:true。
經(jīng)過(guò)上面的簡(jiǎn)單介紹大家是不是對(duì)于Java中的class有了一個(gè)更深入的認(rèn)識(shí),下面我們通過(guò)一個(gè)小例子為大家介紹一下類類型與類的實(shí)例在實(shí)際中的使用。
class Offices{ public static void main(String [] args){ if("Word".equals(args[0])){ Word w = new Word(); w.start(); } if("Excel".equals(args[0])){ Excel e = new Excel(); e.start(); } } }
大家看一下上面的代碼,當(dāng)我們編譯時(shí),是否可以正常通過(guò)?這里我們需要說(shuō)一下編譯與運(yùn)行:編譯時(shí)刻加載的類是靜態(tài)加載類;運(yùn)行時(shí)刻加載的類是動(dòng)態(tài)加載類。Class.forName("l類的全稱");不僅代表了類類型,而且代表了動(dòng)態(tài)加載類。上面的例子中,Word、Excel我們并不一定用的到,但是當(dāng)我們編譯時(shí),如果Word、與Excel不存在,那么便會(huì)出錯(cuò)。所以接下來(lái)我們通過(guò)類類型動(dòng)態(tài)加載類的方式來(lái)實(shí)現(xiàn)上面的邏輯。
class Office{ public static void main(String [] args){ try{ Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble)c.newInstance(); oa.Write(); }catch(Exception e){e.printStackTrace();} } }
interface OfficeAble{ public void Write(); } class Word implements OfficeAble{ public void Write(){ System.out.println("Word...start..."); } } class Excel implements OfficeAble{ public void Write(){ System.out.println("Excel..Write.."); } }
這樣我們就可以根據(jù)需要?jiǎng)討B(tài)的增加類,方便我們應(yīng)用的功能拓展。
- java基礎(chǔ)類型源碼解析之多角度講HashMap
- 講解Java中的基礎(chǔ)類庫(kù)和語(yǔ)言包的使用
- 使用java基礎(chǔ)類實(shí)現(xiàn)zip壓縮和zip解壓工具類分享
- Java基礎(chǔ)之包裝類
- Java基礎(chǔ)詳解之包裝類的裝箱拆箱
- java——Byte類/包裝類的使用說(shuō)明
- Java基本類型和包裝類型的區(qū)別
- Java基本數(shù)據(jù)類型包裝類原理解析
- Java包裝類原理與用法實(shí)例分析
- Java包裝類的緩存機(jī)制原理實(shí)例詳解
- 詳解Java包裝類及自動(dòng)裝箱拆箱
- Java基本類型包裝類概述與Integer類、Character類用法分析
- Java基本數(shù)據(jù)類型與對(duì)應(yīng)的包裝類(動(dòng)力節(jié)點(diǎn)java學(xué)院整理)
- 詳細(xì)總結(jié)Java基礎(chǔ)類和包裝類
相關(guān)文章
maven配置多個(gè)鏡像的實(shí)現(xiàn)方法
這篇文章主要介紹了maven配置多個(gè)鏡像的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06java servlet 幾種頁(yè)面跳轉(zhuǎn)的方法
java servlet 幾種頁(yè)面跳轉(zhuǎn)的方法,需要的朋友可以參考一下2013-04-04Java批量從svn導(dǎo)出多個(gè)項(xiàng)目代碼實(shí)例
這篇文章主要介紹了java批量從svn導(dǎo)出多個(gè)項(xiàng)目代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03SpringBoot實(shí)現(xiàn)人臉識(shí)別等多種登錄方式
本文主要介紹了SpringBoot實(shí)現(xiàn)人臉識(shí)別等多種登錄方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)
這篇文章主要給大家介紹了關(guān)于Mybatis中傳遞多個(gè)參數(shù)的4種方法,并且介紹了關(guān)于使用Mapper接口時(shí)參數(shù)傳遞方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04