JAVA基础(二)

来源:互联网 发布:博客助赢软件cpzyrj 编辑:程序博客网 时间:2024/04/29 18:18

01——抽象类和封装

1.1面向对象

面向对象就是采用现实模拟的方法设计和开发程序,实现代码复用

步骤:1.发现类。2.发现类的属性 3.发现类的方法

1.2构造方法及重载

构造方法是一个特殊的方法,用于创建类的对象,因此一个类必须包含至少一个构造方法,否则就无法创建对象。

构造方法特点:

名字和类名相同,没有返回值类型,构造方法的主要作用就是在创建对象时执行一些初始化操作,如给成员属性赋初值。

方法重载:

如果在一个类中包含两个或两个以上方法,它们的方法名相同,方法参数个数或参数类型不同,则该方法被重载了,这个过程称为方法重载,成员方法和构造方法都可以进行重载。

方法重载依据:

Ø 必须在同一个类里。

Ø 方法名相同

Ø 方法参数个数或参数类型不同

Ø 与方法返回值和方法修饰符没有任何关系。——构造方法也可以被重载。

1.3封装

封装是类的三大特性之一,是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

封装的具体步骤:修改属性的可见性来限制对属性的访问,为每个属性创建一对赋值方法和取值方法setter getter 方法,用于对这些属性的存取,在赋值方法中,加入对属性的存取控制语句。

封装的好处:隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便的加入存取控制语句,限制不合理操作。

Ø Private:成员变量和方法只能在类内访问,区别如下

Ø 默认:成员变量和方法只能被同一个包里的类访问,具有包可见性。

Ø Protected :可以被同一个包中的类访问,被用一个项目中不同包中的子类访问(父类、子类)

Ø Public :可以被同一个项目中所有类访问,具有项目可见性,也是最大的访问权限。

面向对象设计的过程就是抽象的过程,分三步:发现类,发现类的属性,发现类的方法。

02——继承 extends

继承通过extends 关键字来实现,其中SubClass称为子类,SuperClass称为父类,基类,或超类,修饰符如果是public,该类在整个项目中可见,不写public修饰符则只在当前包可见,默认private 不可以使用privateprotected修饰类。

继承是类的三大特性之一,是JAVA中实现代码复用的重要手段之一,JAVA中只支持单继承,即每个类只能有一个直接父类,继承表达的是is a的关系,或者说是一种特殊和一般的关系。

JAVA中子类继承父类哪些东西?

Ø 继承publicprotected修饰的属性和方法,不管子类和父类是否在同一个包里。

Ø 继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里。

Ø 无法继承private修饰的属性和方法。

Ø 无法继承父类的构造方法。

重写:

在子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的重写或方法的覆盖。

方法重写必须满足一下几点:

Ø 重写方法和被重写方法必须具有相同的方法名

Ø 重新方法和被重写方法必须具有相同的参数列表

Ø 重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类

Ø 重写方法不能缩小被重写方法的访问权限。

重载(overload)和重写(override)的区别和联系:

重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型无关。

重写涉及的是子类和父类之间的同名方法,要求方法名相同、参数列表相同,返回值类型相同。

Super 代表对当前的直接父类对象 默认引用。在子类中可以通过super关键字来访问父类成员。

Ø Super 必须是出现在子类中,(子类的方法和构造方法中)而不是其他位置。

Ø 可以访问父类的成员,例如父类的属性、方法、构造方法。

Ø 注意访问权限的限制,例如无法通过super访问private成员。

继承条件下构造方法的调用规则:

Ø 如果子类的构造方法中没有通过super 显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法,在这种情况下,写不写super()语句,效果都是一样的。

Ø 如果子类的构造方法中没有通过super显式调用父类的有参构造方法,那么将执行父类相应构造方法,而不执行父类无参构造方法。

Ø 如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。

Ø 特别注意:如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更搞一级父类应用,一直执行到顶级父类Object类的无参构造方法为止。

抽象类和final

抽象类和抽象方法

抽象类和抽象方法都通过abstract关键字来修饰

抽象类不能实例化,抽象类中可以没有,可以有一个或多个抽象方法,甚至可以全部都是抽象方法。

抽象方法只有方法声明没有方法实现,在抽象方法的类必须声明为抽象类,子类必须实现所有的抽象方法才能实例化,否则子类还是一个抽象类。

