日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2017年4月21号课堂笔记

發(fā)布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017年4月21号课堂笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2017年4月21號 星期五 空氣質量:良

?

內容:XML,Dom4j解析XML文件,單例

一、XML

老師代碼:

<?xml version="1.0" encoding="UTF-8"?>
<!-- XML的注釋
xml是什么? 可擴展的標記語言 ! 開閉原則! 設計模式中的6大原則!
什么是標記? 確保數(shù)據(jù)的唯一性!
int age=5;
syso(age);

01.符合W3C標準
02.可擴展的標記語言
03.無需預編譯
04.著重于數(shù)據(jù)的保存和傳輸

DTD:就是對xml文件的約束!是一種事先定義好的規(guī)范!

CDATA: Character Data 字符數(shù)據(jù)
語法: <![CDATA[
代碼 (不會被解析器 解析! 不會當作標記!)
]]>

Dom(Document Object Model):文檔對象模型 ! dom會把xml文件映射成一個 倒掛的樹!

常見的4種解析器:
Dom: 基于xml文檔樹結構的解析,把文件中的內容讀取到內存中,占內存,消耗資源!
SAX: 基于事件的解析!不需要將文件中的內容讀取到內存中!占用資源少!
JDom: 第一個java特定的模型! 符合2 8原則!本身并不包含解析器!使用SAX2解析器解析!
Dom4j:就是JDom的一個分支!性能優(yōu)異!功能強大!


特殊符號:
<: &lt;
>: &gt;
": &quot;
': &apos;
&: &amp;


編寫xml標簽的 注意事項:
01.所有的xml元素必須有閉合標簽 /
02.xml標簽對大小寫敏感
03.xml標簽必須正確的嵌套
04.xml同級標簽 縮進對齊
001. table鍵 選中的部分整體 后移
002. shift+table 選中的部分整體 前移
05.元素名稱 不能以數(shù)字和標點符號開始
06.元素名稱 不能包含空格

-->



<學校>
<班級 name="1年級">
<學生 name="小黑1"></學生>
<學生 name="小黑2"></學生>
<學生 name="小黑3"></學生>
</班級>
<班級 name="2年級">
<學生 name="小紅1"></學生>
<學生 name="小紅2"></學生>
<學生 name="小紅3"></學生>
</班級>
<班級 name="3年級">
<學生 name="小紫1"></學生>
<學生 name="小紫2"></學生>
<學生 name="小紫3"></學生>
</班級>
</學校>



二、Dom4j解析XML文件

1、導入Dom4j的jar包

2、老師代碼:

