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; < 表示<
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;
浙公网安备 33010602011771号