本文目录一览:
- 1、java中的 Annotation类。希望高手能够简单明了解释下用法和作用
- 2、JDK 6.0和JDK 5.0相比有什么新的特性?
- 3、Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析
- 4、jdk5 ,jdk6 还有其他版本的java它们有什么不同,一般的学习者用哪个?
- 5、java 反射 下列选项中关于JDK5的新特性错误的是( ) ----- 单选
java中的 Annotation类。希望高手能够简单明了解释下用法和作用
java.lang.annotation,接口 Annotation。对于Annotation,是Java5的新特性,JDK5引入了Metedata(元数据)很容易的就能够调用Annotations.Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。An annotation 对代码的执行没有什么影响。Annotations使用@annotation的形势应用于代码:类(class),属性(field),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。
public interface Annotation所有 annotation 类型都要扩展的公共接口。注意,手动扩展该公共接口的接口不 定义 annotation 类型。还要注意此接口本身不定义 annotation 类型。 对于Annotation,是Java5的新特性,下面是Sun的Tutorial的描述,因为是英文,这里我翻译下,希望能够比较清晰的描述一下Annotation的语法以及思想。Annotation:Release 5.0 of the JDK introduced a metadata facility called annotations. Annotations provide data about a program that is not part of the program, such as naming the author of a piece of code or instructing the compiler to suppress specific errors. An annotation has no effect on how the code performs. Annotations use the form @annotation and may be applied to a program's declarations: its classes, fields, methods, and so on. The annotation appears first and often (by convention) on its own line, and may include optional arguments: JDK5引入了Metedata(元数据)很容易的就能够调用Annotations.Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。An annotation 对代码的执行没有什么影响。Annotations使用@annotation的形势应用于代码:类(class),属性(field),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。@Author("MyName")class myClass() { } or @SuppressWarnings("unchecked")void MyMethod() { } Defining your own annotation is an advanced technique that won't be described here, but there are three built-in annotations that every Java programmer should know: @Deprecated, @Override, and @SuppressWarnings. The following example illustrates all three annotation types, applied to methods: 定义自己的Annotation是一个比较高级的技巧,这里我们不做讨论,这里我们仅仅讨论每一个Java programer都应该知道的内置的annotations:@Deprecated, @Override, and @SuppressWarnings。下面的程序阐述了这三种annotation如何应用于methods。import java.util.List; class Food {} class Hay extends Food {} class Animal { Food getPreferredFood() { return null; } /** * @deprecated document why the method was deprecated */ @Deprecated static void deprecatedMethod() { } } class Horse extends Animal { Horse() { return; } @Override Hay getPreferredFood() { return new Hay(); } @SuppressWarnings("deprecation") void useDeprecatedMethod() { Animal.deprecateMethod(); //deprecation warning - suppressed }} } } @DeprecatedThe @Deprecated annotation indicates that the marked method should no longer be used. The compiler generates a warning whenever a program uses a deprecated method, class, or variable. When an element is deprecated, it should be documented using the corresponding @deprecated tag, as shown in the preceding example. Notice that the tag starts with a lowercase "d" and the annotation starts with an uppercase "D". In general, you should avoid using deprecated methods — consult the documentation to see what to use instead. @Deprecated@Deprecated annotation标注一个method不再被使用。编译器在一个program(程序?)使用了不赞成的方法,类,变量的时候会产生警告(warning)。如果一个元素(element:method, class, or variable)不赞成被使用,应该像前面的例子里使用相应的@deprecated 标签,并且注意标签的首字母是小写的"d",而annotation时大写的"D"。一般情况下,我们应该避免使用不赞成使用的方法(deprecated methods),而应该考虑替代的方法。 @OverrideThe @Override annotation informs the compiler that the element is meant to override an element declared in a superclass. In the preceding example, the override annotation is used to indicate that the getPreferredFood method in the Horse class overrides the same method in the Animal class. If a method marked with @Override fails to override a method in one of its superclasses, the compiler generates an error. While it's not required to use this annotation when overriding a method, it can be useful to call the fact out explicitly, especially when the method returns a subtype of the return type of the overridden method. This practice, called covariant return types, is used in the previous example: Animal.getPreferredFood returns a Food instance. Horse.getPreferredFood (Horse is a subclass of Animal) returns an instance of Hay (a subclass of Food). For more information, see Overriding and Hiding Methods. @Override@Override annotation 告诉编译器当前元素是重写(override)自父类的一个元素。在前面的例子中,override annotation用来说明Horse类中的getPreferredFood这个方法重写(override)自Animal类中相同的方法。如果一个方法被标注了@Override,但是其父类中没有这个方法时,编译器将会报错。但是并不是说我们一定要使用这个annotation,但是它能够很明显的给出实际行为,尤其是在方法返回一个被重写的方法返回类型的子类型的时候。上面的例子中,Animal.getPreferredFood 返回一个 Food实例,Horse.getPreferredFood 返回一个Hay实例,这里Horse是Animal的子类,Hay是Food的子类。 @SuppressWarningsThe @SuppressWarnings annotation tells the compiler to suppress specific warnings that it would otherwise generate. In the previous example, the useDeprecatedMethod calls a deprecated method of Animal. Normally, the compiler generates a warning but, in this case, it is suppressed. Every compiler warning belongs to a category. The Java Language Specification lists two categories: "deprecation" and "unchecked". The "unchecked" warning can occur when interfacing with legacy code written before the advent of generics. To suppress more than one category of warnings, use the following syntax: @SuppressWarnings@SuppressWarnings annotation 告诉编译器禁止别的元素产生的特殊的警告(warnings),在前面的例子里,useDeprecatedMethod调用了Animal的不赞成使用的一个方法。一般情况下,编译器会给出一个警告(warning),但是在这种情况下,不会产生这个警告,也就是说被suppress。每个编译器的警告都属于一个类型。Java Language Specification列出了两种类型:"deprecation" 和 "unchecked"。"unchecked" warning 发生在使用非generic的旧代码交互的generic collection类时。为了禁止不止一种的警告时,使用下面的语法:@SuppressWarnings({"unchecked", "deprecation"})
JDK 6.0和JDK 5.0相比有什么新的特性?
Java SE 6中对内存泄漏增强了分析以及诊断能力。当遇到java.lang.OutOfMemory异常的时候,可以得到一个完整的堆栈信息,并且当堆已经满了的时候,会产生一个Log文件来记录这个致命错误。另外,JVM还添加了一个选项,允许你在堆满的时候运行脚本。(这也就是提供了另外一种方法来诊断错误)
Java SE 6的安全部分,整合了GSS/Kerberos的操作API,LDAP上的JAAS认证,以及一个?请求安全认证?的框架,这个框架允许应用程序从一系列的协议中选择一种?请求安全认证?所用的协议。
Java SE 6.0(代号?Mustang")是即将面世的下一版本Java。相比较J2SE 5.0,添加了许多重要的特性和增强功能,这些新特性和增强功能如下面的列表。
所有的条目都按照涉及范围以及所属的组件分类。第一列表示了修改涉及的范围。
* JSR - 表示这是实现了某一项JSR(Java标准需求)的重大特性
* API - 表示新添加的API
* IMP - 表示没有增加新的API,只是作了一些类似性能增强的改进。
JDK 5.0 的新特性:
1.泛型(Generic)
C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。
2.For-Each循环
For-Each循环得加入简化了集合的遍历。
3.自动装包/拆包(Autoboxing/unboxing)
自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
自动装包:基本类型自动转为包装类.(int Integer)
自动拆包:包装类自动转为基本类型.(Integer int)
4.枚举(Enums)
JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。
public enum Color
{
Red,
White,
Blue
}
然后可以这样来使用Color myColor = Color.Red.
枚举类型还提供了两个有用的静态方法values()和valueOf(). 我们可以很方便地使用它们,例如
for (Color c : Color.values())
System.out.println�0�8;
5.可变参数(Varargs)
可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象,
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
…
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
在引入可变参数以后,Java的反射包也更加方便使用了。对于c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0])),现在我们可以这样写了c.getMethod("test").invoke(c.newInstance()),这样的代码比原来清楚了很多。
6.静态导入(Static Imports)
要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。
import static java.lang.Math.*;
…….
r = sin(PI * 2); //无需再写r = Math.sin(Math.PI);
不过,过度使用这个特性也会一定程度上降低代码地可读性。
Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析
jdk6和jdk5相比的新特性有:
1、instrumentation
在
Java
SE
6
里面,instrumentation
包被赋予了更强大的功能:启动后的
instrument、本地代码
instrument,以及动态改变
classpath
等等。
2、Http有所增强
3、
Java
管理扩展(JMX)
架构及其框架,以及在
Java
SE
5
中新引入的
JMX
API
--
java.lang.management
包
4、JDK
6
中新增加编译器
API(JSR
199)。利用此
API,您可以在运行时调用
Java
编译器,可以编译不同形式的源代码文件,还可以采集编译器的诊断信息。
5、Java
DB
和
JDBC
4.0
6、对脚本语言的支持
Java
SE
6
新引入的对
JSR
223
的支持,它旨在定义一个统一的规范,使得
Java
应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在
Java
平台上调用各种脚本语言的目的。
7、XML
API
与
Web
服务
Java
SE
6
中提供的
XML
处理框架,以及在此框架之上结合注释(Annotation)
技术,所提供的强大的针对
Web
服务的支持
要详细的可以参看:
查看文章
请问
jdk
1.5
和jdk1.6有哪些区别???2008年11月27日
星期四
下午
09:52
多了不少新特性
一.Instrumentation
利用
Java
代码,即
java.lang.instrument
做动态
Instrumentation
是
Java
SE
5
的新特性,它把
Java
的
instrument
功能从本地代码中解放出来,使之可以用
Java
代码的方式解决问题。在
Java
SE
6
里面,instrumentation
包被赋予了更强大的功能:启动后的
instrument、本地代码(native
code)instrument,以及动态改变
classpath
等等。在
Java
SE
5
当中,开发者只能在
premain
当中施展想象力,所作的
Instrumentation
也仅限与
main
函数执行前,这样的方式存在一定的局限性。在
Java
SE
6
的
Instrumentation
当中,有一个跟
premain“并驾齐驱”的“agentmain”方法,可以在
main
函数开始运行之后再运行。
二、Http
在
Java
SE
6
当中,围绕着
HTTP
协议出现了很多实用的新特性:NTLM
认证提供了一种
Window
平台下较为安全的认证机制;JDK
当中提供了一个轻量级的
HTTP
服务器;提供了较为完善的
HTTP
Cookie
管理功能;更为实用的
NetworkInterface;DNS
域名的国际化支持等等。
HTTP
Cookie管理可以应用客户操作临时变量的保存,如查询条件,当前状态等
三、JMX与系统管理
管理系统的构架
图
1.
管理系统构架
上图分析了管理系统的基本构架模式。其中
Agent
/
SubAgent
起到的就是翻译的作用:把
IT
资源报告的消息以管理系统能理解的方式传送出去。
也许读者有会问,为什么需要
Agent
和
SubAgent
两层体系呢?这里有两个现实的原因:
管理系统一般是一个中央控制的控制软件,而
SubAgent
直接监控一些资源,往往和这些资源分布在同一物理位置。当这些
SubAgent
把状态信息传输到管理系统或者传达管理系统的控制指令的时候,需要提供一些网络传输的功能。
管理系统的消息是有一定规范的,消息的翻译本身是件复杂而枯燥的事情。
一般来说,管理系统会将同一物理分布或者功能类似的
SubAgent
分组成一组,由一个共用的
Agent
加以管理。在这个
Agent
里封装了
1
和
2
的功能。
JMX
和管理系统
JMX
既是
Java
管理系统的一个标准,一个规范,也是一个接口,一个框架。图
2
展示了
JMX
的基本架构。
图
2.
JMX
构架
和其它的资源系统一样,JMX
是管理系统和资源之间的一个接口,它定义了管理系统和资源之间交互的标准。javax.management.MBeanServer
实现了
Agent
的功能,以标准的方式给出了管理系统访问
JMX
框架的接口。而
javax.management.MBeans
实现了
SubAgent
的功能,以标准的方式给出了
JMX
框架访问资源的接口。而从类库的层次上看,JMX
包括了核心类库
java.lang.management
和
javax.management
包。java.lang.management
包提供了基本的
VM
监控功能,而
javax.management
包则向用户提供了扩展功能。
JMX帮助开发者监控JVM的信息
四、编辑器API
JDK
6
提供了在运行时调用编译器的
API。在传统的
JSP
技术中,服务器处理
JSP
通常需要进行下面
6
个步骤:
分析
JSP
代码;
生成
Java
代码;
将
Java
代码写入存储器;
启动另外一个进程并运行编译器编译
Java
代码;
将类文件写入存储器;
服务器读入类文件并运行;
但如果采用运行时编译,可以同时简化步骤
4
和
5,节约新进程的开销和写入存储器的输出开销,提高系统效率。实际上,在
JDK
5
中,Sun
也提供了调用编译器的编程接口。然而不同的是,老版本的编程接口并不是标准
API
的一部分,而是作为
Sun
的专有实现提供的,而新版则带来了标准化的优点。
新
API
的第二个新特性是可以编译抽象文件,理论上是任何形式的对象
——
只要该对象实现了特定的接口。有了这个特性,上述例子中的步骤
3
也可以省略。整个
JSP
的编译运行在一个进程中完成,同时消除额外的输入输出操作。
第三个新特性是可以收集编译时的诊断信息。作为对前两个新特性的补充,它可以使开发人员轻松的输出必要的编译错误或者是警告信息,从而省去了很多重定向的麻烦
五、Java
DB
与jdbc4.0
新安装了
JDK
6
的程序员们也许会发现,除了传统的
bin、jre
等目录,JDK
6
新增了一个名为
db
的目录。这便是
Java
6
的新成员:Java
DB。这是一个纯
Java
实现、开源的数据库管理系统(DBMS),源于
Apache
软件基金会(ASF)名下的项目
Derby。
从
Java
6
开始,应用程序不再需要显式地加载驱动程序了,DriverManager
开始能够自动地承担这项任务。
六、对脚本语言的支持
Java
SE
6
引入了对
Java
Specification
Request(JSR)223
的支持,JSR
223
旨在定义一个统一的规范,使得
Java
应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在
Java
平台上调用各种脚本语言的目的。
Java
脚本
API
为开发者提供了如下功能:
获取脚本程序输入,通过脚本引擎运行脚本并返回运行结果,这是最核心的接口。
发现脚本引擎,查询脚本引擎信息。
通过脚本引擎的运行上下文在脚本和
Java
平台间交换数据。
通过
Java
应用程序调用脚本函数。
七、XML
API
与
Web
服务
jdk5 ,jdk6 还有其他版本的java它们有什么不同,一般的学习者用哪个?
我不是很同意楼上的观点,既然学一种技术,就要从最新的着手。否则,上手之后,往往还是需要靠拢到最新的上面。
JDK6当然是首选,很多新特性的加入,使代码可靠性、可读性大大加强,何乐而不为呢?
如果说学习基本文法的话,我同意各个版本的JDK没有什么大分别,甚至JDK1.3也够用,但是我觉得一旦开始学习,就要和最新最完善的东西靠拢。
java 反射 下列选项中关于JDK5的新特性错误的是( ) ----- 单选
JDK 1.5的新特性如下:
1、自动装箱与拆箱;
2、枚举;
3、静态导入(import static);
4、可变参数;
5、泛型;
6、增强for循环;
所以,D选项错误。
望采纳!!!