一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java5、Java6、Java7的新特性

詳解Java5、Java6、Java7的新特性

2020-09-11 10:52wbb Java教程

本編文章詳細介紹了Java5、Java6、Java7的新特性,需要的朋友可以參考下

Java5:

1、泛型 Generics:

引用泛型之后,允許指定集合里元素的類型,免去了強制類型轉換,并且能在編譯時刻進行類型檢查的好處。Parameterized Type作為參數和返回值,Generic是vararg、annotation、enumeration、collection的基石。

A、類型安全

拋棄List、Map,使用List、Map給它們添加元素或者使用Iterator遍歷時,編譯期就可以給你檢查出類型錯誤

B、方法參數和返回值加上了Type

拋棄List、Map,使用List、Map

C、不需要類型轉換

List list=new ArrayList();
String str=list.get(i);

D、類型通配符“?”

假設一個打印List中元素的方法printList,我們希望任何類型T的List都可以被打印:

代碼:

?
1
2
3
4
5
public void printList(List list,PrintStream out)throws IOException{
for(Iterator i=list.iterator();i.hasNext();){
System.out.println(i.next.toString());
}
}

如果通配符?讓我們的參數類型過于廣泛,我們可以把List、Iterator 修改為

List、Iterator限制一下它。

2、枚舉類型 Enumeration:

3、自動裝箱拆箱(自動類型包裝和解包)autoboxing & unboxing:

  簡單的說是類型自動轉換。

自動裝包:基本類型自動轉為包裝類(int ——Integer)

自動拆包:包裝類自動轉為基本類型(Integer——int)

4、可變參數varargs(varargs number of arguments)

參數類型相同時,把重載函數合并到一起了。
如:

?
1
2
3
4
5
public void test(object... objs){
for(Object obj:objs){
System.out.println(obj);
}
}

5、Annotations 它是java中的metadata

A、Tiger中預定義的三種標準annotation

a 、Override

指出某個method覆蓋了superclass 的method當你要覆蓋的方法名拼寫錯時編譯不通過

b、Deprecated

指出某個method或element類型的使用是被阻止的,子類將不能覆蓋該方法

c、SupressWarnings

關閉class、method、field、variable 初始化的編譯期警告,比如:List沒有使用 Generic,則@SuppressWarnings("unchecked")去掉編譯期警告。

B、自定義annotation

public @interface Marked{}

C、meta-annotation

或者說annotation的annotation

四種標準的meta-annotation全部定義在java.lang.annotaion包中:

a, Target

指定所定義的annotation可以用在哪些程序單元上

如果Target沒有指定,則表示該annotation可以使用在任意程序單元上

代碼

?
1
2
3
4
5
6
7
8
9
@Target({ElementType.ANNOTATION_TYPE,
      ElementType.CONSTRUCTOR,
      ElementType.FIELD,
      ElementType.LOCAL_VARIABLE,
      ElementType.METHOD,
      ElementType.PACKAGE,
      ElementType.PARAMETER,
      ElementType.TYPE})
 public @interface TODO {}

b, Retention

指出Java編譯期如何對待annotation

annotation可以被編譯期丟掉,或者保留在編譯過的class文件中

在annotation被保留時,它也指定是否會在JVM加載class時讀取該annotation

代碼

?
1
2
3
4
5
6
@Retention(RetentionPolicy.SOURCE) // Annotation會被編譯期丟棄
 public @interface TODO1 {}
 @Retention(RetentionPolicy.CLASS)  // Annotation保留在class文件中,但會被JVM忽略
 public @interface TODO2 {}
 @Retention(RetentionPolicy.RUNTIME) // Annotation保留在class文件中且會被JVM讀取
 public @interface TODO3 {}

c, Documented

指出被定義的annotation被視為所熟悉的程序單元的公開API之一

被@Documented標注的annotation會在javadoc中顯示,這在annotation對它標注的元素被客戶端使用時有影響時起作用

d, Inherited

該meta-annotation應用于目標為class的annotation類型上,被此annotattion標注的class會自動繼承父類的annotation

D, Annotation的反射

我們發現java.lang.Class有許多與Annotation的反射相關的方法,如getAnnotations、isAnnotationpresent

我們可以利用Annotation反射來做許多事情,比如自定義Annotation來做Model對象驗證

代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Retention(RetentionPolicy.RUNTIME)
 @Target({ ElementType.FIELD, ElementType.METHOD })
 public @interface RejectEmpty {
   /** hint title used in error message */
   String value() default "";
 }   
 @Retention(RetentionPolicy.RUNTIME)
 @Target( { ElementType.FIELD, ElementType.METHOD })
 public @interface AcceptInt {
   int min() default Integer.MIN_VALUE;
   int max() default Integer.MAX_VALUE;
   String hint() default "";
 }