Abstract可以用来修饰类和方法,但是不能修饰属性和抽象方法。

Final修饰符

Finalabstract是功能相反的两个关键字:

final 可以用来修饰类,属性和方法,但是不能修饰构造方法。

final修饰的类不能再被继承,用final修饰的方法不能被子类重写,用final修饰的变量将会变成常量,只能赋值一次。

Abstract 可以用来修饰类和方法,但是不能修饰属性和构造方法。

Ø Abstract不能和private同时修饰一个方法。

Ø Abstract不能和static同时修饰一个方法。

Ø Abstract不能和final同时修饰一个方法。

面向对象设计的过程就是抽象的过程。

1. 发现类,2.发现类的属性,3.发现类的方法,4.优化设计,5.梳理运行过程。

03——多态

定义:多态是具有表现多种形态能力的特征,更专业的说法是,同一个实现接口,使用不同的实例而执行不同的操作。

条件:1.继承,2.子类重写父类方法。3.父类引用变量指向子类对象。

好处:减少代码冗余,提高代码的可扩展性和可维护性,提高执行效率。

3.1子类到父类的转换(向上转型)

>定义:将一个父类的引用指向一个子类对象,称为向上转型,自动转型。

>此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法。不是父类的方法。

>此时通过父类引用变量无法调用子类特有的方法。

使用父类作为方法的形参,是JAVA中实现和使用多态的主要方式。

3.2父类到子类的转换(向下转型)强转!

定义:将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,必须强制转换。

3.2.1 instanceof运算符

进行类型的判断。判断某种实体是否是某种类型。

向上转型后通过父类引用变量调用的方法是子类覆盖或者继承父类的方法,通过父类引用的变量无法调用子类特有的方法。

向下转型后可以访问子类特有的方法,必须转换为父类指向的真实子类类型,否则将会出现转换异常:ClassCastException

04——接口

关键字:interface

实现接口:implement

Ø 接口和类,抽象类是一个层次的概念,命名规则相同,如果修饰符是public 则该接口在整个项目中可见,如果省略修饰符,则该接口只在当前包可见。

Ø 接口中可以定义常量,不能定义变量,接口中属性都是自动调用public static final修饰,即接口中的属性都是全局静态常量,接口中的常量必须在定义时指定初始值。

Ø 接口中所有方法都是抽象方法,接口中方法都会自动用public abstract 修饰,即接口中只有全局抽象方法。

Ø 和抽象类一样,接口同样不能实例化,不能有构造方法。

Ø 接口之间可以通过extends 实现继承关系,一个接口可以继承多个接口,但是接口不能继承类。

Ø 一个类只能有一个父类,但可以通过implement实现多个接口,类必须实现接口的全部方法,否则必须定义为抽象类,类在继承父类的同时又实现了多个接口,extends 必须位于implement之前。

接口:表示一种约定

接口:表示一种能力

JAVAC#接口区别:

Ø JAVA中接口通过extends继承父接口,类通过implement 实现接口,C#中通过“:”号来实现这两个功能。

Ø JAVA接口中的成员变量(属性)一律是常量,自动用public static final 修饰,C#接口中不允许存在成员变量,但可以有属性。

Ø JAVA接口中属性和方法都可以使用public修饰,C#中默认public,但不允许显式使用public修饰。

Ø JAVA接口中可以定义静态常量和方法,但是C#接口中不允许包含任何静态成员。

08 异常

8.1 定义:异常就是在程序运行过程中所发生的不正常的事件。

 

8.2 异常的处理:

通过if-else 语句进行异常处理的缺点:

代码臃肿,家兔了大量异常情况判断和处理代码

影响开发效率,程序员把大部分精力放在异常处理上,赌漏洞上,减少了编写业务代码的时间。

>很难穷举所有异常情况,程序仍然不健壮

