国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

重學(xué)JAVA基礎(chǔ)(二):Java反射

2019-11-14 23:33:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
重學(xué)java基礎(chǔ)(二):Java反射 看一下百度的解釋: JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息 以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語(yǔ)言的反射機(jī)制。 先看一下一個(gè)例子: 這是最簡(jiǎn)單的反射使用方法,通過(guò)反射來(lái)調(diào)用類的方法。 下面通過(guò)一個(gè)需求來(lái)做反射實(shí)驗(yàn):有3種人類(黃,白,黑),分別繼承于Human類,都有人類的共同操作Behaviour
/** * 行為,區(qū)別于動(dòng)物 * @author tomsnail * @date 2015年4月1日 上午10:10:42 */public interface Behaviour{    public void eat();    public void sleep();    public void think();    public void sport();    public void work();}
import java.util.Random;/** * 皮膚類型 * @author tomsnail * @date 2015年4月1日 上午11:41:33 */public enum SkinType{    yellow,white,black;        public static SkinType getSkinType(){                int r = new Random().nextInt(3);                switch(r){            case 0:return SkinType.yellow;            case 1:return SkinType.white;            default:return SkinType.black;        }    }}
public abstract class Human implements Behaviour{                PRivate String name;    private short age;    private short sex;    private SkinType skin;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public short getAge() {        return age;    }    public void setAge(short age) {        this.age = age;    }    public short getSex() {        return sex;    }    public void setSex(short sex) {        this.sex = sex;    }    public SkinType getSkin() {        return skin;    }    public void setSkin(SkinType skin) {        this.skin = skin;    }    /**     * 構(gòu)造方法要傳皮膚顏色,以區(qū)分不同的人種     * @author tomsnail     * @date 2015年4月1日 上午10:06:48     */    public Human(SkinType skin) {        this.skin = skin;        this.name = skin.toString()+"_"+Goddess.counter++;    }}
public class WhiteHuman extends Human{    public WhiteHuman() {        super(SkinType.white);    }        public WhiteHuman(SkinType skinType) {        super(skinType);        System.err.println("我是白人,我在");    }    @Override    public void eat() {        System.err.println("我是白人,我在eat");    }    @Override    public void sleep() {        System.err.println("我是白人,我在sleep");    }    @Override    public void think() {        System.err.println("我是白人,我在think");    }    @Override    public void sport() {        System.err.println("我是白人,我在sport");    }    @Override    public void work() {        System.err.println("我是白人,我在work");    }    private void selfMethod(){        System.out.println("這是白人私有方法");    }}
public class YellowHuman extends Human{    public YellowHuman() {        super(SkinType.yellow);    }        public YellowHuman(SkinType skinType) {        super(skinType);        System.err.println("我是黃種人,我的皮膚顏色是:"+skinType);    }    @Override    public void eat() {        System.err.println("我是黃種人,我在eat");    }    @Override    public void sleep() {        System.err.println("我是黃種人,我在sleep");    }    @Override    public void think() {        System.err.println("我是黃種人,我在think");    }    @Override    public void sport() {        System.err.println("我是黃種人,我在sport");    }    @Override    public void work() {        System.err.println("我是黃種人,我在work");    }        private void selfMethod(){        System.out.println("這是黃種人私有方法");    }}
public class BlackHuman extends Human{            public BlackHuman() {        super(SkinType.black);    }        public BlackHuman(SkinType skinType) {        super(skinType);        System.err.println("我是黑人,我的皮膚顏色是:"+skinType);    }    @Override    public void eat() {        System.err.println("我是黑人,我在eat");    }    @Override    public void sleep() {        System.err.println("我是黑人,我在sleep");    }    @Override    public void think() {        System.err.println("我是黑人,我在think");    }    @Override    public void sport() {        System.err.println("我是黑人,我在sport");    }    @Override    public void work() {        System.err.println("我是黑人,我在work");    }        private void selfMethod(){        System.out.println("這是黑人私有方法");    }}
/** * 女?huà)z * @author tomsnail * @date 2015年4月1日 上午10:20:16 */public class Goddess {        public static int counter = 0;        private static final String[] humanClasss = new String[]{"com.tomsnail.java.test.reflec.BlackHuman","com.tomsnail.java.test.reflec.WhiteHuman","com.tomsnail.java.test.reflec.YellowHuman"};        //小伙伴    private List<Human> companions = new ArrayList<Human>();        private static final int number = 10;        /**     * 造人     * @author tomsnail     * @date 2015年4月1日 上午10:21:03     */    public void createHuman(){        int i=number;        while(--i>0){            String className = randomHuman();            try {                Class humanClass = Class.forName(className);                Human human = null;                if(System.currentTimeMillis()%i==1){                    System.out.println("發(fā)生意外,創(chuàng)造一個(gè)不知道什么的人");                    Constructor constructor = humanClass.getConstructor(SkinType.class);//構(gòu)造方法                    human = (Human) constructor.newInstance(SkinType.getSkinType());//通過(guò)構(gòu)造方法創(chuàng)建一個(gè)對(duì)象                }else{                    System.out.println("女?huà)z創(chuàng)造一個(gè) "+humanClass.getSimpleName());                    human = (Human) humanClass.newInstance();                }                companions.add(human);            }  catch (Exception e) {                e.printStackTrace();            }        }    }        private String randomHuman(){        int r = new Random().nextInt(3);        return humanClasss[r];    }    /**     * 生活     * @author tomsnail     * @date 2015年4月1日 上午10:27:09     */    public void life() throws Exception{        while(true){            try {                Thread.currentThread().sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            Human human = companions.get(new Random().nextInt(number-1));            Class humanClass = human.getClass();            Field[] fs = humanClass.getSuperclass().getDeclaredFields();//父類屬性            for(Field f:fs){                System.out.println(f.getName()+":"+humanClass.getMethod("get"+getMethodName(f.getName())).invoke(human, null));//打印出父類屬性值            }            Method[] ms =  humanClass.getSuperclass().getInterfaces()[0].getMethods();//獲得接口方法            Method m = ms[new Random().nextInt(ms.length)];            m.invoke(human, null);//執(zhí)行接口方法            Method pm = humanClass.getDeclaredMethod("selfMethod");//獲得私有方法            pm.setaccessible(true);//可訪問(wèn)            pm.invoke(human, null);//執(zhí)行私有方法        }    }        /**     * 將首字符改為大寫(xiě)     * @author tomsnail     * @date 2015年4月1日 上午11:40:48     */    private static String getMethodName(String fildeName) throws Exception{          byte[] items = fildeName.getBytes();          items[0] = (byte) ((char) items[0] - 'a' + 'A');          return new String(items);    }        public static void main(String[] args) throws Exception {        Goddess goddess = new Goddess();        goddess.createHuman();        goddess.life();    }    }
女?huà)z創(chuàng)造一個(gè) YellowHuman女?huà)z創(chuàng)造一個(gè) BlackHuman女?huà)z創(chuàng)造一個(gè) WhiteHuman女?huà)z創(chuàng)造一個(gè) WhiteHuman發(fā)生意外,創(chuàng)造一個(gè)不知道什么的人女?huà)z創(chuàng)造一個(gè) BlackHuman女?huà)z創(chuàng)造一個(gè) YellowHuman女?huà)z創(chuàng)造一個(gè) WhiteHuman我是黑人,我的皮膚顏色是:yellow女?huà)z創(chuàng)造一個(gè) WhiteHumanname:white_7age:0sex:0skin:white我是白人,我在work這是白人私有方法name:white_3age:0sex:0skin:white我是白人,我在eat這是白人私有方法name:white_2我是白人,我在workage:0sex:0skin:white這是白人私有方法name:yellow_0我是黃種人,我在thinkage:0sex:0skin:yellow這是黃種人私有方法name:black_1我是黑人,我在work


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 深泽县| 治县。| 军事| 佛坪县| 乐安县| 泸西县| 石河子市| 十堰市| 惠安县| 修水县| 苏尼特左旗| 拉孜县| 乡宁县| 永平县| 盐城市| 宜君县| 宁国市| 蓬安县| 和平区| 中江县| 龙川县| 临夏县| 镇江市| 延吉市| 乐都县| 江北区| 宿州市| 南漳县| 淅川县| 东安县| 锦州市| 大邑县| 张家港市| 特克斯县| 榆林市| 会宁县| 航空| 阳谷县| 桑日县| 腾冲县| 民乐县|