package cn.bdqn.xml;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jTest {

/**
* Dom4j 解析 xml文件
* 思路:
* 01.創(chuàng)建解析器工廠
* 02.解析器工廠創(chuàng)建具體的解析器
* 03.解析器把xml文件轉換成一個dom樹
* 04.以dom樹的根節(jié)點 為起點 操作dom樹
*/
static Document document = null;
static Element root = null;

// 獲取 dom樹 以及 根節(jié)點 root
public static void main(String[] args) {
// 創(chuàng)建解析器對象
SAXReader reader = new SAXReader();
try {
document = reader.read("phone.xml");
// 獲取根節(jié)點
root = document.getRootElement();
} catch (DocumentException e) {
e.printStackTrace();
}

// 新增手機信息 addPhone();
// 刪除指定的手機信息 delPhone();
// 修改指定的手機信息
updatePhone();
// 查詢所有的手機信息
showPhones();
}

// 查詢所有的手機信息
private static void showPhones() {
// 從根節(jié)點開始 遍歷所有的子節(jié)點
Iterator<Element> brands = root.elementIterator();
while (brands.hasNext()) {
Element brand = brands.next();
// 通過 節(jié)點獲取屬性名,以及獲取屬性值
System.out.println("手機的品牌是:" + brand.attributeValue("name")); // 你給我一個
// 再次遍歷brand 獲取手機的型號
Iterator<Element> types = brand.elementIterator();
while (types.hasNext()) {
Element type = types.next();
// 獲取屬性值
System.out.println("型號是:" + type.attributeValue("name"));
// 獲取元素內容
if (!type.getText().equals("")) {
System.out.println("元素內容是:" + type.getTextTrim());
}
}
}
}

// 新增手機信息
private static void addPhone() {
/**
* 01.創(chuàng)建需要的元素
* 在內存中創(chuàng)建了
* <Brand></Brand>
*/
Element element = root.addElement("Brand");
/**
* 02.給元素增加屬性
* 在內存中增加了
* <Brand name="小米"></Brand>
*/
element.addAttribute("name", "小米");
/**
* 03.在元素下面新增子元素
* 在內存中增加了
* <Brand name="小米">
* <Type></Type>
* </Brand>
*/
Element type = element.addElement("Type");
/**
* 04. 在內存中增加了
* <Brand name="小米">
* <Type name="紅米Not7"></Type>
* </Brand>
*/
type.addAttribute("name", "紅米Not7");
/**
* 上面的所有操作 都是 內存中的對象!并沒有和xml文件進行關聯(lián)?
*
* 持久化操作:
* 把內存中的內容保存到 xml文件中的過程!
* 增刪改操作,都必須是操作xml文件!
*/
savePhone();

}

/**
* 把內存中的內容保存到 xml文件中的過程! 輸出流
*/
private static void savePhone() {
// 創(chuàng)建轉換器
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = null;
/**
* 創(chuàng)建輸出流對象
* XMLWriter(Writer w,OutputFormat f)
* w:說 我們把內存中的內容輸出到 哪個xml文件中去
* f:說 到xml文件后的 輸出格式
* FileWriter是Writer 孫子類!
*/
try {
writer = new XMLWriter(new FileWriter("phone.xml"), format);
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 關閉資源
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

// 刪除指定的手機信息
public static void delPhone() {
// 通過root獲取所有的Brand元素
Iterator<Element> brands = root.elementIterator();
while (brands.hasNext()) {
Element brand = brands.next(); // 獲取一個brand
if (brand.attributeValue("name").equals("蘋果")) { // 找到了
// 刪除
brand.getParent().remove(brand);
}
}
// 保存xml
savePhone();
}

// 修改指定的手機信息
public static void updatePhone() {
// 通過root獲取所有的Brand元素
Iterator<Element> brands = root.elementIterator();
while (brands.hasNext()) {
Element brand = brands.next(); // 獲取一個brand
if (brand.attributeValue("name").equals("小米")) { // 找到了
Iterator<Element> types = brand.elementIterator();
while (types.hasNext()) {
Element type = types.next();
if (type.attributeValue("name").equals("紅米Not7")) {
type.attribute("name").setValue("紅米Note7");
}
}
}
}
// 保存xml
savePhone();
}

}

?

三、單例

老師代碼:

1、說明(readme):

?

單例設計模式:


概念:
01.是java中最簡單的一個設計模式之一!
02.屬于創(chuàng)建型模式!提供了一種創(chuàng)建對象的最佳方式!


特點:
01.涉及一個單一的類!該類負責創(chuàng)建自己的對象,同時確保只有一個對象!
02.這個類提供一種訪問其對象的方式!可以供外部訪問!

注意點:
01.單例類只能有一個實例!
02.單例類必須是自己創(chuàng)建自己的唯一實例!
03.單例類必須給所有的其他對象提供這個實例!

常見的實現(xiàn)方式:
01.懶漢
02.餓漢
03.雙重鎖

實現(xiàn)的步驟:
01.創(chuàng)建一個類本身 類型的靜態(tài)屬性
02.私有化構造(私有化無參構造,帶參構造不用寫了)
03.提供對外部訪問的接口

2、改成單例模式前(可創(chuàng)建多個對象)

1)學生類

package cn.bdqn.bean;

//學生類
public class Student {

private String name; // 姓名
private int age;// 年齡

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Student() {
super();
}

public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}

}

2)測試類

package cn.bdqn.bean;

public class SingletonTest {

public static void main(String[] args) {
// 創(chuàng)建一個學生對象
Student student1 = new Student("學生1", 1);
// 再創(chuàng)建一個學生對象
Student student2 = new Student("學生2", 2);

System.out.println("學生1的姓名是:" + student1.getName());
System.out.println("學生2的姓名是:" + student2.getName());
}

}

3、懶漢式

1)學生類

package cn.bdqn.bean2;

/**
* 懶漢式
*/
public class Student { // 學生類

// 01.創(chuàng)建一個類本身 類型的靜態(tài)屬性
private static Student student = null;

// 02.私有化構造
private Student() {

}

// 03.提供對外部訪問的接口
public static synchronized Student getInstance() {
if (student == null) {
student = new Student();
}
return student;
}

public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}

private String name; // 姓名
private int age;// 年齡

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}

}

2)測試類

package cn.bdqn.bean2;

public class SingletonTest {

public static void main(String[] args) {
// 創(chuàng)建一個學生對象
Student student1 = Student.getInstance();
student1.setName("學生1");
// 再創(chuàng)建一個學生對象
Student student2 = Student.getInstance();
// 再創(chuàng)建一個學生對象
Student student3 = Student.getInstance();
student3.setName("學生3");
// 再創(chuàng)建一個學生對象
Student student4 = Student.getInstance();

System.out.println("學生1的姓名是:" + student1.getName());
System.out.println("學生2的姓名是:" + student2.getName());
System.out.println("學生3的姓名是:" + student3.getName());
System.out.println("學生4的姓名是:" + student4.getName());
}
}

