博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

java 5.0

Posted on 2009-03-02 10:15  kalllx  阅读(264)  评论(0)    收藏  举报

java 5.0

1.java5.0:Tiger
2.java6.0:Mustang 野马
3.特性:
4.1) 范型:参数化类型
 List<Student> list=new ArrayList<Student>();
 list.add(Student);
  2)自动装箱,自动拆箱 Integer i=5; int j=i;
  3)for循环加强
  4)类型安全的枚举类型
  class ,interface ,enum(枚举)
 5)可变参数
 sum(int... i);调用时可随意传参数
 6)静态导入
 import static java.lang.System.*;
 7)元数据, Annotation:标注

一.自动装箱,自动拆箱
 1)自动装箱:将基本数据类型转换成包装类型
 2)自动拆箱:将包装类型转换成基本数据类型
注:装箱和拆箱的过程由java虚拟机自动完成

Integer-->int  intValue(Integer)
int----->Integer  Integer.Valueof(int);
String---->int Integer.parseInt(String)
String---->Integer Integer.getInteger(String);

&&与&?
 1)&&所逻辑运算符 &是位运算符
 2)&&也可以进行位运算,具有短路功能


二.for循环加强
jdk5.0前 遍历集合
for(定义循环变量;循环条件;改变循环变量值){
....
}
jdk5.0 遍历集合
for(定义集合中所存数据类型的变量:要遍历的集合){
....
}
三.类型安全的枚举类型
jdk5.0前 定义类型只能使用class ,interface;
要定义一个类型,其取值限定在某一个范围内,实现起来比较繁琐
jdk5.0中最增加了一种新的定义类型的方法:enum
enum使用语法:
enum 枚举类型{
 枚举值1,枚举值2,....,枚举值n
}
 注:
  a)所有enum类型默认继承自java.lang.Enum;
  b)enum类型的取值默认为public static final
  c)enum类型不能有子类(不能被覆盖,不能被继承)
  d)enum类型中可以出现属性,也可以出现方法
  e)enum类型构造器只能是私有的
  f)enum类型的取值,都是其实例对象,要调用枚举类型中的构造器,要实现枚举类型中的抽象方法
四.可变参数
 a)可变参数只能使用在构造器或方法的参数中
 b)可变参数在同一参数列表只能出现一次
 c)可以给可变参数指定0个或多个实参
StringBuffer线程安全
StringBuider

ArrayList
Vector:线程安全  编程线程非安全的用Collections.synchronizedList(List)方法

1.所有的属性取决于编译时类型
2.所有的静态方法取决于编译时类型
3.所有非静态方法取决于运行时类型

作业:
String str1="ACE of HEARTS";
牌型:13 enum
花色:4 enum
要组成52张牌,把牌放到集合中
4个人来玩牌,每个人拿10张
注意: 1.如何打乱集合中牌的顺序(shuffle)  Collections
 2.如何去掉集合中别人已经取过的牌 List  subList();
五.静态导入
 并没有增加大的功能特性,只是允许我们将类.接口中的静态的属性.方法导入到程序中,来简化我们的编程
权限类名=包名+类名
语法:import static ......

 1)import导入的是包中的类和接口
 2)import static 导入的是类.接口中的静态属性和方法
六.格式化输出
 System.out.printf(format,args...);
 format 格式:
 %[flag][width][.percision]type
 type:必须有如:%d,%f
在jdk5中提供了一个工具类java.util.Scanner,帮助我们接收从键盘输入的字符,然后可在控制台输出.简化编程
第三章.范型
 即参数化类型,使用范型可以保证代码是类型安全的,可增加程序的可读性.
 例:List<Student> list=new ArrayList<Student>();
  list.add(Object);
 语法:类名.接口明<类型参数>//类型参数可以是一个也可以是多个
  Map<Integer,String>
 b)子类型
  1)引用类型和对象类型间可以有继承关系,但引用类型中的类型参数和对象类型中的参数间不能有继承关系 如:定义List<Object> list=new ArrayList<Student>();是错的!
 List<Student> list=new ArrayList<Student>();
  2)放到集合中的元素的类型为范型中参数类型本身或其子类型
  3)通配符<?>
  当放入几集合中的类型不确定时可用通配符<?>,标记集合中可以存放Object类型及其子类.
  4)限制通配符<? extends typename> 表示放入集合中的元素为extends后所指定类型的本身或子类.
  5)定义范型类步骤:
   1)声明一个类或接口,在类名或接口名后使用自定义的类型参数<自定义的类型参数>
   2)在范型类或接口中定义类型参数,一般类型参数都用一个大写的字母表示,如:E
   3)定义好一个类型参数后,该类型参数在整个类型或接口中都可使用.
   4)类型参数的具体类型,由调用者在调用的时候给出

 6.裸类型
  在类名或接口名后没有使用范型的,我们称之裸类型,使用裸类型是类型不安全的,在运行时可能抛出ClassCastException异常
 7.类型擦除:在编译阶段将所以范型信息擦除掉
  范型只在编译阶段起作用,在编译阶段,编译器根据范型中类型参数来进行类型检查,判断放入集合中的元素是否满足范型中的类型限制.     java源文件编译后的class文件中,所有和范型有关的信息全部被剔除掉了.