使用@RejectEmpty和@AcceptInt標注我們的Model的field,然后利用反射來做Model驗證

6、新的迭代語句(for(int n:numbers))

7、靜態導入(import static )

8、新的格式化方法(java.util.Formatter)

formatter.format("Remaining account balance: $%.2f", balance);

9、新的線程模型和并發庫Thread Framework

HashMap的替代者ConcurrentHashMap和ArrayList的替代者CopyOnWriteArrayList

在大并發量讀取時采用java.util.concurrent包里的一些類會讓大家滿意BlockingQueue、Callable、Executor、Semaphore... 

Java6:

1、引入了一個支持腳本引擎的新框架

2、UI的增強

3、對WebService支持的增強(JAX-WS2.0和JAXB2.0)

4、一系列新的安全相關的增強

5、JDBC4.0

6、Compiler API

7、通用的Annotations支持

 Java7:

1,switch中可以使用字串了

?
1
2
3
4
5
6
7
8
9
10
11
String s = "test";
switch (s) {
case "test" :
System.out.println("test");
case "test1" :
System.out.println("test1");
break ;
default :
System.out.println("break");
break ;
}

2.運用List tempList = new ArrayList<>(); 即泛型實例化類型自動推斷

3.語法上支持集合,而不一定是數組

final List piDigits = [ 1,2,3,4,5,8 ];

4.新增一些取環境信息的工具方法

?
1
2
3
4
File System.getJavaIoTempDir() // IO臨時文件夾
File System.getJavaHomeDir() // JRE的安裝目錄
File System.getUserHomeDir() // 當前用戶目錄
File System.getUserDir() // 啟動java進程時所在的目錄5

5.Boolean類型反轉,空指針安全,參與位運算

?
1
2
3
4
5
6
7
8
Boolean Booleans.negate(Boolean booleanObj)
True => False , False => True, Null => Null
boolean Booleans.and(boolean[] array)
boolean Booleans.or(boolean[] array)
boolean Booleans.xor(boolean[] array)
boolean Booleans.and(Boolean[] array)
boolean Booleans.or(Boolean[] array)
boolean Booleans.xor(Boolean[] array)

6.兩個char間的equals

boolean Character.equalsIgnoreCase(char ch1, char ch2)

7.安全的加減乘除

?
1
2
3
4
5
6
7
8
9
10
11
12
int Math.safeToInt(long value)
int Math.safeNegate(int value)
long Math.safeSubtract(long value1, int value2)
long Math.safeSubtract(long value1, long value2)
int Math.safeMultiply(int value1, int value2)
long Math.safeMultiply(long value1, int value2)
long Math.safeMultiply(long value1, long value2)
long Math.safeNegate(long value)
int Math.safeAdd(int value1, int value2)
long Math.safeAdd(long value1, int value2)
long Math.safeAdd(long value1, long value2)
int Math.safeSubtract(int value1, int value2)

8.map集合支持并發請求,且可以寫成 Map map = {name:"xxx",age:18};

希望本篇文章可以幫到需要的朋友

原文鏈接:http://www.2cto.com/kf/201601/486936.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青草福利视频 | 俄罗斯美女大逼 | 精品国产自在在线在线观看 | 极品手交handjobtattoo | 日本视频一区在线观看免费 | 1313午夜精品久久午夜片 | 国产成人精品1024在线 | 天天摸天天碰色综合网 | 天堂俺去俺来也www久久婷婷 | 77成人影院 | 丝袜护士强制脚足取精 | 大伊香蕉精品视频一区 | 天堂成人影院 | 深夜精品高中女学生 | 精品无码久久久久久久久 | 动漫美女羞羞视频 | 四虎影院在线免费 | 欧美贵妇vs高跟办公室 | 亚洲啊v| oneday日本在线观看完整版 | 为什么丈夫插我我却喜欢被打着插 | 欧美另类xxx精品人妖 | 日韩亚洲欧美综合一区二区三区 | 日本色女 | 日本视频免费在线观看 | 四虎国产精品免费入口 | 亚洲国产美女精品久久 | 国内亚州视频在线观看 | 黑白配高清hd在线视频 | 91九色jiuse006| 国产综合欧美日韩视频一区 | sihu国产午夜精品一区二区三区 | 久久香蕉国产免费天天 | 女海盗斯蒂内塔的复仇2免费观看 | 黑人巨荃大战乌克兰美女 | 奶茶视频官网免费 | 2022天天干 | 人人擦 | 欧美日韩中文字幕在线视频 | 成人影音先锋 | aaaaa特级毛片 |