- 浏览: 1230858 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
以下两文:
http://heaven-arch.iteye.com/blog/165452
http://www.iteye.com/topic/489394
总结如下:
1.泛型(Generic) 2.增强for循环(For-Each循环) 3.自动装箱与拆箱(Autoboxing/unboxing) 4.静态导入(static import) 5.格式化打印(formatted print) 6.枚举(Enum) 7.可变参数(varargs)8.注解annotation
面试的时候面试官问我jdk1.5的新特性,居然只回答上两个(泛型,增强for循环),回来一查,其实都接触过,而且好几个特性自己还经常用。
下面就总结一下:1.泛型(Generic) 2.增强for循环(For-Each循环) 3.自动装箱与拆箱(Autoboxing/unboxing) 4.静态导入(static import) 5.格式化打印(formatted print) 6.枚举(Enum) 7.可变参数(varargs)
1、泛型(Generic)
可以在编译的时候检测出类型错误,编译后和没有使用泛型的效果是相同的,但是使用泛型可以让你在编译时就发现错误,例如:
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- public class GenericTest {
- public static void main(String[] args) {
- Collection c = new ArrayList();
- c.add(new Integer(1));
- c.add("123");
- for(Iterator i=c.iterator();i.hasNext();){
- String s = (String) i.next();
- System.out.println(s);
- }
- }
- }
- 运行结果:
- Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
- at GenericTest.main(GenericTest.java:12)
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class GenericTest { public static void main(String[] args) { Collection c = new ArrayList(); c.add(new Integer(1)); c.add("123"); for(Iterator i=c.iterator();i.hasNext();){ String s = (String) i.next(); System.out.println(s); } } } 运行结果: Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at GenericTest.main(GenericTest.java:12)
Collection应该只存放String对象,但是我们“不小心”添加了一个Integer类型的对象,编译正常进行,程序在运行时才发现错误。
下面是使用了泛型后的程序
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
- public class GenericTest {
- public static void main(String[] args) {
- Collection<String> c = new ArrayList<String>();
- c.add(new Integer(1));
- c.add("123");
- for(Iterator<String> i=c.iterator();i.hasNext();){
- String s = i.next();
- System.out.println(s);
- }
- }
- }
- 运行结果
- D:\test>javac GenericTest.java
- GenericTest.java:8: 无法将 java.util.Collection<java.lang.String> 中的 add(java.lang.String) 应用于 (java.lang.Integer)
- c.add(new Integer(1));
- ^
- 1 错误
- D:\test>
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class GenericTest { public static void main(String[] args) { Collection<String> c = new ArrayList<String>(); c.add(new Integer(1)); c.add("123"); for(Iterator<String> i=c.iterator();i.hasNext();){ String s = i.next(); System.out.println(s); } } } 运行结果 D:\test>javac GenericTest.java GenericTest.java:8: 无法将 java.util.Collection<java.lang.String> 中的 add(java.lang.String) 应用于 (java.lang.Integer) c.add(new Integer(1)); ^ 1 错误 D:\test>
使用了泛型之后在编译时就发现了错误,可以增强程序的健壮性,而其i.next();也不用使用强制类型转换了。
2、增强for循环(For-Each)
For-Each的内部是用Iterator实现的,但是使用起来更简单,例如使用For-Each实现1-2如下
- import java.util.ArrayList;
- import java.util.Collection;
- public class GenericTest {
- public static void main(String[] args) {
- Collection<String> c = new ArrayList<String>();
- c.add("aa");
- c.add("bb");
- for(String s:c){
- System.out.println(s);
- }
- }
- }
- 运行结果:
- aa
- bb
import java.util.ArrayList; import java.util.Collection; public class GenericTest { public static void main(String[] args) { Collection<String> c = new ArrayList<String>(); c.add("aa"); c.add("bb"); for(String s:c){ System.out.println(s); } } } 运行结果: aa bb
比Integer方便多了吧?可以使程序员更加注重逻辑,而不是代码本身。
3、自动装箱拆箱(Autoboxing/unboxing)
- Integer i = new Integer(2);
- //i自动拆箱为int类型
- System.out.println(i==2);
- //3自动装箱为Integer类型
- System.out.println(i.equals(3));
Integer i = new Integer(2); //i自动拆箱为int类型 System.out.println(i==2); //3自动装箱为Integer类型 System.out.println(i.equals(3));
4、静态导入(static import)
- //静态导入Math的random方法
- import static java.lang.Math.random;
- public class StaticImportTest {
- public static void main(String[] args){
- //类中生成随机数数可以直接使用静态引入的random方法了,而不用Math.random()这样调用了
- System.out.println(random());
- }
- }
//静态导入Math的random方法 import static java.lang.Math.random; public class StaticImportTest { public static void main(String[] args){ //类中生成随机数数可以直接使用静态引入的random方法了,而不用Math.random()这样调用了 System.out.println(random()); } }
5、格式化打印(formatted print)
C语言中printf()风格的格式化输出。
这里只举一个thinking in java的一个例子:
- public class SimpleFormat {
- public static void main(String[] args) {
- int x = 5;
- double y = 5.332542;
- //The old way
- System.out.println("Row 1: ["+x+" "+y+"]");
- //The new way
- System.out.format("Row 1: [%d %f]\n", x,y);
- //or
- System.out.printf("Row 1: [%d %f]\n", x, y);
- }
- }
- 运行结果:
- Row 1: [5 5.332542]
- Row 1: [5 5.332542]
- Row 1: [5 5.332542]
public class SimpleFormat { public static void main(String[] args) { int x = 5; double y = 5.332542; //The old way System.out.println("Row 1: ["+x+" "+y+"]"); //The new way System.out.format("Row 1: [%d %f]\n", x,y); //or System.out.printf("Row 1: [%d %f]\n", x, y); } } 运行结果: Row 1: [5 5.332542] Row 1: [5 5.332542] Row 1: [5 5.332542]
可以看到,format和printf是等价的,他们只需要一个简单的格式化字符串,加上一串参数即可,每个参数对应一个格式修饰符
6、枚举(Enum)
当每一类型可取值范围是有限的时候,可以使用枚举,例如每个学生登记只能用ABCD表示,如果直接用E的话,那么编译不会出错,但是却不符合输入要求,而使用枚举增加程序的易读性和健壮性?
- public class GradeTest {
- public static void main(String[] args) {
- Student stu = new Student();
- stu.setName("wasw100");
- stu.setGrade(Grade.A);
- //输出学生信息
- System.out.println(stu);
- }
- }
- /**
- * 枚举:Grader 学生考试等级
- * @author wasw100
- */
- enum Grade{
- A,B,C,D
- }
- class Student {
- private String name;
- private Grade grade;
- //重写toString()方法
- public String toString(){
- return "name:+"+name+"\ngrader:"+grade;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Grade getGrade() {
- return grade;
- }
- public void setGrade(Grade grade) {
- this.grade = grade;
- }
- }
public class GradeTest { public static void main(String[] args) { Student stu = new Student(); stu.setName("wasw100"); stu.setGrade(Grade.A); //输出学生信息 System.out.println(stu); } } /** * 枚举:Grader 学生考试等级 * @author wasw100 */ enum Grade{ A,B,C,D } class Student { private String name; private Grade grade; //重写toString()方法 public String toString(){ return "name:+"+name+"\ngrader:"+grade; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } }
7、可变长参数(varargs)
方法的参数是不固定的我们一般会使用重载或者使用数组参数。重载需要些更多写更多的方法,数组需要在使用时先声明。
可能参数是一个不错的解决方案。
下面是网上一个 唐僧 给 悟空 将佛经的例子
- public class VarargsTest {
- public void speak(String name, Object... arguments) {
- System.out.print(name+": ");
- for (Object object : arguments) {
- System.out.print(object);
- }
- System.out.println();
- }
- public static void main(String[] args) {
- VarargsTest vt = new VarargsTest();
- vt.speak("悟空", "人和妖精都是妈生的,");
- vt.speak("悟空", "不同的人是人他妈生的,", "妖是妖他妈生的,");
- }
- }
- 运行结果:
- 悟空: 人和妖精都是妈生的,
- 悟空: 不同的人是人他妈生的,妖是妖他妈生的,
public class VarargsTest { public void speak(String name, Object... arguments) { System.out.print(name+": "); for (Object object : arguments) { System.out.print(object); } System.out.println(); } public static void main(String[] args) { VarargsTest vt = new VarargsTest(); vt.speak("悟空", "人和妖精都是妈生的,"); vt.speak("悟空", "不同的人是人他妈生的,", "妖是妖他妈生的,"); } } 运行结果: 悟空: 人和妖精都是妈生的, 悟空: 不同的人是人他妈生的,妖是妖他妈生的,
可变长参数只能作为最后一个参数。
发表评论
-
JVM内存管理及性能调优(内存溢出、内存泄漏)
2015-09-02 07:14 693JAVA内存管理(内存溢出、内存泄漏)相关参考: JA ... -
JAVA可变参数对重载的影响
2014-01-27 15:28 926package com.lwf.test; publi ... -
有关String类创建几个对象的问题
2013-07-09 23:18 1329试题一: String s = new String(& ... -
JDK1.5下实现JDK1.6的Arrays.copyOfRange() 方法
2012-08-29 10:59 1757public static void test(){ i ... -
JAVA四舍五入的处理
2012-02-11 10:47 1011如下,保留两个小数位 double f = 3 ... -
Comparator实现排序
2011-11-16 01:23 1235转自:Comparator实现排序 在java.util包 ... -
JAVA定时器使用
2011-08-19 11:05 773http://hualong.iteye.com/blog/5 ... -
JDK5.0 Annotation学习笔记
2011-07-26 22:48 745http://linliangyi2007.iteye.com ... -
JAVA CP命令
2010-12-31 11:51 10289java -cp .;c:\dir1\lib.jar Test ... -
JAVA面试题150例
2010-05-19 11:44 2050一、Java基础方面 1、作用域public,priva ... -
《thinking in java》第四章:初始化与清理三
2010-05-19 00:21 776http://quicker.iteye.com/blog/5 ... -
JAVA编程思想第四版完整下载地址
2010-05-18 18:35 1258http://hi.baidu.com/yang1101190 ... -
JAVA多线程学习一
2010-04-13 17:21 924http://renyangok.iteye.com/blog ... -
JAVA常用误区整理
2008-01-09 13:12 9061、 float f=1.3;是不对的,编译时会出错,java ... -
try与finally块中return的问题
2008-12-05 14:37 1247针对以下情况进行测试: 情况1:try{} catch( ... -
简单克隆与深度克隆的思考
2008-12-19 16:44 1026白话简单克隆和深度克隆一文 http://blog.csd ... -
一道面试题引发的思考之:类的初始化
2008-12-29 16:23 711本人曾写过JAVA基础方面的blog,也是针对类的初始化的, ... -
JAVA基础学习篇----对象串行化及Transient关键字的使用
2009-01-08 18:07 0http://blog.csdn.net/scruffybea ... -
!JAVA学习提高之---- JAVA日期格式化及相关操作
2009-01-13 17:02 791http://blog.csdn.net/gubaohua/a ... -
JAVA学习提高之---- List toArray学到的
2009-01-19 16:34 681最近结合一个事例掌握到ArrayList 的方法toArray ...
相关推荐
JDK 1.5 是Java发展历程中的一个重要里程碑,它引入了一系列新特性,极大地提升了编程的效率和代码的可读性。以下将详细讲解其中的一些关键特性及其应用。 1. 类型安全的枚举(Type-Safe Enumerations) 在JDK 1.5...
标题:“jdk1.5 windows版本 64位” 描述:“jdk1.5 windows版本 64位,Java开发依赖环境” 标签:“windows” 在这个主题中,我们聚焦的是Oracle JDK 1.5(也被称为Java Development Kit,简称JDK)在Windows...
综上所述,JDK1.5是Java发展历程中的一个重要里程碑,它的特性改进了编程体验,提升了代码质量和运行效率。而64位Windows版的JDK1.5,则是针对Windows用户的一种优化选择,满足了开发者在64位环境下的需求。文件"jdk...
然而,对于某些老旧的应用或者特定环境的需求,JDK1.5仍然是必要的。 在Linux系统上安装JDK1.5的过程与现代版本略有不同,主要依赖于RPM(Red Hat Package Manager)包管理器。`jdk-1_5_0_22-linux-amd64.rpm`文件...
### 详细描述 JDK 1.5 新特性:泛型 #### 一、引言 Java 5.0(也称为 JDK 1.5)引入了一系列重要的新特性,这些特性极大地提高了开发者的编程效率和代码质量。其中最显著的特性之一便是泛型(Generics)。本文将...
JDK1.5,也称为Java 5.0,是一个重要的版本,它引入了许多新的特性和改进,对Java语言的发展产生了深远影响。 一、泛型(Generics) 在Java 5.0中,最重要的特性之一就是泛型的引入。泛型允许开发者在定义类、接口...
### JDK 1.5 新特性介绍 #### 一、JDK 概述 JDK(Java Development Kit),即Java开发工具包,是用于编写Java applet和应用程序的主要平台。它包含了一个位于操作系统之上、用于执行Java applet和应用程序的运行...
对于Java开发者来说,理解和掌握JDK1.5的这些关键特性至关重要,因为它们不仅在JDK1.5中首次出现,也成为了后续版本的基础。通过深入学习和实践,开发者能够写出更安全、更高效、更易于维护的代码。
** JDK 1.5,也称为Java SE 5.0,是Java开发工具包的一个重要版本,它引入了许多显著的新特性和改进,极大地提升了Java语言的效率和可维护性。以下是一些主要的新特性及其详细解释:** 1. **泛型(Generics)** ...
JDK 1.5在2004年发布,引入了许多重要的新特性,如: 1. **Generics(泛型)**:泛型允许在定义类、接口和方法时指定类型参数,提高了代码的类型安全性和重用性。 2. **Autoboxing/Unboxing(自动装箱/拆箱)**:...
泛型是JDK 1.5中最显著的新特性之一,它允许在类、接口和方法中定义类型参数,增强了类型安全,减少了强制类型转换,同时提高了代码的可读性和复用性。例如,ArrayList<E> 表示一个可以存储任意类型E的列表。 2. *...
总之,Linux下的JDK1.5是Java开发和Web应用程序运行的基础,熟悉其安装、配置及主要特性的使用,对于任何Java开发者来说都是至关重要的。虽然现在已经有了更新的JDK版本,但理解JDK1.5的基本知识仍然是提升编程技能...
在压缩包"IBMJDK1.5linux.zip"中,主要包含的是IBM JDK 1.5的安装文件和相关文档。安装完成后,开发者可以通过设置环境变量(如JAVA_HOME、PATH)来使用这个JDK。通常,这个JDK会包含Java编译器(javac)、Java解释...
JDK1.5的主要新特性包括: 1. **泛型(Generics)**:泛型允许在类、接口和方法定义中使用类型参数,增强了类型安全,减少了强制类型转换的需要。它使代码更易于理解,减少了错误的可能性。 2. **自动装箱与拆箱...
变量注解(annotations)是JDK1.5引入的新特性,它允许在代码中添加元数据,这些元数据可以用于编译器检查、代码生成、运行时处理等。例如,@Override注解确保方法是重写父类的方法,@Deprecated则标记不再推荐使用...
总的来说,JDK 1.5(Java 5.0)的新特性极大地提高了Java的生产力和代码质量。从泛型到增强的for循环,再到注解和枚举,这些改进都让Java开发者能够编写出更安全、更易于维护的代码。在实际开发中,理解并充分利用...
总的来说,JDK 1.5是一个里程碑式的版本,它的许多新特性如泛型、枚举、注解和自动装箱/拆箱等,极大地提高了Java开发的效率和代码质量,也为后续版本奠定了坚实的基础。如果你习惯了使用JDK 1.7,但对JDK 1.5有特殊...
其次,自动装箱与拆箱也是JDK1.5引入的新特性。这使得基本数据类型(如int、double)与它们对应的包装类(如Integer、Double)之间可以无缝切换,简化了代码编写。例如,现在可以直接将一个int值赋给Integer变量,...
JDK1.5,也被称为Java SE 5.0,是Oracle公司于2004年发布的一个重大更新,带来了许多重要的新特性、改进和优化。以下是对这个版本的一些关键知识点的详细解释: 1. **泛型(Generics)**:JDK1.5引入了泛型,使得...
JDK 1.5,也称为Java 5.0,是一个重要的里程碑,因为它引入了许多新的特性和改进,对于Java开发者来说具有深远的影响。 1. 泛型(Generics): JDK 1.5引入了泛型,允许在类、接口和方法中定义类型参数,增强了代码...