(Translated by https://www.hiragana.jp/)
Java 5.0 - 维基百科,自由的百科全书 とべ转到内容ないよう

Java 5.0

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

Javaしたがえ5.0版本はんぽん開始かいし加入かにゅう許多きょたしん特性とくせいJava歷史れきしちゅうおさむあらため最大さいだいてき版本はんぽん許多きょたとくてん仿自C#いん而被みとめためためりょうあずかC#對抗たいこう

しんてき特性とくせい[1]

[编辑]

自動じどうそうばこ/拆箱(Auto-Boxing/Unboxing)

[编辑]

はたJavaちゅう8个基本きほん类型实现动对ぞう值化转换,つう过编译器完成かんせいしょう关转换代码的生成せいせい

ぼつゆう自動じどうそうばこ/拆箱:

 int int1 = 1;
 Integer integer2 = new Integer(int1);
 int int3 = integer2.intValue();

ゆう自動じどうそうばこ/拆箱:

 int int1 = 1;
 Integer integer2 = int1;     // 自動じどうそうばこ 
 int int3 = integer2;         // 自動じどう拆箱

实际じょうはたあい关字节码はん编译きさきかい还原其隐しき调用てき转换方法ほうほう

 int int1 = 1;
 Integer integer2 = Integer.valueOf(int1);     // 自動じどうそうばこてきほん质,つう过调ようvalueOfはた值对ぞう
 int int3 = integer2.intValue();               // 自動じどう拆箱てきほん质,つう过调ようxxxValueはた对象值化

自動じどうそうばこてきしんこうのう可能かのうしたがえC#かたりげん身上しんじょう學習がくしゅうらいてき,Javaやめけい越來ごえくえつぞうC#。しか而Javaたい自動じどうそうばこ/拆箱てき支援しえん,僅是利用りようへんやく實現じつげんざいJava Bytecodeちゅう並無ならびな自動じどうそうばこ/拆箱てき操作そうさ碼(opcode)。

泛型(Generic Types)

[编辑]

泛型就像C++てきばんはらゆうてきCollection APIじょう泛型支援しえん增加ぞうかたいがたべつてきけん查,減少げんしょうほどしき錯誤さくごてき機會きかい

ぼつゆう泛型:

 HashMap hm = new HashMap();
 int i=1;
 String tt="test";
 hm.put(new Integer(i), tt);

使用しようGeneric:

 HashMap <Integer, String>hm = new HashMap<Integer, String>();
 int i=1;
 String tt = "test";
 hm.put(i, tt);      // ざい這裏たいint自動じどうそうばこなるInteger,也使用しようりょうさんすうてきがたべつけん

注解ちゅうかい(Annotation)

[编辑]

AnnotationぜんめいProgram Annotation Facility,Java SE 5.0てきしんこうのう。JavaてきAnnotation類似るいじ於.NETてき屬性ぞくせい(Attribute)。Javaてき注解ちゅうかいいちしゅせっこう(interface),繼承けいしょうjava.lang.annotation.Annotation。Class FileそくうわACC_ANNOTATIONしるべくじ

したがえ5.0開始かいし,javadocてき@deprecated代表だいひょう建議けんぎ使用しようてき方法ほうほうある類別るいべつ)也被Annotationちゅうてき@Deprecatedだい;另外,使用しようJavaさくSOPてきAspectJあずかSpring使用しようりょう大量たいりょうてきAnnotation。

 // JDK 1.4
 /**
  * @todo to be implemented
  **/
 void gimmeSomeLoving() {
   throw new Exception("not implemented");
 }
 // JDK 1.5
 @todo 
 void gimmeSomeLoving() {
   throw new Exception("not implemented");
 }

まい举类がた(enum)

[编辑]

まい类型也是J2SE 5.0てきしんこうのう過去かこJavaみとめためenumてきせきかぎ必要ひつようてきこうのういんためようpublic static int field就可以取だいenum,いん過去かこいちちょく不用ふよう。J2SE 5.0ちゅうてきclass如果enum,ざいclass fileちゅうかいうえいちACC_ENUMしるべくじ

Enum 一般用来表示一组相同类型的常量。如性别、にちつき份、颜色とう。对这些属せいようつね量的りょうてきこう处是显而えき见的,仅可以保证单れい,且比较时こう以用 “==” らいがえ换 equals 。いち种好てき习惯。 JDK1.5 ぜんぼつゆう Enum 这个类型,时候一般用接口常量来替代。JavaゆうりょうEnum きさき以更贴近てき表示ひょうじ这种つねりょう

 // JDK 1.4
 class JavaTech {
        public static final int J2ME = 1;
        public static final int J2SE = 2;
        public static final int J2EE = 3;
 }


 // JDK 1.5
 public enum NewJavaTech {
        J2ME, J2SE, J2EE
 }


