关闭

自己的java知识整理一

737人阅读 评论(0) 收藏 举报
2012-3-6:
public作用于当前类,子孙类,同一包下,不同包下
protected作用于当前类,子孙里,同一包下,'
friendly作用于当前类,子孙类
private只作用在当前类




Overload:重载,同名不同参数(参数类型不同,数量不同,顺序不同)
Override:重写,同名同参数,子类复写了父类.并且可以解决父类不
能够解决的问题,并且子类的访问权宽于父类.子类只能抛
出比父类更小的异常.
如果几个重载的方法的参数不同,那它的返回者当然可以不同,但是
如果是两个参数相同的重载方法,也有可能有不同的返回者,所以要
让它们的返回值不同是不行的.因为如果我们调用在一个类中有两个
同名同参的方法,java就会不知道到底是调用哪个方法了,因为它无
法通过返回结果类型来判断.


construct不能被继承,也不能被重写,但是能够被重载


接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类,但
是必须要有明确的构造方法.抽象类中可以有静态main方法.


clone有缺省行为,super.clone().必须复制了父类的成员,然后才能
复制自己的成员.




面向对象的特征:
封装:
封装是保证软件部件具有良好的模块性的基础,可以降低软件内部的耦合
度.封装其实就是把描述一个对象的属性和行为封装在一个模块里面,
就是一个类.属性用变量来表示,行为用方法来表示.它是可以通过自己
来访问自己的成员的.
2012-3-6:
抽象:
抽象其实就是将事物一些相似和共性归为一个类,就不需要考虑这些事
物的细节,只考虑事物之间的相似性就行了,抽象包括了行为抽象和状态抽象.


继承:
继承其实就是子类自动共享父类的数据和方法,这是类之间的一种关系,
提高了软件的重用性和扩展性.




多态:
多态在我理解就是多种形态,比如方法,方法被重写或者被重载了就有了
多种形态.在程序中的引用变量所指向的具体类型和通过该变量来调用的
方法其实都是不确定的,而是在程序运行的时候才能确定该引用变量的
具体类型和调用的方法是哪个了.多态可以让程序有多个选择运行状态.






靠的是父类和接口类所指向的子类和实现类,而程序调用的是引用所指向
的具体事例,就是在内存中正在运行的那个对象的方法,而不是引用变量
的类型中定义的方法.


abstract class 和interface的区别
1.abstract class 中可以有构造方法,interface中不能有
2.abstract class 中可以有普通变量,interface中没有普通成员变量
3.abstract class 中可以有非abstract的方法,interface中都是abstract方法,不能有非abstract方法
4.abstract class 的子类可以不全部实现abstract里面的所有成员,interface的实现类必须全部实现interface中的所有方法
5.abstract class 中可以有static方法,并且其访问修饰符可以是任意的,而interface中不可用有static方法
6.abstract class 和 interface 中都可以有static成员变量,其访问修饰符是任意的,但是interface中只能是public static 默认为public static
7.abstract class 中的abstract方法可以使public,protected,friendly的,而interface中只能是public的
8.一个类只能继承一个抽象类,实现多个接口
9.interface是在系统架构设计方法发挥作用,而abstract是在代码实现方面发挥作用的.


abstract的method不可用同时是static的,abstract的方法是要被子类实现的,static于子类完全扯不上关系
native方法表示该方法是要用另一种依赖平台的编程语言实现的,不存在子类实现的问题,
abstract和synchronized混用,没见过.






2012-3-7:
application是单例吗?
application是JSP内置对象,该对象用于存储和访问任何页面的信息,与session类似.
但是application是所有的用户共用一个application,而session是与用户一一对应的.
application对象握有所有的信息(比如数据库信息),所以你可以在任意的页面访问这些
信息,也可以在任意的地点更改这些信息.
单例类的特点:
1.单例类只有一个实例类
2.单例类必须创建一个自己唯一的实例类
3.单例类必须能够给其他对象提供这个类




servlet是单例吗?
servlet不是单例类,它只是一个普通的类,它有自己的构造函数,你甚至可以通过new的方法
来new出N个servlet实例.但它能正常的处理web请求,就需要交给web服务器,比如tomact,tomact
通过配置文件映射信息,在第一次创建servlet实例的时候,就将这个实例放入了缓存中,下一次
请求的时候,取得还是这个实例,所以它的状态就是被保存起来了,如果你共享的数据不是线程安
全的,就会出问题,所以在不要用成员变量保存它的状态