影响代码的可读性,加大日后程序维护的难度。(异常代码和程序代码交织在一起

SO :我们用到新的异常处理机制:Try catchtry catch finally 多重catch

常见的异常类型

异常 说明

Exception 异常层次结构的根类(父类)

airthmeticException 算数错误,如把0当除数

ArrayIndexOutOfDoundsException 数组下标越界

BullPointerException 尝试访问NUll对象成员

ClassNotFoundException 不能加载所需的类(加载数据库时)

InputMismatchException 数据类型不匹配

IllegalArgumentException JSP组件参数不对(放大接收到非法参数)

ClassCastException 强制类型转换出错

NumberFormatException 数字格式转换异常,如把abc转换成123

Try (必须) catch  finally 均为可选,但两者至少出现其中一个。

1.如果Try 语句块中所有语句执行完毕,那么finally 块会被执行。

2.如果Try 语句块在执行过程中出现异常,无论这个异常能否被catch 捕获到,finally始终执行。

finally唯一不执行的情况:在异常处理代码中执行System.exit1),将直接退出JAVA虚拟机。) 

注意:在使用多重catch时,catch块的排列顺序必须是从子类到父类,最后一个一般都是Exception类。

8.3 抛出异常

Throw

JAVA中,可以使用throw关键字来自行抛出异常。

Throw throws 的区别:

作用不同:throw用于程序员自行产生并抛出异常,throws用于声明在该方法内抛出异常。

位置不同:throw 位于方法体内部,可以单独使用,throws 必须跟在方法参数列表后面,且不能单独使用。

内容不同:throw抛出一个异常对象,而且只能一个。Throws 后面跟异常类,而且可以跟多个异常类。

  异常的分类:

>  throwable 类,所有异常类型都是throwable的子类,它派生两个子类,ErrorException 

>  Error类,表示仅靠程序本身无法恢复的严重错误,(一般由虚拟机抛出)比如:内存溢出动态链接失败,虚拟机错误,应用程序不会抛出这类异常,如果出现这类错误,除了让程序安全退出,无能为力。着重关注Exception类型的异常 。

> Exception 类,由JAVA应用程序抛出和处理的非严重异常,如所需文件找不到,网络连接中断或不通,算术运算错误,数组下标越界,装载了一个不存在的类,类型转换异常,对null对象操作、不同子类分别对应不同类型的异常。

运行时异常:包括RuntimeException 极其所有子类,不要求程序对它们做出处理,如:AirthmenticException InputMismatchExceptionNumberFormatExceptionNullPointerException。如果运行时出现异常,会输出异常的堆栈信息并中止程序运行。

> Checked 异常(非运行时异常):除了运行时异常外的其他由Exception继承来的异常类。程序必须捕获或者声明抛出这种异常,否则会出现编译错误,无法通过编译,处理方法有两种:通过try catch 在当前位置捕获并处理异常,通过throws 声明抛出异常交给上一级调用方法处理。

8.4——开源日志记录工具 Log4j

软件的运行离不开日志,日志主要用来记录运行过程中的一些重要的操作信息,便于监视系统运行情况,帮助用户发现和避免可能出现的问题,或者出现问题根据日志找出原因。

根据记录内容的不同可分为三类:

SQL日志:记录系统执行的SQL语句。

》异常日志:记录系统运行时发生的异常事件。 

》业务日志:用于记录系统运行过程。如:用户登录,操作信息。

使用Log4j记录日志步骤:

1.在项目中加入Log4Jj所使用的Jar文件

2.创建log4j.properties文件

3.编写log4j.properties文件,配置日志信息。

4.在程序中使用log4j记录日志信息。

Log4j配置文件输出级别:由大到小分别为:

Fatal  >  error  > warn  > info  > debug 

含义:

Fatal:指出每个严重的错误事件将会导致程序的退出。

Error:指出虽然发生错误,但仍不影响系统的继续运行。

Warn:表明会出现潜在错误的情形。

Info:在粗粒度级别上指明消息,强调应用程序的运行过程。

Debug:指出细粒度信息事件,对调试应用程序非常有帮助。

日志输出的目的地:Appender

1.ConsoleAppender:输出日志事件到控制台

2.FileAppender:输出到一个文件。

日志布局类型LayOut

Log4j中最常用的LayOut

> HTMLLayOut:格式化日志输出为HTML表格。

> SimpleLayOut:以一种非常简单的方式格式化日志输出,级别Level 跟“——”号。

> PatternOut:根据指定的转换模式格式化日志输出。

09——集合框架

为什么要引入集合?

数组一些明显的缺陷:

数组长度固定不变

>无法获取数据中真实存储的数据

>查找效率低下。

