java反射机制-一道阿里面试题

定义

  java反射机制是指在java程序运行的过程中,根据任意一个实例化对象可以知道对应类的所有属性和方法,并且可以调用他的属性和方法。

  也就是说你可以在程序运行的过程中,对于一个已经创建的对象,可以多次调用他属性和方法且不再创建新对象。

  没有创建对象也可以直接通过反射的方式创建对象,Class.forName("类的目录");

参考 https://www.jianshu.com/p/9be58ee20dee

 

面试题 

  FileInputStream 在使用完以后,不关闭流,想二次使用可以怎么操作?

  FileInputStream 中有一个方法是open 方法调用的是本地的打开文件的方法,fileinputStream 就是通过这个方法来打开文件的,所以如果要重写读取这个文件,不重新创建对象,那么只要调用这个方法就可以了。

  习惯用BufferedReader,以下为示例

public static void main(String[] args) {
        try {
            String pathname = "C:\\Users\\HP\\Desktop\\test\\in.txt";
            File filename = new File(pathname);
            FileInputStream inputStream = new FileInputStream(filename);
            InputStreamReader reader = new InputStreamReader(inputStream, "GBK");
            BufferedReader br = new BufferedReader(reader);

            BufferedWriter out1 = new BufferedWriter(new FileWriter("C:\\Users\\HP\\Desktop\\test\\out1"));
            BufferedWriter out2 = new BufferedWriter(new FileWriter("C:\\Users\\HP\\Desktop\\test\\out2"));

            String line = null;

            while ((line = br.readLine()) != null) {
                System.out.println(line);
                out1.write(line + "\n");
            }


            Class in = inputStream.getClass();
            Method open = in.getDeclaredMethod("open0", String.class);
            open.setAccessible(true);
            open.invoke(inputStream, pathname);


            while ((line = br.readLine()) != null) {
                System.out.println(line);
                out2.write(line + "\n");
            }

            br.close();
            out1.close();
            out2.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

  

posted @ 2021-02-25 15:10  karbon  阅读(331)  评论(0)    收藏  举报