1.在运行java程序时,从控制台向java 程序内部传递参数有几种方式;
答:有两种 1)虚拟机参数  java -Dname=briup -Dage=10 Test

用到:java.util.properties  properties ps=System.getProperties();
     String name=ps.getProperty("name");
     String age=ps.getProperty("age");
    System.out.println(name);
    System.out.println(age);
  2)应用程序参数  如.java test a b


第四章:Annotation(标注.注释)
 1.对java注释功能所增强,可以用来对类.方法.属性等进行注释;
 2.使用Annotation可以改变我们的编程方式,很多时候我们只需要进行声明式编程,具体代码由相应的工具自动帮我们生成,来简化我们的编程.
 3.sun公司定义的几个标准的Annotation:
  1)@Deprecateed:用来标识类.属性.方法等已经过时,不建议以后再使用
  2)@Override:用来标识是一个重写的方法,编译器会检查父类中有没有此方法,并判断是否满足重写要求.
  3)@SuppressWarnings("unchecked"):用来去除掉可能出现的警告信息
Exception:
 checked Exception:
 unchecked Exception:
interface A(){
 public void say() throws exception1;
}
interface B(){
 public void say() throws exception2;
}
class C implements A,B{

}
 a)如果e1(父类)和e2(子类)有继承关系,抛出e2的异常或者不抛异常 
 b)如果e1,e2没关系,不抛异常 

 4,定义Annotation
 语法:public @interface annotationName{...}
  1)Annotation本身是特殊的接口
        2)Annotation内可以定义多个方法
  3)Annotation内定义的方法不能有参数
  4)Annotation内定义的方法不能抛出异常
  5)Annotation的返回数据类型只能是基本数据类型、String、Class、enum类型、Annotation类型或以上类型的数组
  6)Annotation的方法可以指定默认值
 5.使用定义Annotation
  1)定义Annotation和public static,final类似,可以起到对类、属性、方法等进行修饰、限定的 作用。
  2)使用语法:
   @annotationName(
    methodName=value,
     ...
    methodName=value,
   )
 6. Annotation的父类
 1)Marker Annotation:标记Annotation
  没有指定任何元素(方法),只起到标识的作用
 语法: public @interface annotationName{}
 使用:@annotationName 如:@Deprecated(标注该方法已经过时) @Override
 2)Single Value Annotation:单值Annotation
 只能有一个有一个元素(方法)
 语法: public @interface annotationName{
  返回类型 methodName();
 }
 使用:@interface annotationName(value)
 默认方法名一般为value:此时在使用时可以省略value=,直接进行赋值
 如:@SuppressWarnings("unchecked")
 3)Normal Annotation:普通Annotation
 可以有多个元素
 语法:public @interface annotationName{}{
  返回类型 methodName();
  .....;
  返回类型 methodName();
 }
 使用:
 @interface annotationName(
  methodName=value,
  ...
  methodName=value
 )
 7.元标注:用来限制其他Annotation的Annotation
  1)@Retention:限制Annotation的保持力,即Annotation的有效时长
 @Retention的取值:在java.lang.annotation.RetentionPolicy
  a)SOURCE:标识Annotation只在java源文件中有效,在编译阶段无效
  b)CLASS:表示Annotation在编译阶段仍然有效,而在运行阶段无效,是@retention的默认值  c)RUNTIME:表示Annotation在运行阶段仍然有效
  2)@Target:用来限制Annotation的作用对象,即Annotation可以修饰的对象
   java.lang.annotation.Target
  @Target取值:
   java.lang.annotation.ElementType Target
   1)TYPE:表示Annotation可以用来修饰Class,interface,enum
   2)FIELD:表示Annotation可以用来描述属性
   3)METHOD:表示Annotation可以用来修饰方法
   ......
 isAnnotationPresent(Class<? extends Annotation> annotationClass)