?

4、餓漢式

1)學生類

?

package cn.bdqn.bean3;

/**
* 餓漢式
*/
public class Student { // 學生類

// 01.創(chuàng)建一個類本身 類型的靜態(tài)屬性
private static Student student = new Student();

// 02.私有化構造
private Student() {

}

// 03.提供對外部訪問的接口
public static synchronized Student getInstance() {
return student;
}

public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}

private String name; // 姓名
private int age;// 年齡

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}

}

2)測試類

?

package cn.bdqn.bean3;

public class SingletonTest {

public static void main(String[] args) {
// 創(chuàng)建一個學生對象
Student student1 = Student.getInstance();
student1.setName("學生1");
// 再創(chuàng)建一個學生對象
Student student2 = Student.getInstance();
// 再創(chuàng)建一個學生對象
Student student3 = Student.getInstance();
student3.setName("學生555");
// 再創(chuàng)建一個學生對象
Student student4 = Student.getInstance();

System.out.println("學生1的姓名是:" + student1.getName());
System.out.println("學生2的姓名是:" + student2.getName());
System.out.println("學生3的姓名是:" + student3.getName());
System.out.println("學生4的姓名是:" + student4.getName());
}
}

?

5、雙重鎖

1)學生類

?

package cn.bdqn.bean4;

/**
* 雙重鎖
*/
public class Student { // 學生類

// 01.創(chuàng)建一個類本身 類型的靜態(tài)屬性
private static Student student = null;

// 02.私有化構造
private Student() {

}

// 03.提供對外部訪問的接口
public static synchronized Student getInstance() {//第一道鎖
if (student == null) {
synchronized (Student.class) {//第二道鎖
if (student == null) {
student = new Student();
}
}
}
return student;
}

public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}

private String name; // 姓名
private int age;// 年齡

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}

}

2)測試類

?

package cn.bdqn.bean4;

public class SingletonTest {

public static void main(String[] args) {
// 創(chuàng)建一個學生對象
Student student1 = Student.getInstance();
student1.setName("學生1");
// 再創(chuàng)建一個學生對象
Student student2 = Student.getInstance();
// 再創(chuàng)建一個學生對象
Student student3 = Student.getInstance();
student3.setName("學生666");
// 再創(chuàng)建一個學生對象
Student student4 = Student.getInstance();

System.out.println("學生1的姓名是:" + student1.getName());
System.out.println("學生2的姓名是:" + student2.getName());
System.out.println("學生3的姓名是:" + student3.getName());
System.out.println("學生4的姓名是:" + student4.getName());
}
}

?

四、老師課上提到的幾個概念(網(wǎng)上查到的概況)

1、DTD ((Document Type Definition))

文檔類型定義(Document Type Definition)是一套為了進行程序間的數(shù)據(jù)交換而建立的關于標記符的語法規(guī)則。

它是標準通用標記語言和[1]??可擴展標記語言1.0版規(guī)格的一部分,文檔可根據(jù)某種DTD語法規(guī)則驗證格式是否符合此規(guī)則。

文檔類型定義也可用做保證標準通用標記語言、可擴展標記語言文檔格式的合法性,可通過比較文檔和文檔類型定義文件來檢查文檔是否符合規(guī)范,元素和標簽使用是否正確。

文件實例提供應用程序一個數(shù)據(jù)交換的格式。

使用各類文檔類型定義是為了讓標準通用標記語言、可擴展標記語言文件能符合規(guī)定的數(shù)據(jù)交換標準,因為這樣,不同的公司只需定義好標準文檔類型定義,就都能依文檔類型定義建立文檔實例,并且進行驗證,如此就可以輕易交換數(shù)據(jù),防止了實例數(shù)據(jù)定義不同等原因造成的數(shù)據(jù)交換障礙,滿足了網(wǎng)絡共享和數(shù)據(jù)交互。

?

文檔類型定義(DTD)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。

DTD 可被成行地聲明于 XML 文檔中,也可作為一個外部引用。

?

內部的 DOCTYPE 聲明

假如 DTD 被包含在您的 XML 源文件中,它應當通過下面的語法包裝在一個 DOCTYPE 聲明中:

<!DOCTYPE 根元素 [元素聲明]>

帶有 DTD 的 XML 文檔實例

<?xml version="1.0"?> <!DOCTYPE note [<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)> ]> <note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body> </note>

以上 DTD 解釋如下:

!DOCTYPE note?(第二行)定義此文檔是?note?類型的文檔。

!ELEMENT note?(第三行)定義?note?元素有四個元素:"to、from、heading,、body"

!ELEMENT to?(第四行)定義?to?元素為 "#PCDATA" 類型

