Java32XML,JavaSE总结

Posted 码农编程录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java32XML,JavaSE总结相关的知识,希望对你有一定的参考价值。


1.DTD约束:配置文件

用word,txt传输数据,和xml一样都没有格式约束,但xml格式规范。
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!--  如上行文档声明 : 版本 和 编码 -->
<!--
    xml基本语法:
        1. 标签分类 :
              1. 成对标签 :  start tag  -  内容 - end tag
                               开标签             闭标签
                              <标签名>           </标签名>
              2. 单独标签 : 自关闭标签 <标签名/>           
        2. xml有且仅有一个根标签 root tag (第一个标签,xml中的所有内容都在内)
        3. 标签可以拥有属性的(开标签和自关闭标签)  key=value 即 id="003"
 
      了解:
        实体字符(转义字符):
                <  ->   &lt;    less than即缩写lt
                >   ->  &gt;    greater than
                &lt; &gt; 小于或大于就是不等于,前端支持,java不支持
                
        CDATA: unparsed character data 不解析的字符数据
        在这里的内容是不会被解析器所解析(看成注释)
-->
<list>
    <![CDATA[" if(x < > 1){ sout: xx} "]]>
    <hehe id="003"/>
        <book id="001">
            <name>java基础入门</name>
            <desc>人生必读第一本书</desc>
            <price>998</price>
            <extra>if(x &lt; &gt;  1){ sout: xx}</extra>
        </book>
        <book id="002">
            <name>java从入门到放弃</name>
            <desc>人生的最后一本</desc>
            <price>11</price>
        </book>
</list>
<?xml version="1.0" encoding="UTF-8" ?>
<!--
    可扩展: 开发者随意命名标签
           存数据  为了 以后 取数据(解析 parse)
          问题:会给数据解析带来麻烦
          解决: 约束(规则,规范)给xml指定约束, 其内部拥有什么内容,以及内容的编写格式都有要求
          规则: list里面必须是book标签(多个)
                book标签里还可以有name desc price等标签
                这些标签,里面有文本内容
                
          两种约束: DTD:  document type definition 文档类型定义 (了解)
                   Schema : 模式 (了解) 替代DTD,全称(XML Schema Definition,XSD)
-->
<?xml version="1.0" encoding="UTF-8" ?>
<!--
    DTD约束: 1. 根标签 必须是list
           2. list里有book (+ : 表示1个或多个book标签)
          3. book里有name desc price
          4. name desc price = PCDATA(parsed character data) 可以包含文本
          5. book 有一个属性 id 默认值 为 999
          如下写完约束后,会自动提示
