"Java输入输出类库主要涵盖了字节输入流相关的类,这些类是Java I/O系统的基础,用于处理二进制数据的输入。InputStream是所有字节输入流的基类,提供基本的读取字节的方法。例如,FileInputStream用于从文件中读取数据,ObjectInputStream则能读取序列化的对象。PipedInputStream允许数据在不同线程间传递,SequenceInputStream可顺序读取多个输入流,FilterInputStream作为一个过滤器,提供了装饰者模式的应用,用于增强或修改InputStream的功能。StringBufferInputStream(已过时)、ByteArrayInputStream允许从内存中的字节数组进行读取,DataInputStream则用于读取基本Java类型的数据,PushbackInputStream允许回退已读取的字节,BufferedInputStream和LineNumberInputStream分别提供了缓冲和行号跟踪功能。此外,Node Stream在JavaScript中是处理流式数据的接口,但在Java中并不存在直接对应的类。"
在Java编程中,了解访问控制符是非常重要的。共有四种访问控制级别:public、缺省、private和protected。public成员可以在任何地方被访问;缺省(包级私有)成员仅在同包内的类中可见;private成员只能在定义它们的类内部访问;而protected成员对本包内的类和所有子类可见。private和protected的组合在Java中并不存在。
静态属性和方法是属于类的,而不是单个对象的。静态属性(如static int count)可以被所有类的实例共享,而静态方法(如static void printHello())可以直接通过类名调用,无需创建对象。静态初始化器(static {}块)用于在类加载时初始化静态属性。
抽象类和抽象方法用于表示抽象概念,它们定义了类的共同特征,但不提供具体实现。抽象类不能直接实例化,而抽象方法必须在抽象类中定义,没有方法体。例如,PhoneCard是一个抽象类,包含抽象方法draw()和area(),表示一个通用的电话卡接口。
final关键字在Java中用于表示不可变性。final类不能被继承,final属性一旦赋值后不能改变,final方法不能被子类重写。同时,每个对象都有一个finalize()方法,当垃圾收集器确定不再有对该对象的引用时,会调用这个方法进行清理工作。需要注意的是,final不能与abstract同时使用,因为抽象类是设计用来被继承的,而final类则防止了这种行为。
继承是面向对象编程的一个关键特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,我们可以创建出层次结构的类,如电话卡类可以有200卡、IP卡等子类。UML(统一建模语言)是用于类和对象关系表示的标准,它帮助我们清晰地描绘出类之间的继承、关联和依赖关系。例如,Employee类可能有CommonEmployee、Manager等子类,它们都继承了Employee的基本属性和方法,但各自又有特定的扩展。