麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

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

2019-11-14 23:33:26
字體:
供稿:網(wǎng)友
重學(xué)java基礎(chǔ)(二):Java反射 看一下百度的解釋: JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息 以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。 先看一下一個例子: 這是最簡單的反射使用方法,通過反射來調(diào)用類的方法。 下面通過一個需求來做反射實驗:有3種人類(黃,白,黑),分別繼承于Human類,都有人類的共同操作Behaviour
/** * 行為,區(qū)別于動物 * @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("這是黑人私有方法");    }}
/** * 女媧 * @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)造一個不知道什么的人");                    Constructor constructor = humanClass.getConstructor(SkinType.class);//構(gòu)造方法                    human = (Human) constructor.newInstance(SkinType.getSkinType());//通過構(gòu)造方法創(chuàng)建一個對象                }else{                    System.out.println("女媧創(chuàng)造一個 "+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);//可訪問            pm.invoke(human, null);//執(zhí)行私有方法        }    }        /**     * 將首字符改為大寫     * @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();    }    }
女媧創(chuàng)造一個 YellowHuman女媧創(chuàng)造一個 BlackHuman女媧創(chuàng)造一個 WhiteHuman女媧創(chuàng)造一個 WhiteHuman發(fā)生意外,創(chuàng)造一個不知道什么的人女媧創(chuàng)造一個 BlackHuman女媧創(chuàng)造一個 YellowHuman女媧創(chuàng)造一個 WhiteHuman我是黑人,我的皮膚顏色是:yellow女媧創(chuàng)造一個 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ā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 一本到免费视频 | 国产69精品久久久久久久久久 | 一级毛片免费高清视频 | 黄色免费在线视频网站 | 精品国产一区二区三 | 欧美精品欧美极品欧美激情 | 久久蜜桃香蕉精品一区二区三区 | 性爱在线免费视频 | 二区三区四区视频 | 国产精品一区在线看 | 全黄毛片| 成人免费观看在线 | 国产乱乱视频 | 一级黄色影片在线观看 | 亚洲日本韩国精品 | 爽成人777777婷婷 | 欧美高清第一页 | 久久久电影电视剧免费看 | 久久久久久久亚洲视频 | 91av原创| 中日无线码1区 | 神马久久精品综合 | 国产手机在线视频 | 精品久久久久久久久久久久久久久久久久久 | 成人福利视频在线观看 | 成人男女激情免费视频 | a视频在线免费观看 | 免费放黄网站在线播放 | 高清成人在线 | 久久777国产线看观看精品 | 久久精品视频网站 | 久久国产精品99国产 | 国产妇女乱码一区二区三区 | 在线亚洲欧美 | 国产91久久精品 | 天天草天天爱 | 日本精品视频一区二区三区四区 | 亚洲综合视频网 | 久久久一区二区精品 | 羞羞视频免费观看入口 | 成年免费视频黄网站在线观看 |