??xml version="1.0" encoding="utf-8" standalone="yes"?>
c.因ؓproperty,xml的配|文件比较繁?nbsp;
2、Annotation的定义方?br />
a.Class,Interface,enum,Annotation是同U别的类标识W?br />
b.public @interface AnnotationTest{} //@+interface = annotation的定义哈
public @interface AnnotationTest2{
String value(); //默认构造方?br />
}
public @interface AnnotationTest3{
String value1();
}
public @interface AnnotationTest4{
String[] value();
}
public @interface AnnotationTest5{
String value1();
String value2();
}
3、Annotation的用方?br />
a.@AnnotationTest 来用就可以了;可以攑֜c,ҎQ属性上面;
b.@AnnotationTest2("test") == @AnnotationTest2(value="test");
c.@AnnotationTest3(value1="test3");
d.@AnnotationTest4({"test1","test2"}); == @AnnotationTest4(value=({"test1","test2"})
e.@AnnotationTest5(value1="hello",value2="world")
4、jdk5.0以后自带的Annotation详解
a.Override (重写)
b.Deprecated (抛弃的,已过?/span>?
c.SuppressWarningsQ压制警告,屏蔽警告Q?br />
SuppressWarnings("unchecked"); //屏蔽一个警?br />
SuppressWarnings({"unchecked","deprecation"})//屏蔽[多个]警告 注意{key1,key2}的用,以数l的形式存放
有哪些常用的警告cd呢?
Q》unchecked,deprecration,可自定义
5、Annotation的高U特?nbsp;
一、怎么来处理Annotation
a.告知~译E序如何处理@Retention(重要)
java.lang.annotation.Retention型态可以在您定自定义Annotation型态时Q指C编译程序应该如何对待你的自定义的Annotation型?->预设上编译程序会Annotation信息留在[.class默认]案?/span>Q但不会被java虚礼取,而仅用于~译E序或工L序运行时的提CZ?/span>Q目的)
1)本n是一?注释cd Retention
2)用一? RetentionPolicy value();属?见jdk api
3)RetentionPolicy是什么呢Q它是一个枚丄型的注释保留{略Q?a href="../../../java/lang/annotation/RetentionPolicy.html#CLASS">CLASS默认Q编译器把注释记录在类文g中,但在q行?VM 不需要保留注释)?a href="../../../java/lang/annotation/RetentionPolicy.html#RUNTIME">RUNTIMEQ编译器把注释记录在类文g中,在运行时 VM 保留注释,因此可以反射性地dQ?a href="../../../java/lang/annotation/RetentionPolicy.html#SOURCE">SOURCEQ编译器要丢弃的注释Q?nbsp;
4).例子
@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
@Retention(value=SOURCE) == @Retention(RetentionPolicy.SOURCE) //提供了一个策略类
//可以看出来Q他主要是压制警告Q所以没有必要保存到class文g里面?br />
public @interface SuppressWarnings{。。。}
5).RUNTIME旉过反射来得到Annotation相关的信?br />
6).AnnotatedElement 是提供反射处理annotation的接?Class,constructor,Field,Method,Package都实Cq个接口Q然后我们在反射的时候可以先得到Class,Constructor,Method{对象再通过里面l承?
b.限定Annotation的用对?@TargetQ重要)
1).注释cd Target,ҎQElementType[] value
2).枚D ElementType:PACKAGE[包声明],TYPE[cR接口(包括注释cdQ或枚D声明],ANNOTATION_TYPE[注释cd==annotationc里面可以定义],CONSTRUCTOR[构造方法],METHOD[Ҏ],FIELD[字段声明Q包括枚丑ָ量)] ,LOCAL_VARIABLE[局部变量声明] ,PARAMETER[参数声明]
3).实例
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest6{
String value();
}
c.子类是否l承父类的Annotation-Inherited 1).注释cd Inherited 声明的AnnotationQ?/span>
@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Inherited
2).使用Q如果我们在新徏Annotation对象事,如果声明?div style="display: inline-block; ">
@Inherited
public @interface AnnotationTest6{String value();}
@AnnotationTest6("haha")
public class Parent{}
public class Child extends Parent{}
然后通过反射LChild的所有Annotation
d.利用反射得到Annotation信息[@Retention(value=RUNTIME)]
1)用上面的实例Q?nbsp; AnnotationTest5
2)真正解析代码Q?nbsp;
public Class MyTest{
@AnnotationTest5(value1="hello",value2="world")
public void output(){
System.out.println("test annotation");
}
}
public class MyReflection{
public static void main(String args[]){
MyTest t = new MyTest();
Class<MyTest> c = MyTest.class;
Class<AnnotationTest5> a = AnnotationTest5.class;
Method m = c.getMethod("output",new Class[]{});
if(m.isAnnotationPresent(a)){
m.invoke(t,new Object[]{});
//Annotation a1 = m.getAnnotation(a);
MyAnnotationTest5 t5 = m.getAnnotation(a);
System.out.println(t5.value1);
System.out.println(t5.value2);
}
Annotation[] ans = m.getAnnotations();
System.out.println(an.annotationType().getName()); //但这p看Annotation选择的U生成策?SOURCE,CLASS,RUNTIME[SuppressWarnings׃会显C出来]
}
}
6、应?br /> a.javadoc
1)注释cd Documented
2)实例:一般我们生javadoc的时候,没有把我们自定义的annotation昄昄出来Q我们要怎么把我们写的annotation信息也显C在javadoc里面?
@Documented //q一句就是在生成javadoc的时候,如果遇到下面定义的annotationp昄出来
public @interface DocumentedAnnotation{
String value() default "test";
}
public class DocumentedTest{
/*
* 试生成javadoc
*/
@DocumentedAnnotation(value="welcome")
public void testJavadoc(){
System.out.println("哈哈");
}
}
点击myeclipse里面的project-->generate javadoc->讄 可以生成javadoc?/div>
]]>
]]>
1。比如多Z个类里面有很多的静态方法,而在另一个类里面使用的频率也比较的高Q如ComUtil.add(...),ComUtil.update(...){等Q这hơ都要写ComUnitl.Ҏ名,所以可以直接用方法名吗?{案是肯定的
2。用语?br /> import static com.ComUtil.add;
import static com.ComUtil.update;
3。个人感觉没什么用
二、不定参?br /> public static int sum(int ... nums){
int sum= 0;
for(int i=0;i<nums.length;i++){
temp+=nums[i];
}
return sum;
}
a) 作用与区?/span>
i. jar: 通常是开发时要引用通用(JAVA)c,打成包便于存攄?/span>
ii. war: 是做好一?/span>(web)应用后,通常是网站,打成包部|到容器?/span>
iii. ear: 企业U应用,实际?/span>EAR包中包含WAR包和几个企业U项目的配置文g而已Q一般服务器选择WebSphere{,都会使用EAR包。通常?/span>EJB打成ear包?/span>
b) 打包方式
i. 所有的包都是用jar打的Q只不过目标文g的扩展名不一?/span>
ii. 也可以用Ant来安成构?/span>
c) JET~译?/span>EXE
i. JET 是要用钱买的Q而且据说 JET 也不是能把所有的 Java E序都编译成执行文gQ性能也要打些折扣。所以,使用制作可执?/span> JAR 文g包的Ҏ是最佳选择了,何况它还能保?/span> Java 的跨q_Ҏ?/span>
a) Tomcat5,6,7
b) Bea Weblogic8,9,10
c) IBM Websphere
d) JBoss
e) Apusic Application Server
f) Sun Application Server
g) Oracle ?/span> Oracle9i/AS