JAVA复习(进阶二)

文件和IO

File

  • File:文件 & 文件夹

  • 文件操作:创建、删除、控制

  • 文件夹操作:创建、删除、遍历

IO流

  • 概念:Input 输入,读入,Output 输出,写入

  • IO主体:内存

  • 数据源 : 提供数据的文件

  • 数据端: 接收数据的文件

  • 工具:流

    1. 字节流:继承自 InputStream / OutputStream 这两个抽象类。 FileInputStream / FileOutputStream ObjectInputStream / ObjectOutputStream

    2. 字符流:继承自 Reader / Writer 这两个抽象类。 FileReader / FileWriter

    • 缓冲流:缓冲流是一种装饰器类,目的是让原字节流、字符流新增缓冲的功能。 BufferedInputStream & BufferedOutputStream BufferedReader & BufferedWriter

    • 数据流:允许字节流直接操作基本数据类型和字符串。 DataOutputStream & DataInputStream

  • Serializable && Externalizable

    • Serializable 接口主要用于对象的序列化和反序列化。序列化是将对象的状态转换为字节流,以便可以保存到文件中或通过网络传输,而反序列化则是将字节流恢复为对象。

    • 实现 Serializable 接口非常简单,只需让类实现这个接口即可

    • 用于存储到本地磁盘或网络传输的对象必须实现序列化接口Serializable,如果对象中的某些属性不想被序列化,将该属性用transient(临时的)修饰即可。另外,static成员也不会被序列化。

  • 持久化

    • 数据从内存转存到可掉电设备

为什么要实现 Serializable 接口?

  1. 持久化:

    • 使对象能够被存储到文件、数据库或其他存储介质中,以便在后续使用时恢复。
  2. 网络传输:

    • 在分布式系统中,通过网络发送对象时,需要将其序列化为字节流,接收方再进行反序列化。
  3. 深度复制:

    • 可以通过序列化和反序列化来实现对象的深度复制,即创建一个对象的完全独立副本。
  4. 简化代码:

    • Java 提供了内置的序列化机制,使用 Serializable 接口可以避免手动编写复杂的序列化逻辑。

XML

  • XML: eXtensible Markup Language ,可扩展标记语言

  • 应用范围:

    1. 数据存储

    2. 系统配置

    3. 数据交换

XML文档结构

  1. 文档声明

  2. DTD 约束 (可选)

  3. 文档正文

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE team SYSTEM "team.dtd">
    <team>
        <coach>
            <name>张三</name>
            <sex>男</sex>
        </coach>
        <players>
            <player id="1">
                <name>李四</name>
                <age>25</age>
                <height>178</height>
                <weight>68</weight>
            </player>
            <player id="2">
                <name>王五</name>
                <height>185</height>
                <weight>70</weight>
            </player>
        </players>
    </team>
  4. XML元素命名规则

    • 名称可以含字母、数字以及其他的字符

    • 名称不能以数字或者标点符号开始

    • 名称不能以字符 “xml”(或者 XML、Xml)开始

    • 名称不能包含空格

    • 标签名大小写敏感

DTD: Document Type Definition

  • 作用:规范元素、属性以及元素间的关系

  • 量词:

    ? : 被修饰的元素可以出现0次或1次 +: 被修饰的元素至少要出现1次 * : 被修饰的元素可以出现任意次

<!ELEMENT team (coach,players)>
<!ELEMENT coach (name,sex)>
<!ELEMENT players (player+)>
<!ELEMENT player (name,age?,height,weight)>
<!ATTLIST player id CDATA #REQUIRED >   //#REQUIRED:必须的,#IMPLIED:非必须的
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ELEMENT weight (#PCDATA)>

XML解析

  • DOM: 把整个xml文件读入内存进行解析

  • SAX:一次读一部分,分段解析

反射

  • 概念:java程序在运行时加载、使用编译期完全未知的类信息。

  • Class: class:类型修饰符 Class:是一个数据类型

  • 对比:

    Class:描述所有的类(数据类型) 共性:成员变量、构造器、成员方法

    Student:描述所有的学生 。共性:学号、姓名、学习

Java 的反射机制是 Java 语言的一项强大特性,允许程序在运行时动态地获取类的信息,包括类的属性、方法和构造函数等,并能够操作它们。反射机制可以用于许多场景,例如框架开发、动态代理、序列化与反序列化等。

反射的基本概念

  1. Class 类:Java 中每个对象都是由一个 Class 对象来描述的。可以通过 Class.forName()、实例的 getClass() 方法或者使用 .class 来获取类的 Class 对象。

  2. 获取信息:反射提供了多种方法来获取类的信息,包括:

    • 获取类的名称
    • 获取类的字段
    • 获取类的方法
    • 获取类的构造函数
  3. 访问成员:通过反射,可以动态调用方法、访问和修改字段的值。

反射的优缺点

优点
  • 灵活性:可以在运行时动态加载和操作类,增强了程序的灵活性和扩展性。
  • 框架支持:许多 Java 框架(如 Spring、Hibernate)利用反射机制来提供 DI(依赖注入)、AOP(面向切面编程)等功能。
缺点
  • 性能开销:反射机制通常比直接调用慢,因为它涉及到动态查找和类型检查。
  • 安全性:通过反射可以访问和修改私有成员,可能会破坏封装性,增加安全隐患。
  • 复杂性:反射代码相对较难理解和维护。

注解

  • 注释:说明

  • 注解:功能

  • Java 注解(Annotations)是 Java 5 引入的一种元数据机制,允许开发者在代码中添加额外的信息,这些信息可以在编译时、类加载时或者运行时被读取和处理。注解通常用于提供编译器指令、配置框架行为、生成文档等。

语法

@interface()

内置注解

  • @Override 重写

  • @SusspressWarnings 抑制警告

  • @FunctionalInterface 函数式接口(只有一个抽象方法的接口)

自定义注解

public @interface SqlProvider {
    String value() default "delete from tableName";
    String sql() default "";
}

四大元注解

  • 元数据:说明数据的数据

  • 元注解:说明注解的注解

  • 四大元注解

    1. @Target

    2. @Retention

    3. @Documented

    4. @Inherited


注解的用途
编译时检查:提供额外信息供编译器使用,以进行检查。
运行时处理:框架(如 Spring 和 Hibernate)利用反射处理注解,以增加灵活性和功能。
生成文档:javadoc 可以提取注解信息生成文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值