spring是单例吗?
spring的bean默认是单例的,但是也可以改为非单例的.






2012-3-8:
内部类:
内部类就是在一个类的内部定义的类:
1.内部类中不能定义静态成员
2.内部类可以访问外部类中的成员
3.内部类可以定义在外部类的方法体外面,也可以定义在外部类的方法体中.
4.定义在方法体中的内部类访问类型可以使public,private,friendly,protected的.
5.穿件内部类的实例对象时,一定要先创建外部类的实例对象,然后通过外部类的实例对象去
创建内部类的实例对象.
6.定义在方法体中的内部类不能有访问修饰符,还可以创建一个匿名内部类
7.内部类访问局部成员,局部成员必须要定义成final


静态内部类和普通类的区别:
1.静态内部类有static修饰,普通类没有.
2.静态类于普通类在运行和行为功能是哪个没有什么区别,
只是在编程引用时的语法上有一些差别,静态内部类可以定义成private,public,friendly和
protected等多种类型,而普通类只能定义成public和默认类型的.
3.在外面引用静态内部类的名称为:外部类名.内部类名.她不依赖于外部类的实例对象.
所以,静态内部类能访问外部类的非静态成员变量,也可以直接使用外部类的static成员变量.




内部类可以引用其他包含类的成员吗?有什么限制?
完全可以.只要不是静态内部类.没有什么限制.




基本数据包括:
byte,char,short,int,double,long,boolean,float




Anonymous Inner class 可以继承其他类,也可以实现接口




不可用继承String类.因为String类被定义成了final类.




String s=new String("xyz") 创建了两个String Object
一个放在常量区,不管写多少遍,都是同一个,new String 每写一遍,就创建一个新的.


String和StringBuffer是java提供的用于存储的操作字符串的两个类,
String类是被定义成了final类的所以这个类一旦创建了,那么它储存的字符串就不会被改变了,
而StringBuffer提供对字符串的修改操作.
String类有equals方法,而StringBuffer没有equals方法.




String有length()这个方法,数组有length这个属性.




2012-3-9:
final,finally,finalize的区别:
final是不可变类,final定义的属性不能改变,final定义的类不可被继承,final定义的方法不可被重写.
finally是异常处理语句结构的一部分,表示无论如何都会执行的.
finalize是Object的一个类,在垃圾收集器执行的时候调用回收对象的此方法,可以覆盖此方法提供其他
垃圾收集其他资源回收,比如文件关闭.JVM不能保证此方法总被调用.






运行时异常与一般异常有何不同?
运行时异常指的是java程序在运行时的一种非正常状态,表示虚拟机的通常操作可以遇见的问题.
java编译器必须要求方法声明可能发生非运行时异常,但是并不要求必须声明未被捕获的运行时异常.




error和exception的区别:
error表示一种恢复不是不可能但是很难的一种严重情况,比如内存溢出,这是不可能让程序员去解决了.
exception是一种设计或实现问题,如果程序运行正常,是永远都不会出现的


java中的异常处理机制的简单原理和应用:
当java程序违反了java语义规则时,java虚拟机就将发生的错误表示为一个异常.
1.java类库的内置语义检查
2.程序员扩展这种语义,定义自己的异常,自由的选择异常






java语言如何进行异常处理的?关键字哪些?分别代表什么含义?在try块中可以抛出异常吗?
java是通过面向对象的方法进行异常处理,把不同的异常进行分类,并提供了良好的接口.
try:表示将有可能发生异常的
catch:捕获异常
finall:总是要执行
throw:抛出异常
throws:声明异常.
可以在try中抛出异常,在try中再定义一个try就可以了.




java中有几种方法可以实现一个线程?用声明关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
1.继承Thread
2.实现Runnable接口
使用synchronized修饰同步方法.
stop()不安全,因为stop()会解除线程获取的所有锁定.如果对象处于一种不连贯的状态下,其他的线程在此时
检查和修改它们.结果会很难检查出来.suspend()容易造成死锁,调用suspend()的目标线程会停下来,但是它
仍然持有之前线程的锁定,那么其他线程就都不能访问已经锁定了的对象.在线程中,如果想恢复一个线程,又想
试图访问一个锁定了的对象,就会造成死锁.所以不应该使用suspend().如果想回复一个线程,就应该在线程中
植入一个标志,标志线程是应该挂起还是活动.如果是挂起,就使用wait()名气进入等待线程,如果是活动,就应
该使用notify()恢复线程.




