小复习

知识点复习

1.接口和抽象类的区别

接口的方法默认是 public,所有方法在接口中不能有实现
接口中都是抽象方法,抽象类中还可以有普通方法
抽象类中可以有构造器,接口中没有
接口中的实例变量默认是 final 类型的,而抽象类中则不一定
一个类可以实现多个接口,但最多只能实现一个抽象类
一个类实现接口的话要实现接口的所有方法,而抽象类不一定
接口中变量一定是静态的常量

2.抽象方法不能和哪些关键词共存?

1.private:修饰的方法只能在本类中使用,而抽象方法要求必须让子类实现,两者互相矛盾

​2.final:修饰的方法不能被重写,而且只能赋值一次,而抽象方法必须要被重写,互相矛盾

​3.static:修饰的方法可以通过类名直接调用,而抽象方法是没有方法体的,调用没有意义

3.接口中的方法不能和哪些关键词同时存在

final修饰的方法为最终方法不能被重写的,但是接口中的方法都是抽象方法必须被重写,两者矛盾
private修饰的方法或属性只能在本类中使用,抽象方法是需要被继承或实现类进行重写的
static修饰的方法或变量可以直接通过类名进行调用,抽象方法是没有方法体的,调用无意义

4.==和equals的区别

1.==用于基本数据类型时 比较的是值 , 用于引用数据类型时 比较的是地址
​ 2.equals 在字符串中是先比较地址后比较内容

5.final、finally、finalize的区别

final修饰的变量叫常量,只能赋值一次

final修饰的放大叫最终方法,不能被重写

final修饰的类叫最终类,不能被继承

finally是异常汇总的一部分,最终必然会执行的代码块

finalize是垃圾回收机制的执行方法

IO流练习–文本文件及图片复制

IO流练习–文本文件及图片复制

1.思路

使用IO流复制文件可以总结为以下步骤

1.创建输入流,与要读取的源文件建立关联,
2.创建输出流,与要写入目标文件建立关联
3.创建中间变量用于临时存储读取的数据
4.从源文件中读取数据存入临时变量
5.把临时变量存储的数据存入目标文件
6.关闭流
按照以上步骤运用字符流与字节流方法即可

import java.io.*;
public class BufferedDemo {
    public static void main(String[] args) throws IOException {
        //字符缓冲流写对象
        //1.创建输入流,与要读取的源文件建立关联,
        FileReader fr = new FileReader("lib/1.txt");
        //2.创建输出流,与要写入目标文件建立关联
        FileWriter fw = new FileWriter("lib/2.txt");
        //3.创建中间变量用于临时存储读取的数据
        //读取数据的返回值
        int len;
        //4.从源文件中读取数据存入临时变量,此时read()方法返回的是字符在字符集中的编号,只有非负数,返回-1时为结束标志
        while((len = fr.read()) != -1){
            //5.把临时变量存储的数据存入目标文件
            fw.write(len);
        }
        //6.关闭流
        fw.close();
        fr.close();
    }
}

2.2 字符流使用字符数组进行读取复制

代码如下:

import java.io.*;
public class BufferedDemo {
    public static void main(String[] args) throws IOException {
        //字符缓冲流写对象
        //1.创建输入流,与要读取的源文件建立关联,
        FileReader fr = new FileReader("lib/1.txt");
        //2.创建输出流,与要写入目标文件建立关联
        FileWriter fw = new FileWriter("lib/2.txt");
        //3.创建中间变量用于临时存储读取的数据
        //读取数据的返回值
        int len;
        //数组大小建议为1024的整数倍
        char[] chs = new char[1024];
        //4.从源文件中读取数据存入临时变量,此时read(chs)方法返回的是读取到的有效字符个数,返回-1时为结束标志
        while((len = fr.read(chs)) != -1){
            //5.把临时变量存储的数据存入目标文件
            fw.write(chs,0,len);
        }
        //6.关闭流
        fw.close();
        fr.close();
    }
}
***使用字符数组效率更高***

2.3 字符流使用字符缓冲流进行读取复制

代码如下