练习:1)定义一个Annotation,设置一下@Retention和@Taget
 2)定义一个有多个方法的类,对类中的部分方法用Annotation进行标识
 3)定义一个类,完成统计所有加Annotation标注和不加Annotation标注方法个数功能,并用反射调用一下所有加标注的方法

面试:
1。什么是浅克隆(浅拷贝)?什么是深度克隆(深拷贝)?
clone执行的是浅拷贝,
深度克隆  :是相对多维数组来说的,clone用来拷贝二维数组时,只实现浅拷贝,要自己手动实现深度克隆(即对第二维的数组再克隆)。
2。如何计算某一年是否是闰年,给出代码实现?[(可以被4整除&&不能被100整除)||(被400整除)]
(四年一润,百年不润,四百年润)


XML:(eXtensive Markup Language)可扩展标记语言,是一种元语言,可以用来定义其他语言的语言
内容:
一,
 1.xml的基本语法---良构的xml
二,
 ----有效的XML
 2.DTD(Document Type Definition)
 3.XML Schema W3c推荐使用这个
 4.XML Namespace
三.XML解析
 5.SAX
 6.DOM
第一章
SGML:标准的通用标记语言 XML是他的子集
XML作用:
 1)存储具有一定结构的数据
 2)在应用系统中用其作为配置文件
XML常用术语:
 1)元素:开始标签.结束标签.连同其内容
 2)开始标签: <开始>
 3)结束标签:</开始>
 4)子元素:有外层标签
 5)根元素:XML文档中最上层的元素

XML语法规则:
 1)可有可无的文档声明 <?xml version="1.0" encoding="UTF-8" ?>
 当XML文档中出现了非UTF-8字符时,我们必须要给出声明,并通过encoding属性指定具体的编码格式
 encoding默认为UTF-8
 2)在一个XML文件中,根元素有且只能有一个
 PCDATA:Parsed Character DATA
 3)元素规则:
  1)开始标签和结束标签要成对出现
  2)元素中可以包含多个属性,而且属性只能出现在开始标签中
  3)元素中没有任何内容,可以使用缩写
  如:<briup></briup>==<briup/>
  4)元素的嵌套规则:元素的标签不能交叉嵌套
  在XML元素内部可以出现哪些内容:
   1)空
   注:空格.制表符.回车都不是空
   2)字符数据(PCDATA) <briup>USA</briup>
   3)子元素
   <briup>
    <name>XML</name>
   </briup>
   4)混合内容(子元素.字符数据)
   <briup>
    IBM
    <name>XML</name>
   </briup>   
   注:写XML文件时,尽量使用缩进,以增加程序的可读性
  5)命名规则:
  java中命名规则: 1)以字母._ .$开始
     2)可以跟字母.数字.._. $
     3)大小写敏感
     4)没有长度限制
     5)不能使用关键字(java中的)
  XML中的命名规则:1)以字母._开始
     2)可以跟字母.数字."_"."-"."." ;
     3)大小写敏感
     4)没有长度限制
     5)不能使用关键字(XML中的)
  6)属性规则:
   1)必须以健值对的形式出现
   2)元素开始标签中可以出现多个属性,但同一标签中属性不能重名
   3)属性必须要有值,一定要给赋值
   4)属性值必须用引号引起来,单双都可以;
   
注:
 1)定义的名称尽量表达出其含义
 2)如果名字由多个单词组成,可以使用驼峰表示法,或用_把多个单词分开
XML中的注释 <!--   注释内容 -->
XML中的处理指令: <? .... ?> 如<? XML version="1.0" encoding="UTF-8" standalone="yes" ?>
 version:用来指定XML的版本,一般为1.0
 encoding:用来指定XML的编码格式
 standalone:用来指定XML文件是否是独立的 
 yes:表示XML文件是独立的,不依赖于其他文件
 no:表示XML文件不是独立的,要依赖于其他文件 DTD,XML Schema
XML的国际化(i18n)支持:
 通过文档声明中的encoding来指定具体的编码, 通常中文编码:GBK,GB2312
XML中字符内容:
 1)PCDATA
 entity:实体=&entityName; &lt; 表示<  
 2)CDATA
 有效的XML和良构的XML:
  良构的XML:满足XML的语法规则的XML
  有效的XML:满足XML语法规则,并满足DTD或XML Schema所限制的XML
 良构的XML不一定是有效的,但有效的XML一定是良构的