!ELEMENT from?(第五行)定義?frome?元素為 "#PCDATA" 類型

!ELEMENT heading?(第六行)定義?heading?元素為 "#PCDATA" 類型

!ELEMENT body?(第七行)定義?body?元素為 "#PCDATA" 類型

外部文檔聲明

假如 DTD 位于 XML 源文件的外部,那么它應通過下面的語法被封裝在一個 DOCTYPE 定義中:

<!DOCTYPE 根元素 SYSTEM "文件名">

這個 XML 文檔和上面的 XML 文檔相同,但是擁有一個外部的 DTD: (在 IE5 中打開,并選擇“查看源代碼”命令。)

<?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>

這是包含 DTD 的 "note.dtd" 文件:

<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>

為什么使用 DTD?

通過 DTD,您的每一個 XML 文件均可攜帶一個有關其自身格式的描述。

通過 DTD,獨立的團體可一致地使用某個標準的 DTD 來交換數(shù)據(jù)。

而您的應用程序也可使用某個標準的 DTD 來驗證從外部接收到的數(shù)據(jù)。

您還可以使用 DTD 來驗證您自身的數(shù)據(jù)。

?

2、cdata(character data)

在標記CDATA下,所有的標記、實體引用都被忽略,而被XML處理程序一視同仁地當做字符數(shù)據(jù)看待,CDATA的形式如下:
<![CDATA[文本內容]]>


CDATA的文本內容中不能出現(xiàn)字符串“]]>”,另外,CDATA不能嵌套。


DTD實例:
指定類型為CDATA以后就可以在XML中被用于實例,
例如下面payment 元素的type屬性被指定為CDATA類型后在XML中就可以賦于"check"的字符數(shù)據(jù)。
<!ATTLIST payment type CDATA "check">
XML 實例:
XML 解析器通常會解析 XML 文檔中所有的文本。
當某個 XML 元素被解析時,其標簽之間的文本也會被解析:
<message>此文本也會被解析</message>解析器之所以這么做是因為 XML 元素可包含其他元素,就像這個例子中,其中的 <name> 元素包含著另外的兩個元素(first 和 last):
<name><first>Bill</first><last>Gates</last></name>
而解析器會把它分解為像這樣的子元素:
<name>
<first>Bill</first>
<last>Gates</last>
</name>

?

3、W3C(World Wide Web Consortium)

萬維網(wǎng)聯(lián)盟創(chuàng)建于1994年,是Web技術領域最具權威和影響力的國際中立性技術標準機構。

到目前為止,W3C已發(fā)布了200多項影響深遠的Web技術標準及實施指南,如廣為業(yè)界采用的超文本標記語言(標準通用標記語言下的一個應用)、可擴展標記語言(標準通用標記語言下的一個子集)以及幫助殘障人士有效獲得Web內容的信息無障礙指南(WCAG)等,有效促進了Web技術的互相兼容,對互聯(lián)網(wǎng)技術的發(fā)展和應用起到了基礎性和根本性的支撐作用。

W3C為解決 Web 應用中不同平臺、技術和開發(fā)者帶來的不兼容問題,保障 Web 信息的順利和完整流通,萬維網(wǎng)聯(lián)盟制定了一系列標準并督促 Web 應用開發(fā)者和內容提供者遵循這些標準。標準的內容包括使用語言的規(guī)范,開發(fā)中使用的導則和解釋引擎的行為等等。 W3C也制定了包括XML和CSS等的眾多影響深遠的標準規(guī)范。 但是,W3C 制定的 web 標準似乎并非強制而只是推薦標準。因此部分網(wǎng)站仍然不能完全實現(xiàn)這些標準。特別是使用早期所見即所得網(wǎng)頁編輯軟件設計的網(wǎng)頁往往會包含大量非標準代碼。

4、JSON

?JSON(JavaScript?Object Notation, JS 對象標記) 是一種輕量級的數(shù)據(jù)交換格式。

它基于?ECMAScript?規(guī)范的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。

簡潔和清晰的層次結構使得 JSON 成為理想的數(shù)據(jù)交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網(wǎng)絡傳輸效率。

?

5、Tips:

1)XML里雙擊后+F2----->查看底層

2)alt+shift+z----->把當前代碼用模板包圍,再進行后續(xù)操作(如try-catch或者for循環(huán)等)

demo:

如果 選定 int a=123;
alt+shift+z 選 try catch
就會變?yōu)?
try
{
int a=123;
}
catch(Exception e)
{
}

?

五、作業(yè)

1、soso項目

2、做題

六、老師辛苦了!

?

?

轉載于:https://www.cnblogs.com/wsnedved2017/p/6742868.html

總結

以上是生活随笔為你收集整理的2017年4月21号课堂笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。