JAVA集合框架共有两大类接口,CollectionMap,其中Collection又有两个子接口——ListSet 所以说JAVA集合框架共有三大类接口,List Set Map,他们的共同点都是集合接口。

>Collection:接口存储一组不唯一(允许重复)无序的对象。

>Set:接口继承Collection接口,存储一组唯一(不允许重复)无序的对象。

>List:接口继承Collection接口,存储一组不唯一(允许重复)。有序(以元素插入的次序来放置元素,不会重新排列)的对象。

>Map:接口存储一组成对的键值对,提供Key Value 的映射,key不要求有序,不允许重复,value同样不要求有序,但允许重复。

List接口:实现List接口的常用类有:ArraylistLinkedList,他们可以容纳所有类型的对象,包括Null,允许重复保证顺序。

优点:在遍历和随机访问元素时的效率比较高。


VectorArraylist的异同。

ArrayList类出现之前,JDK中存在一个和他同样分配连续存储空间,实现了长度可以变数组的集合类Vector。两者实现原理相同,功能相同,在很多情况下都可以互用。

但是。> Vector是线程安全的,ArrayList重速度轻安全,是线程非安全的,所以到运行多线程环境中时,需要程序员自己管理线程的同步问题。

>当长度需要增长时,Vector默认增长为原来的一倍,而ArrayList只增长50%,有利于节约内存空间。

推荐:开发过程中做好使用最新版本的ArrayList

9.2 LinkedList类:

优点:插入或删除时效率比较高。

9.3 Map接口:

HashMapHashtable异同

HashMap类出现之前,JDK中存在一个和她同样采用哈希表存储方式,同样实现键值映射的集合类Hashtable。两者实现原理相同,功能相同,很多情况可以互用。

区别:

> Hashtable继承Dictionary类,而HashMap实现Map接口。

>Hashtable是线程安全的HashMap重速度轻安全,所以当运行多线程环境下时,需要程序员自己管理线程同步问题。

>Hashtable不允许Null值,(keyvalue都不允许重复,),HashMap允许Null值(KeyValue都允许)、

开发时,建议使用HashMap

优点:查询指定元素效率高。

9.4 迭代器Iterator

Collection接口的iterate()方法返回一个Iterator,然后通过Iterator接口的BooleanHasNext():判断是否存在另一个可以访问的元素;和Object next():返回要访问的下一个元素。

9.5泛型集合

JDK特征:指定数据类型标注一致

使用泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无须进行强制类型转换。避免出现ClassCastException异常。

数组和集合的主要区别:

>数组可以存储基本数据类型和对象,而集合中只能存储对象(可以以包装类形式存储基本数据类型)。

>数组长度固定,集合长度可以动态改变。

>定义数组时必须指定数组元素类型,集合默认其中所有元素都是Object

>无法直接获取数组实际存储的元素个数,length用来获取数组的长度,但可以通过size()直接获取集合实际存储的元素个数。

>集合有多种实现方式和不同的适用场合,不像数组只能采用分配连续空间方式。

>集合以接口和类的形式存在,具有封装、继承和多态等类的特征,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率。

10 JDBC

 10.0为什么需要JDBC

JAVA是通过JDBC技术实现对各种数据库访问的,简单的说JDBC充当了JAVA应用程序与各种不同数据库之间进行对话的媒介。

JDBCJAVA数据库连接(JAVA DataBase Connectivity)的简称、。由一组使用JAVA语言编写的类和接口组成。可以为多种关系数据库提供统一访问。Sun公司提供了JDBC的接口规范——JDBC API,数据库厂商或第三方中间件厂商根据该接口规范提供针对不同数据库的具体实现——JDBC驱动。

JDBC的工作原理:

1.JDBC API

JDBC API Sun公司提供,提供了JAVA应用程序与各种不同数据库交互的标准接口。如:Connection 接口、Statement接口、ResultSet接口、PrepareStatement接口等,开发者使用JDBC进行各类数据库操作。

JDBC API主要做三件事:1.与数据库建立连接、发送SQL语句、处理结果。

>DriverManager类:依据数据库的不同,管理相应的JDBC驱动。

>Connection接口:负责连接数据库并担任传送数据的任务。

>Statement接口:由Connection产生,负责执行SQL语句。

>ResultSet 接口:负责保存和处理Statement执行后所产生的查询结果。