-->
<!DOCTYPE list [
        <!ELEMENT list (book+)>
        <!ELEMENT book (name,desc,price)>
        <!ELEMENT name     (#PCDATA)>
        <!ELEMENT desc     (#PCDATA)>
        <!ELEMENT price     (#PCDATA)>
        <!ATTLIST book id CDATA "999">
        ]>

<!--111111111111111111111111111111111111111111111111111111111111111-->        
<list>
    <book id="001">
        <name>java基础入门</name>
        <desc>人生必读第一本书</desc>
        <price>998</price>
    </book>
    <book id="002">
        <name>java基础入门</name>
        <desc>人生必读第一本书</desc>
        <price>998</price>
    </book>
</list>

2.schema约束:命名空间

如下文件05_book.xsd

<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
        targetNamespace='http://www.itheima.com'
        elementFormDefault="unqualified">
    <!--
    	上面几行就是命名空间技术,需要被另一个文件引用即06_book.xml引用才可以生效。
    	schema约束: 约束规则用xml语法来书写的。
        element : 元素(开标签到闭标签之间的内容,我们统称为标签)
        complexType : 复杂类型(但凡元素有子标签或属性)
        sequence : 序列 (子元素的序列)
        maxOccurs: 最大出现次数,如下书标签最少出现一次,至多随意
    -->

<!--11111111111111111111111111111111111111111111111111111111111111111111111111111-->  
    <xs:element name='书架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' minOccurs="1">
                <xs:element name='' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

如下是06_book.xml调用05_book.xsd

<?xml version="1.0" encoding="UTF-8"?>
<itheima:书架 xmlns:itheima="http://www.itheima.com"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.itheima.com 05_book.xsd">

<!--11111111111111111111111111111111111111111111111111111111111111111111111-->  
    <>
        <书名>呵呵</书名>
        <作者>啦啦</作者>
        <售价>嘻嘻</售价>
    </>
</itheima:书架>

如下xml用到在线的xsd,自动补全。
在这里插入图片描述

3.xml解析(了解):dom4j

dom4J不是sun公司开发的,所以放入lib目录,add as Library相当于解压,sun公司开发的放External libraries。SAX解析读完一行解析完就可以当时释放解析内容,不耗内存但慢。SAX的变形pull。
在这里插入图片描述
在这里插入图片描述

package com.itheima04.parse;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.List;

public class ParseDemo {
    public static void main(String[] args) throws DocumentException {
        SAXReader reader = new SAXReader();
        //将下面这个文件读到内存中       
        Document document = reader.read("02_book.xml"); //document文档对象 表示  02_book.xml文件的        
        Element rootElement = document.getRootElement(); //解析过程: 爬树        
        List<Element> books = rootElement.elements("book"); //获取根元素 store的所有book子元素
 
        for (Element book : books) {                
            String name = book.elementText("name"); //获取子标签内部的文本数据
            String desc = book.elementText("desc");
            String price = book.elementText("price");                            
            String id = book.attributeValue("id"); //获取book标签的属性id的值
            System.out.println(id + "," + name + "," + desc + "," + price);
        }
    }
}

在这里插入图片描述

4.javase总结:IO流,集合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ArrayList底层是数组,默认长度为10,扩容系数1.5即下次15,ArrayList查询复杂度为o(1)。LinkedList底层双向链表,好处不用进行扩容,一直往后追加,坏处是要找第n个元素时间复杂度是o(n)。

HashMap底层也是数组,数组大小必须是2的幂次方倍,因为取hash下标时用了(size-1)与 当前hash值操作。LinkedHashMap底层和HashMap一样,只不过每个元素有一个指针指向下一个插入的元素,有序了。TreeMap底层红黑树实现,特点是按照key进行排序。HashTable线程安全(读写整个数组结构加了syn修饰即加了锁),HashMap线程不安全,两者底层存储结构一样。锁住整个结构代价大,所以出现了concurrent HashMap,只锁住数组的一个桶。HashSet将HashMap的value设为null。
在这里插入图片描述

5.Java语言有哪些特点?

在这里插入图片描述
在这里插入图片描述

6.为什么说 Java 语言“编译与解释并存”?

在这里插入图片描述
Oracle JDK 比 OpenJDK 更稳定。OpenJDK 和 Oracle JDK 的代码几乎相同,但 Oracle JDK 有更多的类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择 Oracle JDK,因为它经过了彻底的测试和稳定。某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到 Oracle JDK 就可以解决问题;

7.Java 和 C++的区别?

在这里插入图片描述

8.import java 和 javax 有什么区别?

在这里插入图片描述

9.Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?

在这里插入图片描述
在这里插入图片描述

10.==和 equals()

在这里插入图片描述

public class test1 {
    public static void main(String[] args) {
        String a = new String("ab"); // a 为一个引用
        String b = new String("ab"); // b为另一个引用,对象的内容一样
        String aa = "ab"; // 放在常量池中
        String bb = "ab"; // 从常量池中查找
        if (aa == bb) // true
            System.out.println("aa==bb");
        if (a == b) // false,非同一对象
            System.out.println("a==b");
        if (a.equals(b)) // true
            System.out.println("aEQb");
        if (42 == 42.0) { // true
            System.out.println("true");
        }
    }
}

在这里插入图片描述

11.hashCode()与 equals()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Integer i = 10;  //装箱
int n = i;   //拆箱

在这里插入图片描述

// return在无返回值方法的特殊使用
public void f5(int a) {
    if (a > 10) {
        return;//表示结束所在方法 (f5方法)的执行,下方的输出语句不会执行
    }
    System.out.println(a);
}

在这里插入图片描述
在这里插入图片描述

12.在一个静态方法内调用一个非静态成员为什么是非法的?

这个需要结合 JVM 的相关知识,静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。非静态成员属于实例对象,只有在对象实例化之后才存在,然后通过类的实例对象去访问。在类的非静态成员不存在的时候静态成员就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。

13.静态方法和实例方法有何不同?

1.在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象

2.静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

14.求一个长度为10的整型数组的最大元素,采用随机的方式赋值并输出各元素的值?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上是关于Java32XML,JavaSE总结的主要内容,如果未能解决你的问题,请参考以下文章

JavaSe基础知识总结

JavaSE 方法的使用

javaSE_07_方法

创建片段而不从 java 代码实例化它

JavaSE学习总结

JavaSE课程知识体系总结