import java.io.*;
public class BufferedDemo {
    public static void main(String[] args) throws IOException {
        //字符缓冲流写对象
        //1.创建输入流,与要读取的源文件建立关联,
        FileReader fr = new FileReader("1.txt");
        BufferedReader br = new BufferedReader(fr);
        //2.创建输出流,与要写入目标文件建立关联
        FileWriter fw = new FileWriter("2.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        //3.创建中间变量用于临时存储读取的数据
        //读取数据的返回值
//        int len;
//        //4.从源文件中读取数据存入临时变量
//        while((len = br.read()) != -1){
              //5.把临时变量存储的数据存入目标文件
//            bw.write(len);
//        }

        //一次读取一行
        String str;
        while((str = br.readLine())!= null){
            bw.write(str);
            //读取一行写入一行,若没有这一行,可能存在流没有关闭,就不往目标文件中写入数据的情况。
            bw.flush();
            //手动换行
//          bw.write("\r\n");
            //或新起一行
            bw.newLine();
        }
        //6.关闭流
        bw.close();
        fw.close();
        br.close();
        fr.close();
    }
}
		*斜体样式*进行数据的读写时,使用缓冲流对象,读写效率更高,安全性更好

3.字节流复制图片

2.1 字节流一次读取一个字节进行复制

代码如下:

import java.io.*;
public class PutStreamDemo {
    public static void main(String[] args) throws IOException {
        //1.创建输入流,与要读取的源文件建立关联,
        InputStream is = new FileInputStream("lib/a.jpg");
        //2.创建输出流,与要写入目标文件建立关联
        OutputStream os = new FileOutputStream("lib/b.jpg");
        //3.创建中间变量
        int len;
        //4.从源文件中读取数据存入临时变量
        while((len = is.read())!=-1){
            //5.把临时变量存储的数据存入目标文件
            os.write(len);
        }
        //6.关闭流
        os.close();
        is.close();
    }
}

2.2 字节流使用字节数组进行读取复制

import java.io.*;
public class PutStreamDemo {
    public static void main(String[] args) throws IOException {
        //1.创建输入流,与要读取的源文件建立关联,
        InputStream is = new FileInputStream("lib/a.jpg");
        //2.创建输出流,与要写入目标文件建立关联
        OutputStream os = new FileOutputStream("lib/b.jpg");
        //3.创建中间变量
        int len;
        byte [] bys = new byte[1024];
        //4.从源文件中读取数据存入临时变量
        while((len = is.read(bys))!=-1){
            //5.把临时变量存储的数据存入目标文件
            os.write(bys,0,len);
        }
        //6.关闭流
        os.close();
        is.close();
    }
}

2.3 字节流使用字节缓冲流进行读取复制

代码如下:

import java.io.*;
public class PutStreamDemo {
    public static void main(String[] args) throws IOException {
        //1.创建输入流,与要读取的源文件建立关联,
        InputStream is = new FileInputStream("lib/a.jpg");
        BufferedInputStream bis = new BufferedInputStream(is);
        //2.创建输出流,与要写入目标文件建立关联
        OutputStream os = new FileOutputStream("lib/b.jpg");
        BufferedOutputStream bos = new BufferedOutputStream(os);
        //3.创建中间变量
        int len;
        //4.循环读取源数据存入中间变量,
        while((len = bis.read())!=-1){
            //5.循环将中间变量数据写入目标文件直到结束
            bos.write(len);
        }
        //6.关闭流
        bos.close();
        bis.close();
        os.close();
        is.close();
    }
}

4.其他

建议:在进行纯文本复制时使用字符流,在进行视频,音频,图像等文件复制时使用字节流
缓冲流中缓冲池默认大小为8Kb的字节数组。
单个字符或字节进行复制效率太低,使用自定义数组来复制也会有空间浪费的问题,建议使用缓冲流进行复制

6.sleep和wait的区别

sleep是线程Thread类中提供的用于暂停线程的方法

wait是Object类中提供的用于让线程等待的方法

7.get与post请求的区别

1.get重点在从服务器上获取资源,post重点在向服务器发送数据
2.Get传输的数据量小,因为受URL长度限制,但效率较高;Post可以传输大量数据,所以上传文件时只能用Post方式;
3.Get不安全,因为URL是可见的,可能会泄露私密信息,如密码等;Post安全性较高;
4.get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。post支持标准字符集,可以正确传递中文字符。

8.http中重定向和请求转发的区别

1.重定向特点:至少两次请求,浏览器地址发生变化,可以访问自己web之外的资源,传输的数据会丢失
2.请求转发特点:只有一次请求,浏览器地址不变,访问的是自己本身的web资源,传输的数据不会丢失

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值