2012-3-11:
ArrayList和Vector的区别:
ArrayList和Vector都是List的实现,都是有序集合,即在集合中的数据都是有顺序的,相当于一种动态数组
可以按照索引去除某个元素,并且元素可以重复.这是HashSet与之最大的不同之处,HashSet的元素存储是没
有顺序的,并且不可用重复ArrayList是非线程安全的,即在只有一个线程访问集合的时候使用ArrayList,
不考虑线程安全.而Vector是线程安全性的,即在多个线程访问集合的时候使用,Vector效率较ArrayList低.
ArrayList和Vector都有一个初始的容量值,当所在的元素超过了集合的容量大小,集合会自动增长多个存储
单元,Vector是增长为原来的两倍,ArrayList在文档上面没有说明,但做的实验,得知它增长为原来的1.5倍.
arraylist和Vector都可以设置初始的容量大小,Vector还可以设置增长的容量值,而ArrayList没有这个方法.
1>同步性.
2>数据增长.


HashMap和HashTable的区别:
HashMap和HashTable都是Map接口的实现,HashMap是HashTable的轻量级实现.
1.HashMap是非线程安全的,所以在只有一个线程访问集合的时候使用,效率高,因为我们不必考虑线程安全
HashTable是线程安全的,当多个线程访问集合的时候使用,效率较HashMap低
2.HashMap是java1.2中Map的实现,而HashTable是继承陈旧的Directory类.
3.HashMap允许null值作为一个entry的key/value,而HashTable不允许null值为key
4.HashMap去掉了原来的contains方法,而是改用了contiansValue和contiansKey,因为contains方法容易让
人误会.
5.HashMap和HashTable的算法都大概一样,所以在性能上不会有很大的差异.




List和Map的区别:
1.List是用来存储单项的数据,Map是通过Key和value存储数据的.
2.List可以有重复值,并且存储的额数据都是有顺序的,而Map的存储的数据是没有顺序的,key不可用重复,
value可以重复.




List,Set,Map是否继承自Collection接口?
List,Set是.Map不是的.






List,Map,Set三个接口,存储元素的时候,各有什么特点?
List存储的元素都是有顺序的,并且可以重复的.
Map是通过Key和Value来存储数据的,存储数据的时候,key不能重复,value可以重复,并且是没有顺序的.
Set存储的数据也是没有顺序的,内部排序.






Collection和Collections的区别:
Collection是集合类的上级接口.
Collections是为集合类提供帮助的类,它提供一系列的静态方法实现对各种集合的排序,搜索,线程安全
化操作等.




Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?equals还是==呢?它们都什么区别?
通过equals来区分Set里的元素是否重复了.
==方法决定引用值是否指向同一个对象.equals()在类中被覆盖,为的是当两个分离对象的内容和类型是否
匹配,如果匹配就返回真.






两个对象值相同,但却可以有不同的hash Code,这句话对不对?
对.
如果是用HashTable/HashMap存储的话,如果equals相等,那么,HashCode值必须相等.
但是如果不是用HashTable/HashMap存储的话,则于HashCode没有什么关系了阿,这个时候Hashcode不等是
可以的.




说出ArrayList,Vector与LinkedList的存储性能和特性?
ArrayList和Vector是通过数组的方式来进行数据的存储的,次数组的元素大于实际的数组容量的时候,就要
增加数组的容量一边插入数据和增加数据,它可以直接索引数据,但是元素插入就要涉及到数组移动等内存操
作,这样会降低效率,所以它们是索引块插入慢.LinkedList是双项链表实现存储,按序号所以数据需要进行向
前或向后遍历,但是插入数据的时候只需要记录本项的前后即可,所以插入较快.
LinkedList也是线程安全的,Linked提供了一些方法,使得LinkedList可以被用作堆栈和队列来使用.






2012-3-12:
java中有几种类型的流?JDK为每种类型的流提供了抽象类以供继承,请说出他们分别是哪些类?
字节流:以byte为基本单位的类,
FileInputStream,FileOutputStream
字符流:以reader和writer为基本派生的类.用于处理unicode字符数据
InputStreamReader,OutputStreamWrite




什么是序列化?如何实现java序列化?
将一个对象以字节流的形式传出或者讲一个字节流恢复成一个对象.需要实现序列化的对象继承
serializeble接口,就可以实现序列化了,该接口是一个mini类,没有什么方法需要实现.


