`
hideto
  • 浏览: 2655539 次
  • 性别: 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)

相关推荐

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本116.0.5808.0)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom116.0.5808.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver116.0.5808.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    2024消费趋势报告.pdf

    2024消费趋势报告.pdf

    PCB的电磁兼容设计+电子设计领域

    1、EMC由EMI和EMS组成 2、EMS常见的整改措施 3、干扰=共模干扰+差模干扰 4、元器件的摆放 5、缝隙影响

    给排水施工图全套.xdw.pdf

    给排水施工图全套.xdw

    基于微信小程序的旅游出行必备(后端接口ssm框架实现)-毕设项目

    毕业设计基于微信小程序的旅游出行必备(后端接口ssm框架实现)-毕设项目.zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 项目介绍: 旅游出行必备项目, 前端为微信小程序,后端接口为ssm框架实现,项目包含源码、数据库毕业设计基于微信小程序的旅游出行必备(后端接口ssm框架实现)-毕设项目.zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 项目主要功能: 该项目是一个基于微信小程序的旅游出行应用,结合后端SSM(Spring MVC + Spring + MyBatis)框架提供服务。主要功能包括行程规划、景点信息查询、在线预订等,旨在为用户提供便捷的旅游出行体验。特点在于利用微信小程序的便捷性,实现即用即走,同时通过后端强大的数据处理能力保证服务稳定性。技术栈涵盖微信小程序开发、Java SSM框架、数据库管理等,适合学习和作为毕业设计参考。

    MC/00000000000000000000000000

    Want to play MC but do not want to buy can download to have a look。 It's very interested ------------------------------------------------------------------------------------------------- ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

    2024嵌入式面试资料SPI子系统

    2024嵌入式面试资料SPI子系统提取方式是百度网盘分享地址

    电子迎宾器和声光控照明开关multsim仿真和课设报告

    设计报告 ——题目名称:电子迎宾器 ——题目名称: 声光控照明开关

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5789.0)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5789.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5789.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5785.0)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5785.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5785.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    navicat下载、安装、配置.zip

    【navicat】下载、安装、配置

    2024嵌入式大厂面经东华软件2015年应届实习生毕业生招聘职位-公司

    2024嵌入式大厂面经东华软件2015年应届实习生毕业生招聘职位-公司提取方式是百度网盘分享地址

    C++ 高性能爬虫代码,带UI

    C++ 高性能爬虫代码,带UI

    2024年铁基非晶合金行业分析报告.pptx

    行业报告

    2024嵌入式大厂面经朝歌宽带笔试题

    2024嵌入式大厂面经朝歌宽带笔试题提取方式是百度网盘分享地址

    AutoRuns 查看设置开机自动加载程序、病毒木马及恶意插件程序等

    Autoruns for Windows 是 Mark Russinovich 和 Bryce Cogswell 开发的一款软件,它能用于显示在 Windows启动或登录时自动运行的程序,并且允许用户有选择地禁用或删除它们,例如那些在“启动”文件夹和注册表相关键中的程序。此外,Autoruns还可以修改包括:Windows 资源管理器的 Shell 扩展(如右键弹出菜单)、IE浏览器插件(如工具栏扩展)、系统服务和设备驱动程序、计划任务等多种不同的自启动程序。 Autoruns作为Sysinternals Suite(故障诊断工具套装)的一部分,可运行于 Windows XP、Windows Server 2003 和更高版本的 Windows 操作系统。该软件还包括一个相同功能的命令行版本Autorunsc,可以把结果报表以 CSV 格式输出。

    2024年市场展望与薪酬报告发布-randstad.pdf

    2024年市场展望与薪酬报告发布-randstad.pdf

    AIGC 之 AI 绘画:技术与应用双突破,生产力变革在即

    AIGC 之 AI 绘画:技术与应用双突破,生产力变革在即

    智能车竞赛介绍.docx

    智能车竞赛介绍.docx

    Android开发基本知识总结,Android课件pdf

    1.什么是Android? 移动设备(常常指手机mobile)的操作系统,由google公司出品,是免费的,最早是基于Linux平台的:目前已经推出的Android3.0是平板电脑上的操作系统。 其它的手机操作系统有:iPhone系统等。 手机厂商三星(Samsung,宏达电(HTC),摩托罗拉(Motorola),华硕,索尼,Garmin等都支持iPhone系统。 Android系统功能自定义用户界面,支持蓝牙,多点触摸,具有导航功能和语音识别功能结合了google 地图。Android 软件开发工具SDK4.0 Android系统特点:虚拟键盘,以WebKit为核心的WebView组件,可以使用HTML,javascript 等。

Global site tag (gtag.js) - Google Analytics