HTML于XML的比较:
 不同:
 1)HTML中的标签都是W3C组织预定义的,而XML中的标签我们是可以根据需求自行定义    
 2)HTML关注的是数据的显示,XML关注的是数据存储的结构,数据的语义
 3)HTML对语法检查不严格,而XML对语法检查较为严格
 类似:
 1)都是标记语言 2)都是SGML的子集  3)都是W3C组织推荐的标准
XSL:可扩展样式表语言  --->XML
 1)将XML进行转换  ---使用XSLT进行转换

 2)将转换后内容进行格式化输出  ---使用FO(Formatting Object)
CSS:层叠样式表 --->HTML
XML:解析器
 SAX:基于事件
 DOM:基于驻留内存的树型结构
第二章:
1:DTD,文档类型定义,用来对XML中的内容进行限制(如:元素名.元素出现顺序,元素出现的频率等)

声明元素
语法:
<!ELEMENT elementName (contentModle)>

四种内容模式:
 1)EMPTY:元素内必须为空
  语法: <!ELEMENT elementName EMPTY>
 2)ANY:在元素内可以出现任何内容
  语法:<!ELEMENT elementName ANY>
 3)ELEMENT:表示在元素内只能出现子元素
  语法: <!ELEMENT elementName (.....)>
   ,表示元素按照先后顺序出现
   |表示从多个元素中选则一个
   无符号 表示元素必须要出现,且只出现一次
   +号表示元素可以出现一次或多次
   *号表示 元素可出现0次或多次
   ?号表示元素只能出现0次或一次
 4)MIXED:表示在元素内可以出现字符内容.子元素
  语法:<!ELEMENT elementName (#PCDATA|subEle1|subEle2|...|subElen)*>
 如:
 <briup>
  nuih
  <a></a>
  <b></b>
 </briup>
作业:
 创建cd.xml存放CD的信息(可从cd.doc中获取),写DTD对xml文件的内容进行限制,要求根元素<cds>下可以出现多个<cd>子元素,<cd>的子元素按照给定顺序出现,<company>可以出现一次或多次,<year>可以出现零次或一次,code属性必须出现


声明属性:
 语法: <!ATTLIST elementName attName attType attDefult>
声明多个属性时: <!ATTLIST elementName attName attType attDefult
  ...
  attName attType attDefult
  >
attType 取值:
 CDATA:表示属性取值为可解析的字符内容
 ID:表示属性值唯一,取值还有满足XML中的命名规则
 enumarated:表示属性的取值在某一个范围内
attDefult 取值:
 #REQUIRED:表示属性必须要出现
 #IMPLIED:表示属性可以出现可以不出现
 value :表示实现可以出现,可以不出现,不出现使用默认值,出现使用指定值
 #FIXED :表示属性值可以出现可以不出现,但如果出现,属性值必须是一个固定值

实体: 语法:<!ENTITY entityName entityValue>
使用实体:&entityName; 

如何建立dtd和XML的对应关系:
 1)把XML信息和DTD信息写字同一文件下 <!DOCTYPE rootElement [...]>
 2)把XML信息和DTD信息写在不同的文件中,并将DTD放到本地系统中
  <!DOCTYPE rootElement SYSTEM "文件路径">
 3)把XML信息和DTD信息写在不同的文件中,并将DTD放到互联网上,
  <!DOCTYPE rootElement PUBLIC "描述信息" "URL">

XML命名空间
 命名空间(nameSpace):一系列元素和属性名称的集合
 目的:解决:XML中的名称冲突问题
URL:统一资源定位符
URI:统一资源标识符
 1)声明一个命名空间前缀,并应用在某一个元素上,则该元素所有的子元素及其属性都在相应的命名空间下
 2)可以通过XMLNS定义默认命名空间,声明后该元素所有的子元素都在默认的命名空间下
  注:默认命名空间不作用于属性
 3)在同一XML文档中可以声明多个命名空间前缀,可以定义多个不同的命名空间前缀只向同一个URI,但不能定义相同的命名空间前缀,

XML Schema:所完成的功能和DTD是一样的,都是用来对XML文件的内容进行限制的,其功能比DTD更强大

XML Schema特性:
 1)采用和XML相同的语法
 2)支持具体数据类型
 3)支持命名空间
 4)能对XML的内容完成一些具体的限制 如:限制元素只能出现4--17次等
