Java I/O流继承关系详解

需积分: 12 2 下载量 15 浏览量 更新于2024-08-23 收藏 2.75MB PPT 举报
"I/O流的继承关系-Java全部课件" 在Java编程中,I/O流(Input/Output Stream)是处理数据传输的核心概念,它允许程序与外部资源(如文件、网络、硬件设备等)进行数据交换。I/O流分为输入流(Input Stream)和输出流(Output Stream),它们在Java中的继承关系构成了一个庞大的类层次结构。 输入流的根类是`InputStream`,这是一个抽象类,用于处理字节流。所有的输入流子类都继承自`InputStream`,因此它们共享了`InputStream`中的方法。`InputStream`虽然不能直接实例化,但我们可以通过它的子类如`FileInputStream`、`BufferedInputStream`等来创建对象。`InputStream`提供的主要方法包括: 1. `available()`:返回可以读取的字节数,但在网络流中可能不准确。 2. `close()`:关闭流对象,释放系统资源。由于`InputStream`实现了`Closeable`接口,所有子类都支持关闭操作。 关闭流对象是非常重要的,因为Java的垃圾回收机制并不能自动回收与I/O流相关的系统资源,例如打开的文件或网络连接。因此,开发者需要显式调用`close()`方法来确保资源的释放,避免内存泄漏和资源浪费。 输出流的根类是`OutputStream`,同样是一个抽象类,它的子类如`FileOutputStream`、`BufferedOutputStream`等用于向外部资源写入数据。`OutputStream`也提供了类似的方法,如`write()`用于写入字节,以及`close()`用于关闭流。 Java的I/O编程还包括更高级的主题,如: 1. **Java图形GUI编程**:使用`java.awt`和`javax.swing`包创建图形用户界面。 2. **多线程编程**:利用`Thread`类和`Runnable`接口实现并发执行。 3. **I/O编程**:除了基本的字节流外,还有字符流(`Reader`和`Writer`),以及更高级的缓冲流、转换流、对象流等。 4. **网络编程**:使用`java.net`包进行TCP/IP通信,包括Socket编程和ServerSocket编程。 Java语言的学习通常按照一定的体系进行,例如: - **Java语法基础**:涵盖标识符、关键字、类型、表达式、流程控制、数组等内容。 - **面向对象编程**:讲解对象、类、封装、继承、多态等概念。 - **高级语言特性**:异常处理、图形GUI、多线程、I/O、网络编程等。 了解并熟练掌握这些知识点是成为一名合格的Java程序员的基础。通过深入学习和实践,开发者可以构建复杂的应用程序,有效地处理数据输入输出,实现高效的网络通信,并创建功能丰富的用户界面。

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/apache-hive-2.3.5/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/hadoop-3.3.1/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Exception in thread "main" java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap') at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:394) at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:370) at org.apache.hadoop.hive.cli.CliSessionState.<init>(CliSessionState.java:60) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:708) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.hadoop.util.RunJar.run(RunJar.java:323) at org.apache.hadoop.util.RunJar.main(RunJar.java:236)

2023-06-03 上传

. 定义一个基类 BaseString,实现基本的输入字符串的功能。 //-------------------------------------------------------------------------------------------------- class BaseString { public: char *GetData();//返回字符串 void Input(); //输入字符串,遇到换行符结束 void Display();//显示字符串 BaseString(); ~BaseString(); unsigned int Getlength(){ return Length;}//获取字符串长度 protected: char Data[1024]; unsigned Length; //表示字符串的长度,不包括结束的'\0' }; //-------------------------------------------------------------------------------------------------- 2. 定义一个类 ReString,公有继承自 BaseString,添加一个函数 Reverse()实 现字符串的倒置功能,即:将对象中的数据成员 Data 数组的元素倒置。倒置的概 念是:原字符串为“abcd1234”,倒置后为“4321dcba”。 3. 定义一个类 CopyString,公有继承自 BaseString,添加一个函数 Copy()实现 字符串的拷贝功能(传入的参数可以是一个字符串对象,也可以从一个字符串常量, 将参数中的字符串拷贝到对象的 Data 数组中去,注意:不要使用系统内置的 strcpy() 函数)。 面向对象程序设计上机指导 20 4. 定义一个类 CmpString,公有继承自 BaseString,添加一个函数 Compare() 实现字符串的比较功能(传入的参数可以是一个字符串对象,也可以从一个字符串 常量,将参数中的字符串同对象中的 Data 进行比较)。 思考字符串比较的算法。注意:不要使用系统内置的 strcmp()函数。 5. 在 main()函数中体现出派生类的构造函数的调用次序。可以在各类的构 造函数中输出“I am the * class’s constructor”。*表示当前类名。 6. 定义一个类 NewString 继承自 ReString、CopyString 和 CmpString 三个类, 在程序中体现出多重继承中的基类的继承程序。为基类 BaseString 增加功能: ToUpper()函数将所有字母大写,ToLower()函数将所有字母小写。并在继承的过程 中声明为虚基类,比较 BaseString 作为虚基类和非虚基类的情况下的区别

2023-05-26 上传