JavaSE学习笔记(3)

IO流:

        作用: 复制各种类型文本(字节流 & 字符流)

        读进来(input)、写出去(output)

流程:

        源文件--读进来(FileInputStream输入流类)--中转--写出去(FileOutputStream输出流类)--目标

        以Stream结尾的一般都是字节流。顶级类:InputStream、OutputStream 按字节传递

        Reader/Writer结尾的一般是字符流。顶级类:Reader、Writer 按字符传递

File类:

File file = new File("D:/bj"); // 获得目录
File[] files = file.listFiles(); // 获得当前目录下的所有文件与文件夹(深层无法获得)
File[] files = file.existe(); // 判断当前文件是否存在

字节流:FileInputStream(读进来)、FileOutputStream(写出去)

// 完成一个文件的复制 把 D:/bj.txt 复制 D:/bj2.txt
// [1] 创建流
InputStream input = new FileInputStream("D:/bj.txt");
OutputStream output = new FileOutputStream("D:/bj2.txt");
// [2] 使用流
int n = input.read();
while(n != -1){
    output.write(n);
    n = input.read();
}
// [3]关闭流
output.close;
input.close;

         如上为正常情况 使用中转方式为 1字节 、数组读取速度快,也就是说把原有的一次中转1字节改为一次中转1024字节

InputStream input = new FileInputStream("D:/bj.txt");
OutputStream output  = new FileOutputStream("D:/bj2.txt");
byte[] bytes = new byte[1024];
int n = input.read(bytes); // 读取的内容存到数组中,返回的就是读取内容长度
while (n != -1){
    output.write(bytes,0,n); // 写入数据。从0开始到n结束 以免写入空格 
    n = input.read(bytes);
}

            

缓冲流:

        作用:提升当前的读取速度

        概念: 相当于使用流里的数组平替,名为缓冲区,长度为8192

// 创建一个流
InputStream  input = new FileInputStream("D:/syd.txt");
OutputStream output = new FileOutputStream("D:/syd2.txt");
// 默认输入输出 缓冲区
BufferedInputStream bis = new BufferedInputStream(input);
BufferedOutputStream bos = new BufferedOutputStream(output);
// 准备一个中转
int n = bis.read();
bos.write(n);
while (n != -1){
    bos.write(n);
    n = bis.read();
}
// 关闭流
bis.close();
bos.close();

打印流:PrintStream、PrintWriter 只有输出流、没有输入流

        System.out、System.err 是 PrintStream的实例变量

bollean a = true;
PrintStream p = new PrintStream("D:/bj.txt");
p.print(a); // 直接打印到文件夹
p.close(); 

        字节无论打印什么都行,字符只能打印汉字、数字等文本

        字符速度比字节略快。

反射:

        概念: 通过对象的一些参数内容把对象创建出来。通过class类加载去获得参数内容

        反射创建对象的优点:

                        【1】知道一个String类型的路径,使用此就可以创建对象

                        【2】即使是私有权限的,使此仍可以访问

        反射创建对象的缺点:

                        【1】书写不便、可读性差

                        【2】暴力访问私有方法(是优也是缺)

获得class对象的三种方式:

        方式一:

                Class clazz = Class.forName("com.co.syd.User"); 

        方式二:

                Class clazz = User.class; 单纯获得类内信息用

        方式三:

                String str = "123";

                Class clazz = str.getclass();

        用反射创建对象 [必须要全路径]

        String str = "com.co.syd.User"

        类加载:获得一个类的结构

        Class clazz = Class.forName(str);  反射入口

        创建User对象,o就是User对象为Object类

        Object o = clazz.newInstance();

[A] class基本方法:

clazz.getPackage(); // 获得当前类所在的包
clazz.getName(); // 获得全路径
clazz.getSimpleName(); // 获得单独的类名
clazz.getSuperclass(); // 获得当前类的父类
clazz.getInterfaces(); // 获得当前类的接口

[B] 获得构造方法:

Constructor[] c = clazz.getConstructors(); // 获得所有构造方法
// 只能用Pubilc修饰
{
Constructor[] c = clazz.getConstructor(); // 获得无参构造器
Constructor[] c = clazz.getConstructor(String.class); // 获得有参构造
}
// 用什么修饰都可以
Constructor[] c = clazz.getDeclaredConstructor(String.class); //  返回一个构造函数对象

[C] 获得类中属性:

// 只可以是Pubilc修饰
{
clazz.getFields(); // 获得类中所有的属性 父类中也会获得
clazz.getField(); // 获得类中单个的属性
}
clazz.getDeclaredFields(); // 无法获得父类中属性,但会获得本类所有权限的属性

[D] 获得类中方法:

clazz.getMethods(); // 获得所有Public修饰的方法(子类 & 父类)
clazz.getMethod("aa",String.class);
clazz.getSuperclass.DeclaredMethods(); // 获得父类的所有方法

 使用反射调用方法:

         【1】类加载

                       class c = class.forName("~~~~");

         【2】创建对象

                        object o = c.getConstructor.newInstance();

         【3】获得方法对象

                        Method method = c.getMethod("a");

         【4】调用指定对象中的方法

                        method.invoke(stu);  调用对象中方法

                        method.invoke(stu,"sxt",123); 如果对象中方法有参数的话

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值