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-tw/n/249049.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:31
下一篇 2024-12-12 13:31

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論