>PreparedStatement 接口:Statement的子接口,由Connection产生,同样负责执行SQL语句,与Statement相比较,安全性更高,可读性 和可维护性更强。

2.JDBC Driver Manager

JDBC Driver ManagerSun公司提供,负责管理各种不同的JDB驱动,位于JDKjava.sql包中。

3.JDBC 驱动

有各个数据库厂商提供,负责连接不同的数据库。

10.1.4 JDBC访问数据库的步骤:

1.加载JDBC驱动

Class.forName(JDBC驱动类的名称);

2.与数据库建立连接

Connection conn = DriverManager.getConnection(“数据库连接字符串”。“用户名”。“密码”);

3.发送SQL语句,并得到返回结果。

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(“select * from ”);

4.处理返回结果。

10.2  Connection接口

两种常用的驱动方式:

1.JDBC - ODBC 

2.纯JAVA驱动

JAVA驱动运行速度块、支持跨平台‘是目前的常用方式,但是这类JDBC驱动只对应一种数据库,甚至只对应某个版本的数据库

10.3  Statement接口和ResultSet接口

> ResultSet executeQueryString sql):执行SQL语句查询并获取ResultSet对象。

> int executeUpdate(String sql):执行插入、删除、更新的操作。返回值是执行该操作影响的行数。

> boolean execute(String sql):可以执行任意SQL语句,获得一个Boolean值,表示是否返回ResultSet

StringBuffer的使用:JAVA中定义了StringStringBuffer两个类来封装对字符串的各种操作,String对象中的内容一旦被初始化就不能再改变,而StringBuffer用于存放内容可以改变的字符串。如果StringBuffer生成最终想要的字符串,可以通过toString()方法转换为一个String对象。“+”运算符可以通过StringBuffer类的Append()方法实现。

10.4  PrepareStatement 

PrepareStatementStatement好在哪里?

提高了代码的可读性和可维护性

提高了SQL语句执行的性能。

提高了安全性。

11 Oracle基础

Oracle是一个对象关系数据库管理系统,是Oracle公司的核心产品,是基于“客户/服务器”的系统结构

11.1 基本概念

1.数据库:以表空间形式存在。

2.数据库实例:运行数据库

3.数据文件:.DBF 用于存储数据库数据的文件

4.控制文件:.CTL (二进制文件)包括数据文件的名字和位置。

5.日志文件:记录对数据库的所有更改信息。

6.表空间:每个Oracle数据库都是由若干个表空间组成的,一个表空间可以有多个数据文件,一个数据文件只能属于一个表空间。System 系统表空间。

SYSSystem 用户 都是系统用户,SYS权限最大。

11.2 创建表空间

11.3  Oracle数据类型

1.字符数据类型:

a) CHAR数据类型:用于存储固定长度的字符串。

b) VarChar2数据类型:存储可变长度的字符串。

c) Nchar NvarChar2 

NCHAR用来存储Unicode字符集类型——双字节字符数据。

2.数值数据类型:

Number数据类型可以存储整型和浮点型。

3.日期时间数据类型:

a) Date数据类型

b) TIMESTAMP 数据类型 精确到小数点后5位 ,和Date用法相似。

4.LOB数据类型:

主要用于存储大型、没有结构化的数据。

a) BLOB:用于存储二进制对象。

b) CLOB:用于存储字符格式的大型对象。

11.3.3  序列

定义:序列是Oracle提供的用于产生一组等间隔整型数值的数据库对象。

12 Oracle应用

12.1 Oracle常用函数

1.日期处理函数:

2.DECODE)_函数:

3.NVL()函数:

1.常用的字符函数:

2.常用的数字函数:

3.常用的日期函数:

4.常用的转换函数:

5.常用的其他函数:

6.常用的多行函数:

12.3 Oracle索引

1.B树索引、位图索引、反向键索引(分类标准是索引的存储结构)

a) B 树索引是Oracle中最常用的索引,也是默认索引类型。

b) 位图索引优点:

适用于低基数列,不同值的数目比表的行数少的列。

c) 反向键索引是一种特殊的B树索引,在含有序数的列时最有用。

2.唯一索引、非唯一索引

索引可以是唯一的也可以不是唯一的,

唯一索引可以确保在定义索引的列中,表的任意两行的值都不相同。

