【JavaSE】Java(五十二):核心要点总结

简介: 1. java中普通类和抽象类有哪些区别Java中普通类(也就是非抽象类)和抽象类有以下几个区别:实例化:普通类可以直接被实例化为对象,而抽象类不能直接被实例化。抽象类需要被继承后,由其子类来实现其中定义的抽象方法。抽象方法:普通类不能包含抽象方法,而抽象类必须至少包含一个抽象方法。抽象方法是一种没有具体实现的方法,它只有声明而没有方法体。抽象方法必须在抽象类的子类中被实现。

1. java中普通类和抽象类有哪些区别


Java中普通类(也就是非抽象类)和抽象类有以下几个区别:


实例化:普通类可以直接被实例化为对象,而抽象类不能直接被实例化。抽象类需要被继承后,由其子类来实现其中定义的抽象方法。


抽象方法:普通类不能包含抽象方法,而抽象类必须至少包含一个抽象方法。抽象方法是一种没有具体实现的方法,它只有声明而没有方法体。抽象方法必须在抽象类的子类中被实现。


成员变量:普通类和抽象类都可以定义成员变量,并可进行初始化赋值。但是,抽象类中的成员变量不能强制要求其子类进行初始化或赋值,因为抽象类并不强制要求其子类实现所有的方法。


扩展性:普通类和抽象类都可以被其他类继承,从而获得这些类的属性和方法。但是,由于普通类已经对所有方法进行了实现,所以它的子类只能继承它的方法。而抽象类中的抽象方法要求子类必须先实现这些抽象方法,这样可以确保子类在继承抽象类的基础上完成具体的功能实现,扩展性更强。


使用场景:由于抽象类本身不能被实例化和使用,它通常用来定义一些基础的类或方法,以供其他的普通类或子类继承和实现。而对于那些可以直接被实例化的类,我们通常会把它们定义成普通类。


综上:抽象类是一种含有抽象方法的类,需要被继承后在其子类中实现,而普通类则没有这个限制。抽象类通常用于定义一些基础类或方法,而普通类适用于所有的其他情况。


2. 接口和抽象类有什么区别


Java中的接口和抽象类是两种常见的抽象类型,它们有以下几个区别:


实现方式:抽象类是通过关键字abstract来定义的,而接口是通过interface来定义的。


可继承性:抽象类可以被其他类继承,以获得它的属性和方法,然后在子类中进行具体实现。而接口只能被其他类实现,并且一个类可以同时实现多个接口,这样就可以在其中定义不同的行为。


抽象方法:抽象类可以包含抽象方法和非抽象方法,而接口中只能包含抽象方法。另外,抽象方法是一种没有实现的方法,需要由子类在继承时进行实现;而接口的所有方法都是抽象的,需要被实现类进行具体实现。


方法默认实现:Java8开始,接口可以包含默认方法,可以提供默认的方法实现,而抽象类不能直接提供默认方法实现。这也使得接口比以前更加灵活和易用。


程序设计方向:抽象类通常用于表示某个类或接口的基础层次结构,而接口则通常用于定义不同类之间的共同行为。简单来说,抽象类是从类的角度考虑问题,而接口则是从行为的角度考虑问题。


抽象类和接口都可以用于定义抽象类型,但两者有不同的使用场景。你可以根据实际需求来选择使用哪一种或哪些。


3. java中的IO流分为几种


Java中的IO流可以分为四类:


字节流(InputStream和OutputStream):用于读写一个字节或一组字节。InputStream是输入字节流的抽象基类,OutputStream是输出字节流的抽象基类。


字符流(Reader和Writer):用于读写一个字符或一组字符。Reader是输入字符流的抽象基类,Writer是输出字符流的抽象基类。


字节缓冲流(BufferedInputStream和BufferedOutputStream):它们是字节流和字符流的缓冲流,可以提高性能,减少系统的 read() 和 write() 的调用次数。


对象流(ObjectInputStream和ObjectOutputStream):用于将对象序列化和反序列化过程写入和读取到流中。


以上称为“节点流”,而由这些节点流得到的称为“处理流”或“过滤流”。处理流包括:BufferedInputStream、BufferedOutputStream、DataInputStream、DataOutputStream、ObjectInputStream、ObjectOutputStream、PrintStream、PrintWriter等。


