xml & enum & annotation

23 篇文章 0 订阅
本文详细介绍了XML的基本概念、DOM4J解析XML的步骤,以及枚举的作用和使用场景。同时,讨论了Java中的单例设计模式,并深入探讨了注解的本质、用途及元注解的应用。
摘要由CSDN通过智能技术生成

xml

XML是作为配置文件存在的可扩展标记语言
可扩展:标签完全由用户自定义
标记语言:xml由标签以及属性组成
标签分类:
围堵标签:由开始标签和结束标签组成:

格式<student>   </student>

自闭和标签:不是成对出现的

<student/>

注意:标签中可以定义属性,值必须由引号引起来, 单双都可以

<student id="xxx001"/>

语法:
1.xml的文档声明必须在第一行第一列
2.xml文档有且只能有一个跟标签
3.编写注释

<!-- 注释内容 -->

4.CDATA区:用来处理大量特殊的字符

<![CDATA[  转义的内容  ]]>

XML解析:DOM4J 步骤
1.导入dom4j的jar包
2.创建核心对象SaxReader saxReader = new SaxReader()
3.使用核心对象的Document read(参数): 作用, 将硬盘上的xml文件读到内存中, 返回Document ;(参数可以是File对象或流)
4.使用Document的功能Element getRootElement();
5.解析Element

  • 获取属性:String attributeValue(“属性的键”)

  • 获取标签体:String getText()

  • 获取子标签

  • 获取单个的

Element element();//如果真的有多个, 默认返回第一个
Element element(String 标签名);
//根据标签名获取单个标签, 如果有多个, 默认返回第一个
  • 获取多个的
List elements();//获取所有的子标签,不包含后代标签
List elements(String 标签名);
//根据标签名获取满足的所有的子标签, 不包含后代标签

标签的约束
DTD:
缺点:
1.不能对文本进行更细节的控制, 比如, age只能约束是文本数据,不能约束其只能是数字
2. 一个xml文件只能引入dtd, 不能引用多个dtd, 没有办法区分多个dtd中相同的元素!
Schema:可以完美解决DTD约束的弊端,但是编写相对复杂

//编写约束
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.这是一个约束文档.com"
        elementFormDefault="qualified">

    <element name="users">
        <complexType>
            <sequence maxOccurs="unbounded">
                <element name="user">
                    <complexType>
                        <sequence >
                            <element name="name" type="string"></element>
                            <element name="age" type="int"></element>
                        </sequence>
                        <attribute name="id" type="string" use="optional"></attribute>
                    </complexType>

                </element>

            </sequence>
        </complexType>
    </element>

</schema>
//引入约束
<?xml version="1.0" encoding="UTF-8" ?>
<users
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.meijunjian.com"
    xsi:schemaLocation="http://www.这是一个被约束文档.xsd"
>
  <user>
      <name>aaa</name>
      <age>10</age>
  </user>
</users>

enum:枚举

作用: 用来表示固定几个值, 这些值由于是对象, 不能进行基本的算数运算, 比较安全
原理: 枚举本身就是多例, 保证一个类只有某几个对象
使用场景: 一般在注解中使用, 表示固定几个选项, 其他地方基本用不到
定义格式:

public  enum 枚举名 { 
	枚举项1, 枚举项2 ....;
}

特点:

  • 枚举中如果不给定构造, 维护的是一个私有的空参构造
  • .枚举中只能定义私有的构造函数
  • 枚举项必须放在第一行有效语句
  • 枚举中本质上就是一个类, 类中可以定义的内容, 枚举中都可以定义, 但是枚举一般只会定义几个枚举项, 表示固定几个值, 主要不让这几个固定值做运算!

单例设计模式:引入扩展内容
作用: 保证一个类有且只能创建一个对象
使用场景: 可以用来共享数据
实现方式:
方式1 : 程序员式:
1.私有化构造
2.维护一个public final static 本类对象
3.通过类名.对象名

public class Person {
    //私有化构造函数!!!!!
    private Person(){}
    //必须在本类中想办法调用构造造一个对象
    public final static Person person = new Person();
}

方式2: 饿汉式
1.私有化构造
2.维护一个private static 本类对象
3.提供一个public 静态的方法返回本类对象
4. 类名.静态方法获取本类对象

public class Person1 {
    //私有化构造函数!!!!!
    private Person1(){}
    //必须在本类中想办法调用构造造一个对象
    private  static Person1 person = new Person1();

    //提供一个公共静态的方法返回该对象
    public static Person1 getInstance(){
        return person;
    }
    
}

方式3: 懒汉式(延时加载):
1.私有化构造
2.维护一个private static 本类引用
3.提供一个public 静态的方法返回本类对象,方法体中判断对象是为null, 如果为null创建对象
4. 类名.静态方法获取本类对象

注意:   多线程访问可能出现线程安全问题,可以给方法加锁来解决
public class Person2 {
    //私有化构造函数!!!!!
    private Person2() {
    }
    //必须在本类中想办法调用构造造一个引用
    private static Person2 person;

    //提供一个公共静态的方法返回该对象
    public synchronized static Person2 getInstance() {
        if (person == null) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            person = new Person2();
        }
        return person;
    }
}

注解:annotation

注解本质上是一个接口, 而且JDK1.5出现的, 1.5的时候最重要是定义抽象方法
格式

public @interface 注解名{
	
}

注解也可以定义抽象方法
public abstract 返回值类型 方法名() default 默认值;

返回类型必须是以下类型:

  • 基本类型
  • String
  • 字节码类型
  • 枚举类型
  • 注解类型
  • 以上类型的一维数组

使用注解:@注解名(要对注解中所有的抽象方法进行重写)

  • 重写的格式: 方法名 = 返回值
  • 当方法名是value的时候, 而且仅仅只对value赋值的时候, value可以省略
  • 如果我们的返回值类型是数组, 但是赋值的只有一个值的时候, { }也可以省略
    作用:
    1.编译检查(JDK帮我们已经做好!)
    2.携带数据取代部分的xml文件, 来和框架进行对话的工具!
    JDK提供了三大注解:
@Override 方法重写
@Deprected 提示方法已过时
@SusspressWaining("all") 压制警告

注解解析:
注解是属于字节码层面,注解加载什么地方, 就获取那个地方对象(Class, Filed, Method, Constructor)
这四个对象都有这两个方法可以判断注解和获取注解

isAnnotationPresent(Class 注解类型)//返回true/false
//因为一个对象可以放多个注解, 你要给人家指定判断注解的类型
getAnnotation(Class 注解类型)//返回接口对象
//因为一个对象可以放多个注解, 你要给人家指定要获取的注解的类型,但是获取出来的是注解的实现类,  接口的实现类!

元注解:修饰注解的注解
常用的元注解:
@Target 如果不写, 默认你的注解修饰能修饰的任何东西

  • ElementType.METHOD:注解只能定义在方法上
  • ElementType.TYPE:注解只能定义在类上
  • ElementType.FIELD:注解只能定义在成员变量上

@Retention如果不写, 默认值是RetentionPolicy.SOURCE,只有在源码中生效

  • RetentionPolicy.CLASS 代码能在源码中和字节码文件中都生效
  • RetentionPolicy.RUNTIME 代码能在源码中, 字节码文件中, 以及加载到内存的字节码对象中都存在
  • RetentionPolicy.SOURCE 代码只能在源码中

@Inherited标注该注解可以被子类继承

@Documented标注抽成API文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值