描述一下JVM加载class文件的原理机制?
JVM靠的是ClassLoader以及它的子类加载类对象,ClassLoader是java一个非常重要的运行时系统组件.
使用ClassLoader加载和查找类对象.


heap和stack有什么区别?
java中,内存分为两种,一种是堆内存,一种是栈内存.
当程序调用一个方法时,系统内存会自动分配一个独立的空间存储方法中的局部变量,当这个方法调用结束的时候,
系统分配的这块空间会随之释放掉,栈中的变量也会释放掉.
堆内存是存储不存储在栈内存中的变量,使用new创建的对象都是存储在堆内存中的,它是不会随着方法的调用结束
而消失的.方法中局部变量使用了final修饰的话,就会存储在堆中,不会存储在栈中.




GC是什么?为什么要有GC?
GC,Gabage Collection,垃圾回收,在程序中,程序员错误或者忘记处理内存回收可能导致程序不稳定甚至系统崩溃.
java中提供的GC可以自动检测对象是否超出作用域从而自动回收对象的作用.java没有提供已经释放内存的显示操作.




垃圾回收的优点和原理,并考虑2中回收机制.
java语言中有个显著的特点就是垃圾回收机制.垃圾回收机制使得C++程序员最头痛的内存问题迎刃而解,使得我们程
序员在写程序的时候不再考虑内存问题.由于有个垃圾回收机制,使得不再有java对象的作用域的概念,而是对象的引用
才有作用域.垃圾回收能够有效地的使用可以使用的内存,有效的防止内存泄露等问题.垃圾回收器是作为一个单独的低
级的线程运行的,在不可预知的情况下对内存中已经死亡或者长时间没有使用的对象惊醒清除或者回收.我们并不能实时
调用垃圾回收器来对一个对象或者所有对象进行垃圾回收.垃圾回收包括分代复制垃圾回收,增量回收,垃圾标志回收.




垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机经行垃圾回收?
对于GC 来说,当一个对象在创建的时候,GC就开始对这个对象的地址,大小以及使用情况经行了监测.通常GC采用有向图的
方式记录和管理堆中的所有对象.通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的".当GC确定一些对象是"
不可达"时,GC就有责任回收这些有内存的控件.可以,程序员可以手动执行system.gc(),通知GC运行,但是java语言规范并不
保证GC一定会执行.






74-84代码题,延后
45-52线程,延后


85-88代码,延后




2012-3-13:
89-99:
servlet是什么?
servlet是服务应用小程序,应用在B/S架构模式下,响应客户端的请求.平台独立,以线程的方式运行,性能良好.
servlet API 为servlet提供了统一的编程接口.servlet一般在容器中运行.


servlet的生命周期:
servlet在服务器内中至始至终只有一个对象,web服务器加载servlet,生命周期开始.第一次请求的时候,通过
调用init()方法完成初始化,此方法只执行一次.每个请求都要通过调用service()方法实现,根据不同的请求调用
doPost()或者是doGet()方法,以多线程的方式运行着,在servlet中不要设计成员变量.通过调用onDestory方法来
结束servlet.




forward()与redirect()的区别:
forward是将控制权反转,在地址栏中不会显示url,
redirect是实现完全的跳转,在地址栏中会显示后者的url
前者比后者效率更高,尽量使用forward().如果需要跳转到另一个服务器上那个的资源,则必须使用sendRedirect().




什么情况下使用doPost()/doGet();
form表当中,method的值为post时,调用doPost(),值为get时,调用doGet();


request对象的主要方法:
getParameter(name);获取客户端传送给服务端的name指定的值
getParameterValues(name);获取所有names的参数值
getAttribute(name);获取由name指定的属性值
setAttribute(name,Object);设置name的request的参数值




forward和redirect的区别:
forward是服务器请求资源,服务器直接访问目标地址的URL,


request.getAttribute()和request.getParameter()有什么区别?
request.getAttribute(name);是获取自己设置的值
request.getparameter(name);是获取网页的值.




jsp有哪些内置对象?作用分别是什么?分别有什么方法?
request:表示一个httpServletRequest对象,包含页面的请求信息.提供一些用于获取请求信息的方法.
session:表示一个HttpSession对象,用于贮存用户的状态.
application:表示一个java.servlet.ServletContext对象.这有助于查找servlet引擎和servlet环境的信息.
response:表示一个httpServletResponse对象.提供用于设置浏览器响应客户端的方法.
out:表示一个java.jsp.JspWriter对象.用于向客户端输入出响应信息.
config:表示一个java.servlet.ServletConfig.用于贮存一个servlet的初始化的参数信息.
page:表示产生一个servlet实例对象.
pageContext:表示一个java.servlet.jsp.PageContext对象.对网页的属性经行管理.
exception:针对错误网页,未捕获的例外.


