- 浏览: 141126 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
nishwd123:
受益匪浅,多谢楼主细心讲解.
Hibernate、Spring和Struts工作原理及使用理由 -
doublelcf:
写得真好。全面,流畅。清晰
Hibernate、Spring和Struts工作原理及使用理由
前两天 面试的时候面试官突然问我jdk1.5之后的一些新特性,让我一时语塞 (啥新特性啊???),回来后于是查找了一下资料,不由让我汗颜 ,发现其实很多都用过只是平时没注意,特此总结一下,在java中,至从jdk1.5之后便出现了一些新特性
包括:泛型(Generic) ,注解,For-Each,自动拆箱和装箱,静态导入,格式化打印,枚举,可变参数...
1.泛型(Generic)和注解在以下两篇文章中我分别详细介绍,在这里我不再详解
jdk1.5-新特性之泛型:http://xiaobing259-163-com.iteye.com/blog/904366
jdk1.5-新特性之注解:http://xiaobing259-163-com.iteye.com/blog/906529
2.增强for循环(for-each)
用for-each更简单:
3.自动装箱拆箱(Autoboxing/unboxing)
例3-1代码
自动装箱拆箱大大方便了基本类型数据和它们封装类地使用。
自动装箱:基本类型自动转为封装类.(int >> Integer)
自动拆箱:封装类自动转为基本类型.(Integer >> int)
在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,
现在自动转换机制解决了我 们的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换(装箱)成Integer.
Integer b = new Integer(2);
c.add(b + 2);
这里Integer先自动转换(拆箱)为int进行加法运算,然后int再次转换(装箱)为Integer.
4.静态导入(static import)
要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可调用,使用这些静态成员无需再给出他们的类名。
5.格式化打印(formatted print)
C语言中printf()风格的格式化输出。
这里只举一个thinking in java的一个例子:
例5-1代码
可以看到,format和printf是等价的,他们只需要一个简单的格式化字符串,加上一串参数即可,每个参数对应一个格式修饰符
6.枚举(Enums)
JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。
当每一类型可取值范围是有限的时候,可以使用枚举,例如每个学生登记只能用ABCD表示,如果直接用E的话,那么编译不会出错,但是却不符合输入要求,而使用枚举增加程序的易读性和健壮性?
Java代码
7.可变长参数(varargs)
可变参数使程序员可以声明一个接受可变数目参数的方法。
注意,可变参数必须是函数声明中的最后一个参数。
假设我们要写一个简单的方法打印一些对象,在jdk1.5以前我们需要重载多个方法
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
…
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
下面是网上一个 唐僧 给 悟空 将佛经的例子
Java代码
包括:泛型(Generic) ,注解,For-Each,自动拆箱和装箱,静态导入,格式化打印,枚举,可变参数...
1.泛型(Generic)和注解在以下两篇文章中我分别详细介绍,在这里我不再详解
jdk1.5-新特性之泛型:http://xiaobing259-163-com.iteye.com/blog/904366
jdk1.5-新特性之注解:http://xiaobing259-163-com.iteye.com/blog/906529
2.增强for循环(for-each)
用Iterator实现如下: import java.util.ArrayList; import java.util.Collection; public class GenericTest { public static void main(String[] args) { Collection c = new ArrayList(); c.add("aa"); c.add("bb"); for(Iterator i=c.iterator(); i.hasNext();){ String s= (String)i.next(); System.out.println(s); } } } 运行结果: aa bb
用for-each更简单:
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
3.自动装箱拆箱(Autoboxing/unboxing)
例3-1代码
自动装箱拆箱大大方便了基本类型数据和它们封装类地使用。
自动装箱:基本类型自动转为封装类.(int >> Integer)
自动拆箱:封装类自动转为基本类型.(Integer >> int)
在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,
现在自动转换机制解决了我 们的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换(装箱)成Integer.
Integer b = new Integer(2);
c.add(b + 2);
这里Integer先自动转换(拆箱)为int进行加法运算,然后int再次转换(装箱)为Integer.
public class T { public static void main(String[] args) { Integer i1 = 128; Integer i2 = 128; int i3 = 128; int i4 = 128; Integer i5 = 127; Integer i6 = 127; Long long1 = 128L; Long long2 = 128L; long long3 = 128L; long long4 = 128L; long long5 = -128L; long long6 = -128L; //-128 ~ 127之间数值装箱时会共享内存副本, 超过这个范围,则不会共享引用,即对象地址将不同 System.out.println(i1 == i2); //实质是比较两个不同引用 false System.out.println(i5 == i6); //实质是比较两个相同(共享)引用true System.out.println(i1 == i3); //先将i1拆箱,然后比较基本类型 true System.out.println(i1.equals(i4)); //先将i4装箱,然后比较基本类型 true System.out.println(long1 == long2);//两个引用不同 false System.out.println(long5 == long6);//共用副本 true System.out.println(long1 == long3);//long1先拆箱, 在比较 true System.out.println(long2.equals(long4));//long4先装箱, 再equals, true } }
4.静态导入(static import)
要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可调用,使用这些静态成员无需再给出他们的类名。
//静态导入Math的所有方法 import static java.lang.Math.*; public class StaticImportTest { public static void main(String[] args){ //类中生成随机数数可以直接使用静态引入的random方法了,而不用Math.random()这样调用了 System.out.println(random()); 又: System.out.println(max(3, 6));//无需写Math.max(); r = sin(PI * 2); //无需再写r = Math.sin(Math.PI); } }
5.格式化打印(formatted print)
C语言中printf()风格的格式化输出。
这里只举一个thinking in java的一个例子:
例5-1代码
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.枚举(Enums)
JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。
当每一类型可取值范围是有限的时候,可以使用枚举,例如每个学生登记只能用ABCD表示,如果直接用E的话,那么编译不会出错,但是却不符合输入要求,而使用枚举增加程序的易读性和健壮性?
Java代码
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)
可变参数使程序员可以声明一个接受可变数目参数的方法。
注意,可变参数必须是函数声明中的最后一个参数。
假设我们要写一个简单的方法打印一些对象,在jdk1.5以前我们需要重载多个方法
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
…
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
下面是网上一个 唐僧 给 悟空 将佛经的例子
Java代码
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("悟空", "不同的人是人他妈生的,", "妖是妖他妈生的,"); } } 运行结果: 悟空: 人和妖精都是妈生的, 悟空: 不同的是,人是人他妈生的,妖是妖他妈生的,
发表评论
-
Java中serialVersionUID
2012-11-26 13:27 868Java中serialVersionUID serialV ... -
ArrayList数组对象排序
2012-11-13 21:53 1449POJO package com.test.compara ... -
Java堆和栈的区别 equals 和 == 的区别
2012-11-07 12:10 832Java堆和栈的区别 equals ... -
Cookie,Session,Application用法及区别
2012-05-22 15:20 2847一.Cookie 首先,Cookie的作用域为 ... -
static 的用法
2012-05-22 13:58 915static 代码块应用 package com.ut ... -
finally解析
2012-05-22 13:47 968一.finally 中的语句什么 ... -
java 断言 assert 初步使用:断言开启、断言使用
2012-05-04 20:43 1558java 断言 assert 初步使用:断言开启、断言使用 ... -
java 定时任务实现
2012-04-05 22:41 3692java.util.Timer定时器,实际上是个线程,定时调度 ... -
Servlet上传文件,commons-fileupload
2012-03-02 11:17 4842Servlet上传文件,commons-fil ... -
堆与栈的区别
2012-02-24 11:58 962堆和栈的区别 全局,静态,new产生的变量都在堆中动态分 ... -
在Java中用单例模式有什么好处
2012-01-30 19:46 1342Java Singleton模式主要作 ... -
JAVA单例模式的几种实现方法
2012-01-30 19:41 9051 饿汉式单例类.在类初始化时,已经自行实例化 clas ... -
jsp中的注释<!-- -->内容中不能包含--
2011-11-23 17:45 923jsp中的注释<!-- -->内容中不能包含-- ... -
ibatis和hibernate的区别
2011-08-15 13:34 651ibatis和hibernate的区别 ... -
equals和"=="浅析
2011-02-24 22:30 823==操作符专门用来比较 ... -
java中的重写与重载
2011-02-21 13:59 903方法的重写Overriding和重载Overloading是J ... -
MyEclipse生成WAR包并在Tomcat下部署发布
2011-02-18 22:56 2288右键选中项目,选择export。 然后选择J2EE-> ... -
JPA详解
2011-02-17 08:54 2040JPA全称Java Persistence API.JPA通过 ... -
comparable和comparator的区别
2011-02-16 17:59 1233两者区别: 1) Comparable接 ... -
Freemarker网站静态化实现
2011-02-15 14:26 1073转载自http://www.iteye.com/topic/4 ...
相关推荐
总结来说,JDK 1.5中引入的一系列新特性极大地改善了Java语言的灵活性和安全性,同时也使得开发者的编程工作变得更加高效和简便。这些特性不仅提高了代码的质量,还增强了程序的可维护性和可读性。
在Java编程语言中,线程并发和线程池是多任务执行的核心概念,尤其是在JDK 1.5及以后的版本中得到了显著增强。线程并发允许程序同时执行多个任务,提高了程序的效率和响应性。线程池是管理线程资源的有效方式,通过...
Annotation(注解)是Java编程语言的一个重要特性,自JDK 1.5引入以来,逐渐成为编写可维护和可扩展代码的关键工具。注解提供了一种方式,使得程序员可以在代码中添加元数据(metadata),这些数据不直接影响代码...
虽然在JDK 9及以后的版本中,sun包被标记为非公开和不推荐使用的,但在早期版本如JDK 1.5中,它对开发者具有很高的参考价值。 1. **JDK 1.5 版本特点** JDK 1.5,也被称为Java SE 5.0,引入了许多重要的语言特性,...
3. `CLASSPATH`:虽然在JDK 1.5之后,Java引入了模块化系统,使得默认的类加载机制更加智能,但为了兼容旧代码,有时仍需配置`CLASSPATH`。一般情况下,无需特别设置,但若有必要,可以添加JRE的lib目录,如`.;%JAVA...
- `CLASSPATH`:一般无需手动设置,JDK1.5之后,默认使用`.`作为当前目录,会自动查找。 4. **验证安装**:打开命令行,输入`java -version`,如果显示JDK1.7的信息,表示安装成功。 三、注意事项 1. **兼容性**...
### Java遍历特例知识点...无论是传统的迭代器还是JDK 1.5之后引入的增强for循环,都为开发者提供了便利的工具来高效地处理键值对数据。此外,通过`TreeMap`还可以实现自动排序的功能,这对于特定的应用场景非常有用。
总结来说,Java多线程与并发库的高级应用,既包括了传统的多线程编程技术,也包含了JDK 1.5之后引入的高级并发工具和特性。掌握这些知识点对于任何想要在Java编程领域深入发展的开发者来说,都是非常必要的。
- **jdk1.5之后的三大版本**:自JDK 1.5以来,重要的三个版本包括: - **JDK 1.6**:引入了并发工具类如`ConcurrentHashMap`等改进。 - **JDK 7**:增加了多核心处理器支持,引入了`try-with-resources`语句等。 ...
- **JDK版本**: JDK 1.5(也称为Java 5)是Java的一个重要版本,引入了许多新特性,如泛型、枚举、可变参数等。 - **兼容性**: - 高版本的JDK可以运行由低版本JDK编译的程序。 - 低版本的JDK无法运行由高版本JDK...
- 要求:JDK 1.5及以上版本,推荐使用JDK 6.x。 - 下载地址:[http://java.sun.com/javase/downloads/index.jsp](http://java.sun.com/javase/downloads/index.jsp) - 安装指导:下载后,根据向导完成安装过程。...
此外,CLASSPATH变量用于指定类加载路径,但自JDK1.5起,可不配置此变量,JVM会默认在当前目录下寻找类文件。 编写第一个Java程序是每个Java学习者的重要里程碑。创建一个包含主函数的.java文件后,编写代码并使用...
总结来说,J2EE开发环境的搭建主要包括选择和配置开发工具(如Eclipse和MyEclipse)、安装JDK并设置环境变量、以及选择和配置Web应用服务器(如Tomcat)。这个环境为Java开发者提供了高效、便捷的开发体验,使得构建...
在使用GEF进行图形编辑时,建议使用JDK 1.5或以上版本,因为较低版本的JDK可能无法完全支持EMF处理XML模型所需的所有功能。EMF是GEF中用于模型管理和元数据定义的关键组件,确保使用兼容的JDK版本可以避免潜在的运行...
Java中的枚举(enum)是自JDK 1.5版本引入的一种强大的类型,它不仅提供了定义常量的简洁方式,还能实现许多高级功能。以下将详细介绍7种常见的Java枚举用法: 1. **常量用法**: 在JDK 1.5之前,我们通常使用`...
Java反射机制在JDK 1.1版本中就已经引入,但在JDK 1.5之后得到了进一步增强和完善,增加了泛型支持等功能,使得反射更加安全和强大。 #### 三、Java反射机制的核心概念与应用 1. **核心概念** - **Class对象**:...
需要注意的是,题目还规定了一些其他的要求,如不使用`package`语句,源程序只能使用JDK1.5及以下版本允许的语法,不能使用1.6或更高版本的特性。这个代码示例遵循了这一要求,没有引入1.6以后的语法。 总结起来,...
- 2004年:发布了Java 5(即JDK 1.5),这一版本带来了泛型、枚举、增强for循环等新特性。 - 2006年:发布了Java 6(即JDK 1.6),进一步优化了性能,并添加了一些新的API。 - **Java体系** - **Java SE ...