本文目錄一覽:
- 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選項錯誤。
望採納!!!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/249049.html