非唯一索引没有在列值上规定限制。
Oracle 自动为表的主键列创建唯一索引。

3.单列索引、组合索引、基于函数的索引

单列索引是在表的单个列中创建索引,组合索引是在多个列上创建的索引。

基于函数的索引是一种特殊的索引,它不是创建在单个或者多个列上而是创建在函数或者表达式上。

12.4  Oracle中的导入和导出

12.4.1 使用imp exp 导入和导出数据

1.使用exp导出数据

2.使用imp导入数据

12.4.2 使用PL/SQL Developer 导入导出数据

1.使用PL/SQL Developer 导出数据

> Oracle Export. Dmp 二进制文件,跨平台、效率高、使用广。

> SQL inserts .SQL 文件格式,效率不如第一种

> PL/PL Developer .pde 自有文件格式,只能使用该软件导入导出。

2.使用PL/SQL Developer 导入数据

13 数据访问层

数据持久化:持久化是将程序在瞬时状态和持久状态间转换的机制。JDBC就是一种持久化机制。

持久化操作主要包括:增删改查。

DAO模式:Data Access Object(数据存储对象),位于业务逻辑和持久化数据之间实现对持久化数据的访问。

DAO的好处:隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用Dao方法即可,分工明细,数据访问层变 化不会影响业务逻辑代码,降低耦合,提高了代码的可复用性。(高内聚低耦合)

 > 隔离了不同数据库实现。采用面向对象编程。符合“开闭原则”降低了代码的耦合性,提高了代码的可 扩展性和系统的可移植性。

DAO的组成:

> DAO 接口:把对数据库的所有操作定义成一个个抽象方法,可以提供多种实现。

> DAO实现类:针对不同数据库给出DAO接口定义方法的具体实现。

实体类:用于存放和传输对象数据。

数据库连接和关闭工具类:避免的数据库连接和关闭代码的重复使用,方便修改。

13.3 分层开发

优势:

:每一层专注于自己功能的实现,便于提高质量。

:便于分工协作。从而提高效率。

:便于代码复用。

:便于程序扩展。

原则:

:每一层都要自己的职责、

:上一层不用关心下一层的实现细节。

:上一层调用下一层发功能。

封装性原则:提供公开的统一接口,隐藏内部具体实现。

顺序访问原则:下一层为上一层服务,而不使用上层提供的服务。业务逻辑层可以访问数据访问层,而数据访问层不能访问业务逻辑层。

使用实体类传递数据:

实体类的属性一般使用private修饰。

> getter  setter 一般用public 修饰

对实体类提供无参构造方法,对业务需要提供有参构造方法。

实现 java.io.Serializable。 

定义属性serialVersionUID,解决不同版本之间的序列化问题。

14 XML File  I/O

XML 简介:XMLExtensible MarkUp Language)可扩展标记语言、一种简单的数据存储语言。

XML文档的主要部分是元素,元素由标签开始,元素内容和结束标签组成。元素内容可以包含子元素、字符数据。

XHTML XML 区别?

XHTML用来显示数据,而XML用来存储交换、和传递数据。

XHTML标签都用固定含义,不能去创造心的标签,而XML支持自定义标签。具有扩展性。

注释:<!--  -->

结构定义:目前定义XML文档结构的“图纸”有两种形式:DTDXSD

DTD又分为:内部DTD和外部DTD

CSS样式表也分为:内部和外部。

XML作用:

:数据存储

:数据交换

:数据配置。

XML CSS 

XML的其他概念:XPath XSLT、 XSL

解析XML DOM 和 SAX

DOM: 文档对象模型 (Document Object Model

DOM的主要对象:

Documeng NodeList Node、 Element

SAX:另一种常用的XML解析技术。 Sun公司提供了JAXP接口来使用DOMSAX

使用Reader读取文件内容:

JAVA中,文件的输入和输出都是通过流来实现的,什么是流呢,流就是一组有顺序,有起点和终点的动态数据集合。流是数据在传输时的一种形态。

按照处理数据单位可分为:字节流和字符流。

字节流处理字节的输入和输出。

字符流为文字符的输出和输入提供了方便。

所有字符输入流类都是抽象类Reader的子类,所有字符输出流类都是Writer的子类。

使用Writer 输出内容到文件:

Void write(int char double string n)

Void close();关闭输出流。

3 0