【java基础】( 二 )


1.接口和抽象类都不能被实例化,主要用于被其他类实现和继承 。
2.接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化 。
不同点
1.接口只有定义,不能有方法的实现,JDK 1.8中可以定义方法体,而抽象类可以有定义与实现,方法可在抽象类中实现 。
2.实现接口的关键字为,继承抽象类的关键字为 。一个类可以实现多个接口,但一个类只能继承一个抽象类 。所以,使用接口可以间接地实现多重继承 。
3.接口强调特定功能的实现,而抽象类强调所属关系 。
4.接口成员变量默认为final,必须赋初值,不能被修改;其所有的成员方法都是,的 。抽象类中成员变量默认,可在子类中被重新定义,也可被重新赋值;抽象方法被修饰,不能被,,和等修饰,必须以分号结尾,不带花括号 。
BIO流 阻塞:就是代码里面某个线程卡住了就是阻塞现象
字节流 、(以字节为单位)
文件流 new FileOutputStream("bbb.txt"); 创建之后回先删除文件里的所有内容、之后无论写入几次都会成功;new FileOutputStream("bbb.txt",true); 会保留文件原有的数据,之后进行写操作不会删除之前的数据new ByteArrayOutputStream(); //ByteArrayOutputStream 对byte类型数据进行写入的类 相当于一个中间缓冲层,将类写入到文件等其他outputStream 。它是对字节进行操作,属于内存操作流节点流:又称低级流,负责进行读写数据处理流:又称高级流,不能独立存在,必须连接在其他流上,目的是对数据进行处理简化我们的操作缓存流 作用是加快读写效率BufferedInputStream、BufferedOutputStream缓存流会有一个缓存区,需要调用flush()来处理缓存数据(其他流的这个方法只是做一个调用,真正干活的还是缓存流)
字符流 、(以char为单位)
转换流 OutputStreamWriter、InputStreamReaderByfferedWriter BufferedReader 缓存字符流 增加字符读写效率//主要流连接用法OutputStream out = socket.getOutputStream();//获取流OutputStreamWriter osw = new OutputStreamWriter(out, StandardCharsets.UTF_8);//字节转字符、字符转字节BufferedWriter bw = new BufferedWriter(osw);//缓存输出流PrintWriter pw = new PrintWriter(bw,true);//默认刷新缓存
NIO (通道)非阻塞Io(读写过程中不会发生阻塞线程)
非阻塞IO面向Channel("通道")的,不是面向Stream(流)的 。流的特点:方向单一,顺序读写 。流要么是输入流用于顺序读取数据,要么是输出流用于顺序写出数据Channel(通道)的特点:双向的,既可以读又可以写 。Filechannel:文件通道,SockentChannel:套接字通道,对远端进行TCp读写操作ServerSocketChannel:服务端的套接字,监听客户端Buffer缓冲区,通道是对缓冲区中的数据进行读写操作ByteBuffer:字节缓冲区/**读前* position() 0limit() 10240*/缓冲区读写是根据于 position() -limit() - 来进行缓存大小,来决定你下次能不能读到数据如果设定的容量是byte[1024*10]并且缓冲区已经读满了,就无法读到数据了/**读后* position() 10240limit() 10240*/总结Channel通道在进行读或写操作时,具体可以读取多少个字节或写出多少个字节是取决于我们传入的ByteBuffer中position到Llimit之间的空间 。while ((len=inChannel.read(buf))!=-1){buf.flip();//反转内容outChannel.write(buf);buf.clear();//清空缓冲区内容}
异常
【【java基础】】try{}catch(){}finally{//不管对错都会执行一次}throw 1)程序正常不满足业务;2)真的出错了抛出异常throws 1)就相当于提前说会出错,让做好出错的解决办法