jsp有哪些动作?作用分别是什么?
jsp:include:页面请求时引入的一个文件
jsp:useBean:寻找或者实例化一个javaBean
jsp:setProperty:设置javabean的属性
jsp:getProperty:获得javabean
jsp:forward:请求到另一个页面
jsp:plugin:根据浏览器的类型为java插件生成Oject或embed类型




2012-3-14:100-111
JSP的常用指令:
isErrorPage:是否能使用Exception对象
isELIgnored:是否忽略表达式


JSP中动态INCLUDE和静态INCLUDE有什么区别?
<jsp:include>,总是会检查文件内部的变化,并且会检查更新返回给使用文件的对象,适合用于包含动态页面.
<%@include file="xx.jsp"%>静态include用include伪码实现.不会检查文件内部的变化,不会更新,适合于静态页面的包含.


两种跳转的方式分别是什么?有什么区别?
<jsp:include>:不会跳转到文件中,只是显示该页的结果,主页面还是原来的页面.执行完后还会回来.
<jsp:forward>:跳转到新的页面,不会再回来.相当于go to语句.




页面间对象传递的方法:
session,request,cookies,application


JSP和Servlet有哪些相同点和不同点?他们之间的联系是什么?
JSP是servlet技术上的发展,本质上是servlet的简易方式,JSP侧重应用外表的表达.servlet编译后生成一个'类servlet'文件.
servlet和JSP最大的不同在于,servlet是存在于java文件中,并且可以完全从表示层中与html分离开来,JSP是由java和html可以
组合成一个扩展名为'.jsp'的文件.JSP侧重视图,servlet侧重控制逻辑.


MVC的各个部分有哪些技术来实现?如何实现?
M-Model :Model代表的是应用的业务逻辑,主要由JavaBear,EJB组件实现)
V-View : View表示的应用面(JSP页面产生)
C-Controller :提供应用的处理过程终止,一般是一个servlet.通过这种设计模型把应用逻辑,页面,控制逻辑分分成不同的组件
实现.这些组件是可以通信的和重用的.




数据库的三范式是什么?
1NF:如果一个表中没有一个重复值,即行与列的交叉得到的是一个值而不是一组值,则该表属于1NF,简言之:每个字段只有一个值
2NF:在1NF的条件下,任何属性都依赖关键字.简言之:每一行都能作为唯一标识,将1NF转为2NF的方法就是添加主键
3NF:如果一个表满足了2NF,并且不包含任何依赖性,属于3NF.简言之:没有一个非关键字不依赖于另一个关键字.


说出一些数据库优化方面的经验.
通过优化查询语句来提高查询性能


union和union all 有什么不同?
union将2个select语句的数据加在一起,可以去掉重复,
union all不可用去掉重复






2012-3-15:
114-124:
什么是存储过程?
存储过程是一组预编译的sql语句,它包含数据操纵语言,变量,逻辑控制语言.通过使用execute来调用存储过程.
存储过程的优点:
1.提高执行效率
存储过程是在第一次创建的时候就编译好了,之后使用存储过程就不会再编译了.可以直接使用了,而一般的sql
每次都要执行,所以存储过程能够提供啊执行效率.
2.重用性.
存储过程是可以重复使用的,减少程序员的代码量
3.安全性.
存储过程可以指定访问的用户.
4.封装性
存储过程可以实现复杂的业务规则,比如业务规则中需要使用到insert,update,delete,select.存储过程能够将
这些语句封装在一起与数据库的事物一起使用.


存储过程的种类:
1.系统存储过程,以sy_开头的.用来进行系统的各项设定
2.扩展存储过程,以xp_开头.用来调用操作系统提供的功能
3.用户自定义存储过程.


存储过程的编写:
create procedure 过程名
@param1 number=0 output
@param2 varchar2(50)
as 
  insert,update,select,delete语句
go


注册jdbc驱动程序的三种方式:
1.Class.forname("驱动代码");
2.Driver d=new Oracle.jdbc.driver.OracleDriver;
DriverNamager.register(d);
3.程序里面没有指定