这些IO流可以按照不同的数据类型进行分类,方便读取和处理数据,同时也有助于程序的性能优化。在实际开发中,我们需要根据具体的需求来选择使用哪种类型的IO流。

4. BIO、NIO、AIO 有谁没区别


BIO(Blocking I/O):同步阻塞I/O模型,它采用传统的InputStream/OutputStream进行读写操作。当一个线程在进行输入/输出时,其他线程必须等待。因此BIO通常无法支持高并发的场景。


NIO(Non-Blocking I/O):同步非阻塞I/O模型,它引入了Channel、Buffer、Selector等新的抽象概念,使用读写缓冲区(Buffer)完成对数据的读写操作。因为NIO利用单独的线程处理事件通知,所以可以支持更高的并发量。


AIO(Asynchronous I/O):异步非阻塞I/O模型,一般通过回调来实现异步处理。与NIO的主要区别在于, 读写操作完成后,内核会自动将数据写到应用的缓冲区中,不需要用户再次调用read/write处理。这使得AIO适合大量文件的处理以及高负载的服务器应用开发。


BIO适用于客户端连接比较小的情况;NIO适合处理较少的连接,但每个连接要处理大量任务或面临高并发;AIO则适用于同时有很多连接的高并发网络应用。根据实际需求选择不同的I/O模型,可以有效提高应用程序的性能。

5. Files 的常用方法有哪些


创建、删除文件或目录:createDirectory(Path path)、createDirectories(Path path)、createFile(Path path)、delete(Path path)、deleteIfExists(Path path)。


文件或目录复制、移动:copy(Path source, Path target, CopyOption… options)、move(Path source, Path target, CopyOption… options)。


获取文件属性:isDirectory(Path path)、isRegularFile(Path path)、isHidden(Path path)、size(Path path)、getLastModifiedTime(Path path)、isReadable(Path path)、isWritable(Path path)、isExecutable(Path path) 等。


获取目录或文件下的所有文件名列表:list(Path dir)、walk(Path path)、newDirectoryStream(Path dir)等。


读取或写入文件内容:readAllBytes(Path path)、readAllLines(Path path), write(Path path, byte[] bytes, OpenOption… options)、writeString(Path path, CharSequence charSequence, Charset cs, OpenOption… options) 等。


文件或目录比较:isEqual(Path path1, Path path2)。


更改文件权限:setOwner(Path path, UserPrincipal owner)、setPosixFilePermissions(Path path, Set perms)等

 

相关文章
|
7月前
|
存储 Java 测试技术
滚雪球学Java(18):解密JavaSE中的堆栈:你真的了解Java内存吗?
【4月更文挑战第7天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
69 1
滚雪球学Java(18):解密JavaSE中的堆栈:你真的了解Java内存吗?
|
7月前
|
安全 Java 调度
【Java】JavaSE实现多线程
【Java】JavaSE实现多线程
91 1
|
7月前
|
Java C++ 索引
【Java】JavaSE基础知识
【Java】JavaSE基础知识
142 0
|
7月前
|
Java
滚雪球学Java(17):探索循环控制:JavaSE中的break与continue秘技
【4月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
75 1
滚雪球学Java(17):探索循环控制:JavaSE中的break与continue秘技
|
7月前
|
存储 安全 Java
滚雪球学Java(19):JavaSE中的内存管理:你所不知道的秘密
【4月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
71 4
滚雪球学Java(19):JavaSE中的内存管理:你所不知道的秘密
|
7月前
|
Java 程序员 编译器
JavaSE&Java8 Lambda 表达式
JavaSE&Java8 Lambda 表达式
34 0
|
7月前
|
存储 Java 程序员
JavaSE&Java的异常
JavaSE&Java的异常
52 0
|
7月前
|
存储 Java 测试技术
滚雪球学Java(11):高效编程之道:精通JavaSE顺序结构的关键技巧
【2月更文挑战第23天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
73 2
|
7月前
|
存储 编解码 移动开发
【Java】JavaSE的IO流操作
【Java】JavaSE的IO流操作
84 0
|
7月前
|
Java 大数据
Java大数据面试复习30天冲刺 - 日积月累,每日五题【Day04】——JavaSE
Java大数据面试复习30天冲刺 - 日积月累,每日五题【Day04】——JavaSE
68 0