`
hideto
  • 浏览: 2679028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tiger in the house

    博客分类:
  • Java
阅读更多
很高兴花周五晚上2个小时的时间来阅读这样一本实用的书 -- 《Java 5.0 Tiger》

很多我面试过的朋友,工作经验两年以上,到今天都只用过JDK1.4,中WebSphere/WebLogic的毒不浅
智,日日知新也

一、新的类库
1, java.util.Arrays
提供对数组的一大堆实用的static方法:
binarySearch([], key):  使用二分搜索法来在指定数组中搜索指定值,返回搜索值的索引
toString([]): 打印数组内容
deepToString([]): 深层打印数组内容,适用于多维数组
equals([], []): 数组比较
deepEquals([], []): 深层比较,适用于多维数组
fill([], val): 给数组的每个元素赋值
sort([]): 对数组升序排序

2, java.util.Queue<E>
FIFO(先进先出)的必需品:
offer(E): 进
poll(): 出
Queue是接口,Queue q = new LinkedList();

3, java.util.Comparator<T>
结合java.util.Priority<E>构造自己排序的Queue:
compare(t1, t2): 实现自己的compare方法来排序

4, Override返回类型
Tiger让方法覆盖时连返回类型也可以Override:
public class Test1 {

  protected Test1 returnSomething() {
    return new Test1();
  }

}
public class Test2 extends Test1 {

  @Override
  protected Test2 returnSomething() {
    return new Test2();
  }

  public static void main(String... args) {
    System.out.println(new Test2().returnSomething().getClass().getName());
  }

}

Test2运行结果为: Test2
返回类型可以为superclass返回类型的extension

5, Unicode
Tiger前的Java版本支持Unicode 3.0,所有Unicode字符容于16位(一个char)
而Tiger改为支持Unicode4.0,它定义了不能容于16位的字符,这些字符不能容于一个char
这时我们用int类型的codePoint来表示该字符
codepoint是一个代表特定字符的数字,如0x3C0是π这个符号的codepoint
我们需要关注Character类的新方法

6, StringBuilder
不担心thread安全的情况下使用StringBuilder代替StringBuffer是最好的方式
引用

Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.
分享到:
评论
16 楼 fhjxp 2007-12-17  
使用了Anotation之后,请问能不能在Anotation里面编码实现对被Anotation方法的拦截?
15 楼 dalang81 2007-08-31  
现在写Tiger有点晚了,都准备换Java6了。
Annotation确实是Java语言的一大进步。另外,Generic 和for循环也能使Java代码简洁很多。Autoboxing与Unboxing用起来方便,但感觉不是很好,不小心容易出问题。
==================
Annotation进步了?
这个是很有争议的话题,他把java推向了破坏结构,依赖实现的境地了。
14 楼 万里有那么一点云 2007-08-01  
恩那,我们现在的项目据说还有可能要用jdk1.4呢,老古董啊,=。 =
13 楼 bromon 2007-07-28  
我就是中了was毒,1.5的东西只能看不能用
12 楼 xly_971223 2007-07-27  
kjhot 写道
这种文章也能评为精华,呵呵

仔细的看了一下日期 就怕看错了 Tiger刚推出的时候发这个帖子绝对要精华
可现在。。。。
11 楼 Garriot 2007-07-27  
simohayha 写道
Generic 我觉得就是个空壳子,类型擦除真是很不好的说。不过貌似这个是为了兼容原来的代码,才这样做的。

不过5里面最吸引人的就是线程部分的改动了。


JDK1.5其实对编译器的改动非常小,很多新特性都是用了预编译或解释时的一些Hacks,所以说一些表面功能的背后可能还会隐藏着深层问题。

不过annotation确实令人兴奋,终于可以有个优雅的方式能得到代码的元信息了
10 楼 kjhot 2007-07-20  
这种文章也能评为精华,呵呵
9 楼 Tin 2007-07-20  
hideto看看Generic的背后会哭的……擦拭法造成的不一致。
还有Generic超级晦涩的语法……
经常被人用来攻击Java
8 楼 simohayha 2007-07-18  
Generic 我觉得就是个空壳子,类型擦除真是很不好的说。不过貌似这个是为了兼容原来的代码,才这样做的。

不过5里面最吸引人的就是线程部分的改动了。
7 楼 dunsword 2007-07-18  
现在写Tiger有点晚了,都准备换Java6了。
Annotation确实是Java语言的一大进步。另外,Generic 和for循环也能使Java代码简洁很多。Autoboxing与Unboxing用起来方便,但感觉不是很好,不小心容易出问题。
6 楼 yfmine 2007-07-15  
fsword 写道

有的东西确实还不错,例如concurrent部分,有的东西没有什么大用处,例如静态import(远不能达到在开发中提高生产力的效果)和for语法,还有些东西是看起来很美,实际上一用就麻烦不断。

EasyMock2,JUnit4中不用静态import写出的代码会丑陋无比,谁说不能提高生产力了
5 楼 hideto 2007-07-14  
罪过啊罪过,我本将心照Tiger,无奈Tiger照沟渠
其实Tiger的Generic和Annotation算是为Java撑了点脸面了
4 楼 fsword 2007-07-14  
楼主写的rails系列很好阿,怎么又捡起tiger这条破船了?
有的东西确实还不错,例如concurrent部分,有的东西没有什么大用处,例如静态import(远不能达到在开发中提高生产力的效果)和for语法,还有些东西是看起来很美,实际上一用就麻烦不断。
例如范型,它鼓励的是一种严格类型化的开发模式,当初刚出来的时候还是很吸引我的,但是用一用就觉得确实有问题,关键是缺少runtime的类型,而且语法也很不方便,实际上是个鸡肋。
那个covariant return感觉虽好,但是似乎更多的意义在于把java完善了一下(印象中用tiger开发的时候压根就没有考虑这个地方)。
至于anotation,没怎么用过元编程的东西,倒是希望其他人谈谈。
3 楼 hideto 2007-07-14  
七、for/in
抛弃Iterator吧
for(int n : numbes) {
  println(n);
}

for(String s : stringList) {
  println(s);
}

自定义实现Iterable接口或继承现有Collection的类来让你的类可以使用for/in

八、静态Import
Tiger中静态方法也可以import了,enum元素也可以import
import static java.lang.System.out;
import static java.lang.Math.*;
import static xx.xx.xx.SomeEnum.*;


九、java.util.Formatter
让你拥有C的printf()风格的字符串格式化
formatter.format("Remaining account balance: $%.2f", balance);


十、线程
Tiger引进大量全新的并发性功能,更好的支持mutilthread

HashMap的替代者ConcurrentHashMap和ArrayList的替代者CopyOnWriteArrayList让我们用的放心、舒心、省心
在大并发量读取时采用java.util.concurrent包里的一些类会让大家满意

BlockingQueue、Callable、Executor、Semaphore...
2 楼 hideto 2007-07-14  
六、Annotation
Annotation是Java中的metadata

1, Tiger中预定义的三种标准annotation
a, Override
指出某个method覆盖了superclass的method
当你要覆盖的方法名拼写出错时编译不通过
b, Deprecated
指出某个method或element类型的使用是被阻止的
子类将不能覆盖该方法
c, SupressWarnings
关闭class、method、field/variable初始化的编译期警告
比如没有List没有使用Generic,则@SuppressWarnings("unchecked")将去掉编译期警告,这对将程序移植到JDK1.4有意义

2, 自定义annotation
public @interface Marked {}

3, meta-annotation
或者说annotation的annotation
四种标准的meta-annotation全部定义在java.lang.annotaion包中:
a, Target
指定所定义的annotation可以用在哪些程序单元上
如果Target没有指定,则表示该annotation可以使用在任意程序单元上
@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
@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

4, Annotation的反射
我们发现java.lang.Class有许多与Annotation的反射相关的方法,如getAnnotations、isAnnotationpresent
我们可以利用Annotation反射来做许多事情,比如自定义Annotation来做Model对象验证
@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验证
1 楼 hideto 2007-07-14  
二、Generic
不光是类型安全,Parameterized Type作为参数和返回值,Generic是vararg、annotation、enumeration、collection等功能的基石
1, 类型安全
抛弃List、Map,使用List<String>、Map<Integer, String>
给List、Map添加元素或者使用Iterator<T>遍历时,编译期就可以给你检查出类型错误

2, 方法参数和返回值统统加上Type
抛弃List getStringListFromIntegerList(List list)
使用List<String> getgetStringListFromIntegerList(List<Integer> list)

3, 不再需要类型转换
List<String> l = new ArrayList<String>()
String s = l.get(i)

4, 类型通配符
假设一个打印List<T>中元素的方法printList,我们希望任何类型T的List<T>都可以被打印:
public void printList(List<?> list, PrintStream out) throws IOException {
  for (Iterator<?> i = list.iterator(); i.hasNext(); ) {
    out.println(i.next().toString());
  }
}

类型通配符"?"让我们的printList方法更通用

5, 限制类型参数
如果通配符?让我们的参数类型过于广泛,我们还可以限制一下它:
public void printList(List<? extends Number> list, PrintStream out) throws IOException {
  for (Iterator<? extends Number> i = list.iterator(); i.hasNext(); ) {
    out.println(i.next().toString());
  }
}


三、Enumerated类型
Tiger加入了枚举类型,而且是enum是类型安全的
枚举类型入门

四、Autoboxing与Unboxing
Primitive与Wrapper类型可以自动互转了
int、short、char与Integer、Short、Char一视同仁

五、vararg
变长参数让我们的方法更灵活更重用:
public Guitar(String... features)
public static void main(String... args)

相关推荐

    1五上U5Readandwrite.ppt

    通过列举的例子,如 "There is a tiger in the house."(房子里有一只老虎。),我们可以理解 "In" 用于表示在某个空间内。 对于位置关系,PPT还介绍了 "Beside"(在...旁边)、"In front of"(在...前面)、...

    中考英语专题复习冠词张PPT课件.pptx

    1. 表示"一"的概念,例如:"There is a tiger in the zoo."(动物园里有一只老虎。) 2. 表示一类人或事物,如:"A tiger can be dangerous."(老虎可能有危害性。) 3. 表示"每一"的意思,如"We go swimming four ...

    天津市滨海新区七年级英语下册Module8StorytimeUnit3Languageinuse导学案无答案新版外研版20180

    Once upon a time, there lived a tiger in the forest." - 否定句构造:如"我书包里什么也没有。There was nothing in my bag." - 一般疑问句及肯定回答:如"你昨天给父母打电话了吗?—是的。Did you call your ...

    冠词的用法.pdf

    2. 它可以表示"一个"的概念,如"There is a tiger in the zoo."(动物园里有一只老虎)。 3. 表示一类人或事物,比如"A tiger can be dangerous."(老虎可能有危害性)。 4. 表示"某一个",例如"A gentleman wants ...

    5A牛津英语(1~9)单元练习.doc

    对于"Is there a tiger in the garden?",否定回答是"No, there isn't.";对于"Are there any oranges on the table?",肯定回答是"Yes, there are.";对于"Are there any boys in the zoo?",否定回答是"No, there ...

    初中真题+考点中考英语重点单词用法.doc

    例如:“I was terrified of the tiger when I first saw it.” 和 “He is terrified of speaking English in class.” 这里的 `terrified` 比 `afraid` 表达的恐惧感更强烈。 3. **Practice**: - 作为动词,`...

    精品(2021-2022年)资料苏教版五年级上学期英语期末语法复习和练习.doc

    例如:"There is a bed and three bears in the house."(房子里有一张床和三只熊。) 5. 一般疑问句:用 "Be there..." 开头。例如:"Is there a library in our school?"(我们学校有一个图书馆吗?) 6. 特殊...

    初中英语重点单词用法.docx

    可以使用"be terrified of sth./ doing sth.",比如"I was terrified of the tiger when I first saw it."(我第一次看见老虎时吓坏了)和"He is terrified of speaking English in class."(他害怕在课堂上讲英语)...

    初升高复习——冠词讲解和练习.docx

    - the + 形容词的复数形式,表示一家人或夫妇,如 The Browns have lived in this house for many years.(布朗一家在这个房子里住了许多年。) - the + 形容词(部分)表示一类人,如 the rich(富人),the poor...

    新译林版5A Unit1测试题1精选.doc

    1. "在森林里" 是 "in the forest"; 2. "一座漂亮的房子" 对应 "a beautiful house"; 3. "正合适" 翻译为 "just right"; 4. "在她的前面" 是 "in front of her"; 5. "在书桌旁边" 为 "beside the desk"; 6. "太...

    定语从句练习题及答案.pdf

    3. **Many people who had seen the film were afraid to go to the forest when they remembered the scenes _______ people were eaten by the tiger.** - 答案:**D. in which** - 解析:此处scenes作为先行词...

    【广州版】六年级英语上册考试题-(2).pdf

    例如,听句子选择句中含有的信息,涉及了after class, after school, after dinner等时间表达,以及The Line King, The Monkey King, The Tiger King等专有名词,还有Tree Planting Day, Mother's Day, Spring ...

    高中英语选修6第一单元知识点、语法及练习.docx

    动词"aim"可以表示瞄准,如"He aimed his gun at the tiger",也可以表示计划或立志做某事,如"Harry aims at being a doctor."。形容词"aimless"则表示无目标的。 6. **Evident**:"evident"意为明显的或明白的,...

    新冀教版三年级下册小学英语全册单元知识点小结.docx

    此外,还有一些了解词汇,如特殊疑问词what, where,动词swim, fly等,以及农场相关的单词如farmhouse, chicken等。 二、核心句型 本单元强调了几个关键句型的运用: 1. 询问物体是什么的句型:"What’s this?",...

    21春南开大学《大学英语(二)》在线作业参考答案.docx

    9. "We () in the same house when we were students in Britain." 此题考察固定搭配。选项C "used to live" 表示过去常常住在同一所房子里。 10. "We have ____ with the company for 10 tons of steel." 此题考察...

    新目标七年级下册英语教学大纲.doc

    post office, pay phone, across from, next to, in front of, on the right等短语,以及指路用语,如take a walk, have fun, take a taxi, turn left, go straight, between...and..., the way to my house。...

    2018年小学英语毕业模拟卷.doc

    - on holiday in the UK:在英国度假 - 好习惯:good habits - the man next to me:我旁边的那位男士 - 端午节:Dragon Boat Festival - eat lots of delicious food:吃很多美味的食物 - 赏月:enjoy the ...

    外研版小学四年级英语上册期中测试卷.pdf

    - 冠词和介词:涉及到了不定冠词a/an(如“I'm the winner.”)和介词的使用(如“next to the house”)。 4. **单项选择**: - 考察了动词的形式(如cooking vegetables),情态动词的回答(如No, I can't.),...

    2018年秋九年级英语上册Unit6TVprogrammesPeriod2Reading同步练习新版牛津版

    In the film, a wealthy doctor was found dead in his house. - 直到最后一刻,你才会找到答案。You will not find the answer until the very end. - 如果你喜欢破解疑案,你可能会喜欢这部电影。If you enjoy ...

    小学生英语短文背诵.doc

    The strongest power in the world:该短文讲述了人类的潜力和能力,帮助学生了解人生的价值和意义。 Passage 54. Who is the God:该短文讲述了宗教和信仰的重要性,帮助学生了解文化和宗教的多样性。 Passage...

Global site tag (gtag.js) - Google Analytics