用JDBC如何调用存储过程
{call 过程名} 无参无返回
{call 过程名[(?,?,?)]}  有参无返回
{?=call 过程名[(?,?,?)]} 有参有返回




JDBC中的PreparedStatemnet相比Statement的好处.
Statement是逐条发送sql语句,可以多次执行.preparedStatement是先储存sql语句再一起发送.
在sql需要设置中,使用prepratedStatement效率高些,但是只能发送一条sql语句.


写一个用jdbc连接并访问oracle数据的程序代码.
1.加载驱动   Class.forname("oracle.jdbc.driver.OracleDriver");
2.获得连接   String url="jdbc:oracle:@localhost:1521:orcl";
    Connection conn=DriverManager.getConnection(url,"userName","pwd");
3.创建statement对象
    PreparedStatement pstm=conn.CreatePreparedStatement();
4.执行sql语句
    String sql="sql语句";
    ResultSet sr=pstm.executeQuery(sql);
5.处理结果集
    while(rs.next){
System.out.println(rs.getInt(1)+","+rs.getString(2));
    }
6.释放资源   if(rs!=null)rs.close();
    if(pstem!=null)rs.close();
    if(pstem!=null)rs.close();






Class.forname的作用?为什么要用?
Class.forname用来返回一个字符串指定的类的对象.




大量数据下的分页:
1.db--sql  子查询和rownum
2.jdbc---可滚动的结果集


数据连接池的工作机制是什么?
J2EE服务启动时会简历一定数量的池连接,并一直维持不少于此数目的连接,当客户端需要连接时,就为客户端提供一个
没有被使用的池连接,然后将其标记为忙.如果所有的池连接都在使用中,客户端还需要池连接,池驱动程序就会创建一定
数目的池连接,当池连接不再使用的时候,池驱动程序会将该池连接标记为闲,以供下次提供.




为什么要用orm?和jdbc有什么不一样?
a.繁琐的代码问题
jdbc的API编程需要大量的代码,并且代码繁琐,容易出错.
orm则成立了数据库与java对象的映射关系,程序员不再需要编写复杂的sql语句,而是可以直接操作java对象.
代码量大大降低.使得程序员更加关注的是业务逻辑的实现.
b.数据库毗邻问题
数据库对象之间,存在各类的关系,jdbc的程序员必须小心翼翼处理这些关系.
orm提供了java对象与数据库的映射关系.


c.系统架构问题
JDBC属于数据访问层.jdbc在访问数据库编写的代码中,尤其是对象,需要一一的对应,使得程序员需要知道数据库中有哪些信息,哪些表.
表中有什么字段,每个字段的类型是什么,大大加大了程序员的工作量.使得程序员身兼DBA.
orm使得数据库层完全隐藏,呈现给程序员的只有java对象.程序员只要根据业务逻辑使用java对象中的字段的getter和setter方法.


d.性能问题
orm可以减少不必要的数据库请求操作.




2012-3-16:
125-135:




xml有哪些解析技术?区别是什么?
有DOM,SAX,STAX:
DOM处理大型文件时其性能下降特别厉害,由于DOM的树形结构使得DOM在解析文件时,需要将整个文件装入内存,这样就使得内存占用十分大.
适合于xml的随机访问.
SAX其性能比DOM高的多,SAX是事件驱动型XML解析方式,SAX是顺序读取文件,当碰到文档开始或者元素开始标签时,就会触发一个事件,用户
通过在其回调事件中写入代码来处理xml文件,适合对xml的顺序访问.
STAX:Streaming API for XML


你在项目中用到了xml技术的哪些方面?如何实现的?
用到了数据存储和信息配置两个方面,在做数据交换平台时,将不是数据源的数据组装成xml文件,然后通过打包加密xml文件通过网络发送给
接收者,接收者解压解密xml文件并还原同xml文件中的信息.在做软件配置时,我们可以很方便的使用xml,将需要软件相关的参数信息存贮在
xml文件中.




xml文件定义有几种形式?它们之间有何本质区别?解析xml文档有几种方式/
有两种形式:.dtd 和 .schema 
本质区别:schema本身是xml的.可以被xml解析器解析(这也是从DTD上发展schema的目的).dtd则不能
有DOM,SAX,STAX三种方式来存贮xml文档.
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:160290次
    • 积分:2470
    • 等级:
    • 排名:第14938名
    • 原创:61篇
    • 转载:156篇
    • 译文:0篇
    • 评论:22条
    最新评论