くに际化

[编辑]

Java语言严格区分くぶんてきそん储格しきUCS-2,也就ただのう使用しよう基本きほんぶんしゅ平面へいめんてきもと,从Java 5开始支持しじUTF-16

另外,したがえ5.0開始かいしJavaてきほどしき開始かいし使用しようUnicodeもと進行しんこう命名めいめい

下面かめん就是いち合法ごうほうてきJavaほどしきうらめん包含ほうがんりょうちゅうぶん作為さくいくしてき名稱めいしょう,這個ほどしき以在编譯ちゅう通過つうかへんやく

public class HelloWorld {
   private Stringぶんほん = "HelloWorld";
}


輸入ゆにゅう輸出ゆしゅつ

[编辑]

ざいjdk1.5及其以後いご版本はんぽんちゅうjava.util.Scannerjava.util.Formatter類別るいべつ应用いた輸入ゆにゅう輸出ゆしゅつちゅう。另外,也出現しゅつげんりょう類似るいじCげんてきprintf()はこしき

foreach迴圈

[编辑]

foreach迴圈,ゆう時又ときまたしょうforin迴圈,ざい許多きょたほどしきげん包括ほうかつC#RubyJavaScriptちゅうゆう出現しゅつげん直接ちょくせつはたいちArrayあるMap展開てんかい,而不必由ほどしき設計せっけいくだりけん查邊かい有效ゆうこう減少げんしょう錯誤さくごてき機會きかい

 int[] array1 = {1, 3, 5};
 
 for(int i : array1){ // foreach迴圈
     System.out.println("Number: "+i);
 }

可變長かへんちょうてき引數ひきすう

[编辑]

長久ちょうきゅう以來いらいいちちょくゆう使用しようしゃ要求ようきゅう加入かにゅうprintf()はこしき,受限於Javaはこしき必須ひっすようゆう固定こてい引數ひきすうてききりせい始終しじゅう無法むほう實現じつげんざい加入かにゅう這個こうのうこれ連帶れんたいprintf()也變ため可能かのう

static引入

[编辑]

這個特性とくせい允許いんきょほどしき設計せっけいはた一個類別中的靜態內容引入到程式中。

static import java.lang.System.*;

public class HelloWorld {
    public static void main(String args[]){
        out.println("Hello World.");
    }
}

批評ひひょう

[编辑]

Java 5.0雖然加入かにゅう許多きょたてきしん特性とくせいただしためりょうあずかきゅう版本はんぽんしょうよう,JVMなみぼつゆうずい改變かいへん,而僅ただしたがえへんやくどうしゅ腳,いん而引はつ許多きょた問題もんだい討論とうろんJavaげん問題もんだいてきせんしょ《Java Puzzle》就有專門せんもんてきへんはば討論とうろん5.0これ造成ぞうせいてき問題もんだい

自動じどうそうばこ/拆箱てき矛盾むじゅん

[编辑]

自動じどうそうばこ這功のう造成ぞうせいりょういち矛盾むじゅんれい如:

 Integer int1 = new Integer(1);
 Integer int2 = new Integer(1);
 
 System.out.println(int1 >= int2);  // けん查兩しゃてき值(さわ发了动拆ばこ),     true
 System.out.println(int1 <= int2);  // けん查兩しゃてき值(さわ发了动拆ばこ),     true
 System.out.println(int1 != int2);   // けん查兩しゃてき參考さんこう位置いちぼつゆうさわ发自动拆ばこ),true!
 System.out.println(int1 == int2);  // 实际为檢查兩しゃてき參考さんこう位置いち,false! 不能ふのう认为这是int值类がた间的对比,此时还没ゆう发生动拆ばこぎょう为。

泛型こすじょ

[编辑]

C#,C++てき泛型不同ふどう,Javaてき泛型ただようざいかたべつけん查,使用しようてき時候じこうかえようさい做一次轉型和类型检查。泛型しんいきざい编译时会从代码中抹除(ただ保留ほりゅうさく为元すうすえ反射はんしゃこうのう获得),泛型对应てき值类がたざい节码ちゅう为java.lang.Object类型,这是为了くだていJVMてきおさむあらため难度かずたもつ证老きゅうだい码的运行けんよう

ちゅう

[编辑]
  1. ^ New Features and Enhancements J2SE 5.0. [2013-05-14]. (原始げんし内容ないようそん于2021-01-26).