XML Schema中 类型:
 1)Simple Type: 用来限制 修饰元素和属性
  语法:
  <simpleType name="..">...</simpleType>
 2)Complex TYpe: 只能用来限制.修饰元素
  当元素内有属性.或子元素时,必须将元素的类型指定为复杂类型
  语法:
  <complexType name=''>...</complexType>
 复杂类型四种内容模式:
 1)Simple:表示元素只能跟字符内容和属性
 <passwd id="..">test</passwd>
 2)Empty:表示元素只能跟属性
 <passwd id="fs s"/>
 3)Element Only:表示在元素内部只能出现子元素和属性
 <passwd id=''>
  <a>test</a>
 </passwd> 
 4)Mixed:表示在元素内可以出现字符内容。子元素。属性
 <passwd id=''>
  ibm
  <a>test</a>
 </passwd>
 声明属性:<attribute ...></attribute>
 use:指定属性是否出现,如:required,optional
 default:指定默认属性
 fixed:指定属性出现后,其值必须是某一个固定的值
 注意:use="required"和default=""不能同时出现
 
 元素声明:
 <element ...></element>
 name:指定元素名
 type:指定元素类型
 minOccurs:指定元素最小出现次数
 maxOccurs:指定元素出现最大次数 指定为unbounded,可以出现无限次
<sepuence>:限定元素安顺序出现
<choice>:限定多个元素中取一个
<all>:限定多个元素都可以出现,但不关心元素出现的顺序
练习:
 student.xml
写一个student.xsd对student.xml中的内容进行限制
 1)要求根元素<student>
 2)根元素可以有多个<student>(没有个数限制)
 3)<student>子元素<first_name><last_name><age><gender><addresss>顺序出现
 4)<age>数值类型,取值1-100;
 5)<gender>字符类型,取值male,famale
 6)<address>子元素<city><street><zip>安顺序出现
 7)<zip>数值类型,取值111111-999999
 8)<student>有一属性id,,必须出现,取值为非负整形

第五章:XML的解析
 JAXP:SUN公司提供给JAVA开发人员的一个公用接口,它本身并不提供对XML的解析功能,底层仍然调用SAX,DOM等解析器来对XML进行解析
XML编程常用的包:
 javax.xml.parsers
 org.xml.sax
 org.xml.sax.helppers
 org.w3c.dom
XML解析器根据是否支持DTD、XML Schema分为:
 1)验证型:验证模式、非验证模式
 2)非验证型:
解析原理:
1)基于事件的解析器 如:SAX(Simple API for XML)
特点: a)不需要把这个XML内容读入内存,可以边读边解析
 b)对XML文件的读取处理是一次性的,读到后面,要想对前面的内容进行处理,必须从头再读
 c)对XML文件内容的处理是只读的
 d)资源消耗少,适合处理大的XML文件
2)基于驻留内存树型结构的解析器 如:DOM (是跨平台,跨语言的)
 a)需要将整个XML文件内容读入内存,然后才能进行解析
 b)对XML文件的内容可以多次读取
 c)对XML文件的内容可以进行增、删、改、查。
 d)资源消耗多,不适合处理大的XML文件
SAX解析:
XMLReader ContentHandler DefaultHandler
SAX编程步骤:
 1)创建SAX解析器:
  XMLReader parser=XMLReaderFactory.createXMLReader();
 2)设置解析器(是否支持验证、命名空间等)
 String VALIDATION="http://xml.org..sax.features/validatioon";
 String NS="http://xml.org..sax.features/namespaces";
 parser.setFeature(NS,ture);
 3)创建事件处理器(可以实现ContentHandler接口,但一般继承DefaultHandler类)
 ContentHandler handler=new MyHandler();
 class MyHandler extends DefaultHandler{
  重写父类相应方法
  ....
 }
 4)将事件处理器邦定到解析器
 parser.setContentHandler(handler);
 5)解析XML文件
 parser.parse("students.xml")
DOM编程步骤:
 1)创建DOM解析器  
  DocumentBuiderFactory factory=DocumentBuiderFactory.newInstance();
面试题:如何产生单态模式(单例模式)?
class Student{
 private static Student s;
//构造器私有
 private Student(){
 }
//有一个公共的方法供外部访问
 public synchronized static Student newStudent(){
  if(s==null)
   s=new Student();
  return s;
 }
}
 2)设置解析器(是否支持验证、命名空间等)
 factory.setNamespaceAware(true);
 .. setValidating(true);
 3)创建文档构建器
 DocumentBuilder builder=factory.newDocumentBuilder()
 4)处理XML文件
 a)解析:
  Document doc=builder.parse("student.xml");
 b)新建:
  Document doc=builder.newDocument();
 5)对XML文档进行增、删、改、查。

练习:
写一个类DOMManipulate.java
add():在XML中增加一个元素
remove();从XML中删除一个元素
modify():修改XML中的一个元素
org.w3c.dom;