有趣的Java 9

1. 启动进程并获得返回结果


    public static void main(String[] args) throws IOException {

        String batPath = "C:\\Users\\Administrator\\Desktop\\新建文本文档.bat";
        Process process = new ProcessBuilder(batPath).start();

        InputStream inputStream = process.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        String result = getResultFromBufferReader(bufferedReader);
        System.out.println(result);
    }

    public static String getResultFromBufferReader(BufferedReader bufferedReader) throws IOException {

        char[] buffer = new char[1024];
        StringBuilder stringBuilder = new StringBuilder();
        while (true) {
            int numOfRead = bufferedReader.read(buffer);
            if (numOfRead == -1) break;
            stringBuilder.append(buffer, 0, numOfRead);
        }

        return stringBuilder.toString();
    }


2. 反射


public class HelloWorld {

    public static void main(String[] args) throws Exception {

        Class pointClazz = Class.forName("Point");
        for (Field field : pointClazz.getDeclaredFields()) {
            System.out.println(field);
        }
        for (Method method : pointClazz.getDeclaredMethods()) {
            System.out.println(method);
        }
        /*
            int Point.x
            int Point.y
            public int Point.getXAddY()
         */

        Object object = pointClazz.newInstance();
        Point point = (Point)object;
        point.x = 1;
        point.y = 2;
        System.out.println(object); // Point{x=1, y=2}
    }
}

class Point {
    int x;
    int y;
    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}


3. 用反射访问私有属性


public class HelloWorld {

    public static void main(String[] args) throws Exception {

        Point point = new Point(1, 2);
        System.out.println(getPrivateIntFieldValue(point, "x"));    // 1

        setPrivateIntFieldValue(point,"x",2);
        System.out.println(point);  // Point{x=2, y=2}
    }

    public static void setPrivateIntFieldValue(final Object object, final String fieldName, final int value) throws Exception {

        Field privateIntField = object.getClass().getDeclaredField(fieldName);
        privateIntField.setAccessible(true);
        privateIntField.setInt(object, value);
    }

    public static int getPrivateIntFieldValue(final Object object, final String fieldName) throws Exception{

        Field privateIntField = object.getClass().getDeclaredField(fieldName);
        privateIntField.setAccessible(true);
        return privateIntField.getInt(object);
    }

}

class Point {
    private int x;
    private int y;
    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值