- 浏览: 184471 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (103)
- Java综合 (19)
- java模式 (1)
- java 包详解 (8)
- 需要阅读的书目 (1)
- Json (1)
- MySQL (2)
- zkoss (2)
- svn (1)
- JavaScript (1)
- html (1)
- 试题集锦 (6)
- 试题集锦_poj (1)
- Vim 操作 (2)
- Linux 操作 (5)
- NS2 学习 (2)
- 网络 (4)
- c/c++ (7)
- WNS - Wired Network Simulator (1)
- 网络信息体系结构 (16)
- MIPS (1)
- Java图形化编程 (2)
- 数据结构 (1)
- 数学 (3)
- 爬虫 (1)
- 搜索引擎 (1)
- NetFPGA (1)
- Directshow (1)
- 小软件 (2)
- FFMPEG (1)
- Windows Socket 网络编程 (5)
- Git (1)
- IntelliJ IDEA (0)
- Plone (1)
- Python (1)
最新评论
-
不要叫我杨过:
受教了,高手
Heritrix架构分析 -
springaop_springmvc:
apache lucene开源框架demo使用实例教程源代码下 ...
Lucene 3.0.2 使用入门 -
zxw961346704:
值得学习的算法
Java 计算器 -
medicine:
Thread.sleep(1000); 会使线程进入 TIM ...
Java.lang.Thread 和 Java.lang.ThreadGroup -
tangzlboy:
嗯,不错!收藏。
Java 入门
1.静态导入方法
2.新增加的for循环
3.枚举 Enum
4.反射 Reflect
5.注解 Annotation
6.泛型
7.可变参数(Vararg)
8.格式化输入输出
不太喜欢c的输出格式,没有进行尝试。
package com.java.new_features_jdk5; /** * * 一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....ClassName.*; * 这里的多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。 * 然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。 * 这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(...);就可以将其写入一个静态方法print(...),在使用时直接print(...)就可以了。 * 但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便。 * @author yuahan * */ public class _Static_Import { public static void main(String[] args) { } }
2.新增加的for循环
package com.java.new_features_jdk5; import java.util.ArrayList; import java.util.List; /** * 增强的for循环,可以使用在数组和容器中 * @author yuahan * */ public class _For { @SuppressWarnings("serial") public static void main(String[] args) { int[] array = {1,2,3,4,5,6,7,8,9,10}; for(int num : array){ System.out.print(num + " "); } System.out.println(); List<Integer> list = new ArrayList<Integer>(){{ this.add(1); this.add(2); this.add(3); this.add(4); this.add(5); this.add(6); this.add(7); this.add(8); this.add(9); this.add(10); }}; for(int num : list){ System.out.print(num + " "); } } }
3.枚举 Enum
package com.java.new_features_jdk5; /** * * 你可以将枚举类型视为特殊的类,因此几乎可以像创建普通类那样创建枚举。 * 枚举类型有附加的特性,有EnumMap和EnumSet两个类。实例化方法中都需要传入枚举类型的类类型,如: * EnumSet<_Enum> set = EnumSet.noneOf(_Enum.class); EnumMap<_Enum,String> map = new EnumMap<_Enum,String>(_Enum.class); 枚举可以有自己的构造方法,不过构造方法只能私有,这样外部是不能构造出新的枚举中的实例,而只是调用其中的实例。 * @author yuahan * */ public enum _Enum { Better(90), Good(80), Ok(70), Bad(60), Worse; private int value; private _Enum() { this.value = 30; } private _Enum(int value) { this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public static _Enum[] getEnumValues(){ return _Enum.values(); } public static void _ValuesOf(){ // _Enum test = _Enum.valueOf("test");//error // System.out.println(test); _Enum Better = _Enum.valueOf("Better"); System.out.println(Better); } public static void main(String[] args) { for(_Enum mark : _Enum.getEnumValues()){ switch(mark){ case Better: System.out.println(_Enum.Better); break; case Good: System.out.println(_Enum.Good); break; case Ok: System.out.println(_Enum.Ok); break; case Bad: System.out.println(_Enum.Bad); break; case Worse: System.out.println(_Enum.Worse); break; } } _Enum._ValuesOf(); System.out.println(_Enum.Better.getValue()); } }
4.反射 Reflect
package com.java.new_features_jdk5; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; /** * Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。 * Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性 * JavaDoc 中对每个类和其中的方法有非常详细介绍。主要有: * Class ------- java.lang * Package ------- java.lang * * Array * Field * Method * Modifier * Constructor * @author yuahan * */ public class _Reflect { private int id; private String name; private String[] hobbies; public _Reflect(){} public _Reflect(int id){ this.id = id; } public _Reflect(int id, String name, String[] hobbies) { super(); this.id = id; this.name = name; this.hobbies = hobbies; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String[] getHobbies() { return hobbies; } public void setHobbies(String[] hobbies) { this.hobbies = hobbies; } public static void main(String[] args) throws Exception{ //---------------------------------basic--------------------------------- System.out.println(_Reflect.class.getSimpleName()); System.out.println(_Reflect.class.getName()); System.out.println(_Reflect.class.getPackage()); System.out.println(_Reflect.class.getSuperclass().getName()); System.out.println(int[].class.getName()); System.out.println(_Reflect[].class.getName()); // //--------------------------------- Method --------------------------------- Method[] methods = _Reflect.class.getMethods(); for(Method method : methods){ System.out.println(method + ": " +method.getDeclaringClass().getName()); } // //--------------------------------- isXXX --------------------------------- System.out.println(Comparable.class.isInterface()); System.out.println(int.class.isPrimitive()); System.out.println(int[].class.isArray()); // //--------------------------------- Modifier 修饰符 --------------------------------- System.out.println(Modifier.isPublic(_Reflect.class.getModifiers())); Class<?>[] classes = null; System.out.println(Modifier.isPublic(_Reflect.class.getMethod("getId",classes).getModifiers())); //isAssignableFrom isInstance System.out.println(Number.class.isAssignableFrom(Integer.class)); System.out.println(Number.class.isInstance(1)); //---------------------------------Field--------------------------------- _Reflect _Reflect = new _Reflect(); System.out.println(_Reflect.getId()); System.out.println(_Reflect.getName()); System.out.println(Arrays.toString(_Reflect.getHobbies())); Field[] fields = _Reflect.class.getDeclaredFields(); for(Field field : fields){ if(field.getType() == int.class){ field.setAccessible(true); field.setInt(_Reflect, 1); }else if(field.getType() == String.class){ field.setAccessible(true); field.set(_Reflect, "1"); }else if(field.getType() == String[].class){ field.setAccessible(true); field.set(_Reflect, new String[]{"1","1"}); } } System.out.println(_Reflect.getId()); System.out.println(_Reflect.getName()); System.out.println(Arrays.toString(_Reflect.getHobbies())); // //---------------------------------new instance--------------------------------- Constructor<_Reflect> constructor = _Reflect.class.getConstructor(new Class[]{int.class,String.class,String[].class}); _Reflect _reflect = constructor.newInstance(new Object[]{1,"1",new String[]{"1","1"}}); System.out.println(_reflect.getId()); System.out.println(_reflect.getName()); System.out.println(Arrays.toString(_Reflect.getHobbies())); Class<?> clazz = Class.forName("com.java.new_features_jdk5._Reflect"); _Reflect clazzes = (_Reflect)clazz.newInstance(); System.out.println(clazzes.getId()); System.out.println(clazzes.getName()); System.out.println(Arrays.toString(clazzes.getHobbies())); //---------------------------------Array--------------------------------- //---------------------------------0--------------------------------- int[] ints0 = (int[])Array.newInstance(int.class, 3); Array.setInt(ints0, 0, 0); Array.setInt(ints0, 1, 1); Array.setInt(ints0, 2, 2); // //Array.setInt(ints, 3, 3); //java.lang.ArrayIndexOutOfBoundsException System.out.println(Arrays.toString(ints0)); //---------------------------------1--------------------------------- int[][][] ints3 = (int[][][])Array.newInstance(int.class,2,3,4); System.out.println(ints3.length); System.out.println(ints3[0].length); System.out.println(ints3[0][0].length); int[][] ints3_1_row0_content = new int[][]{{1,2,3,4},{1,2,3,4},{1,2,3,4}}; int[][] ints3_1_row1_content = new int[][]{{11,22,33,44},{11,22,33,44},{11,22,33,44}}; Array.set(ints3, 0, ints3_1_row0_content); Array.set(ints3, 1, ints3_1_row1_content); System.out.println(Arrays.deepToString(ints3)); //---------------------------------2--------------------------------- int[][] ints2 = (int[][])Array.newInstance(int.class, 4,4); for (int i=0; i<4; i++) { ints2[i] = (int[]) Array.newInstance(int.class, i + 1);//重新创建每个第一位数组的长度 } for(int[] array : ints2){ for(int content : array){ System.out.print(content + ","); } System.out.println(); } //---------------------------------4--------------------------------- int[][][] ints4 = new int[1][2][3]; Class<?> clazzz = ints4.getClass(); int dim = 0; while(clazzz.isArray()){ dim ++; clazzz = clazzz.getComponentType(); } System.out.println(dim); System.out.println(ints4.getClass().isArray()); System.out.println(ints4.getClass().getComponentType().getName()); System.out.println(ints4.getClass().getComponentType().getComponentType().getName()); System.out.println(ints4.getClass().getComponentType().getComponentType().getComponentType().getName()); // System.out.println(ints2.getClass().getComponentType().getComponentType().getComponentType().getComponentType().getName());//java.lang.NullPointerException } }
5.注解 Annotation
package com.java.new_features_jdk5; /** * 比较常用的注释: * SuppressWarnings 指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。 Deprecated 用"@Deprecated" 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。 Override 表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。 * @author yuahan * */ public class _Annotation { public static void main(String[] args) { } }
6.泛型
package com.java.new_features_jdk5; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * Java语言的泛型类似于C++中的模板. 但是这仅仅是基于表面的现象。Java语言的泛型基本上完全在编译器中实现的,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。 这种实现称为"擦除"(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除) 需要注意的地方: * 1. 泛型不是协变的 协变:Java 语言中的数组是协变的(covariant),也就是说, 如果 Integer 扩展了 Number,那么不仅 Integer 是 Number,而且 Integer[] 也是 Number[],在要求Number[] 的地方完全可以传递或者赋予 Integer[]。 但是,泛型并不是协变的。 如果Number是Integer的超类型,但是,如果需要List<Integer>的时候, 并不容许传递List<Number>,它们并不等价。 不允许的理由很简单,这样会破坏要提供的类型安全泛型。 如: public static void main(String[] args) { List<Integer> list=new ArrayList<Integer>(); List<Number> list2=list;//编译错误. list2.add(new Float(19.0f)); } 2. 延迟构造 因为可以擦除功能,所以List<Integer>和List<String>是同一个类,编译器在编译List<V>的时候,只生成一个类。所以,运行时,不能区分List<Integer>和List<String>(实际上,运行时都是List,类型被擦除了), 用泛型类型参数标识类型的变量的构造就成了问题。运行时缺乏类型信息,这给泛型容器类和希望创建保护性副本的泛型类提出了难题。 3. 不能用通配符来帮助构造一个类(容器,数组等),因为根本不知道类型,不能确定该构造函数是否存在 class Foo{ public void doSomething(Set<?> set){ Set<?> copy = new HashSet<?>(set);//编译出错,不能用通配符类型的参数调用泛型构造函数 } } 或者 class ArrayList<V>{ V[] content; public ArrayList() { content = new V[10];//编译出错,不能实例化用类型参数表示的类型数组 } } 不过可以用Object类帮助实现,不过看上去很不舒服。 class Foo{ public void doSomething(Set<?> set){ Set<?> copy = new HashSet<Object>(set); } } 或者 class ArrayList<V>{ V[] content; public ArrayList() { content = (V[])new Object[10]; } } 4. 擦除 因为泛型基本上都是在JAVA编译器中而不是运行库中实现的,所以在生成字节码的时候,差不多所有关于泛型类型的类型信息都被“擦除”了, 换句话说,编译器生成的代码与手工编写的不用泛型、检查程序类型安全后进行强制类型转换所得到的代码基本相同。 擦除意味着,一个类不能同时实现 Comparable<String>和Comparable<Number>,因为事实上,两者都在同一个接口中,指定同一个compareTo()方法。 5. 泛型的规则和限制 (1 泛型的参数类型只能是类( class )类型,而不能是简单类型。 比如, <int> 是不可使用的。 (2 可以声明多个泛型参数类型,比如 <T, P,Q…> ,同时还可以嵌套泛型,例如: <List<String>>. (3 泛型 的参数 类 型可以使用 extends 语 句,例如 <T extends superclass> 。 (4 泛型的参数类型可以使用 super 语句,例如 < T super childclass> 。 (5 泛型还可以使用通配符,例如 <? e xtends ArrayList> * @author yuahan * */ public class _Generic <T> { public void array2Collection(T[] array, Collection<T> collection){ if(array != null && collection != null){ for(T content : array ){ collection.add(content); } } } public static void main(String[] args) { _Generic<Integer> generic = new _Generic<Integer>(); Integer[] array = new Integer[]{1,2,3,4}; List<Integer> list = new ArrayList<Integer>(); generic.array2Collection(array, list); System.out.println(list); } }
7.可变参数(Vararg)
package com.java.new_features_jdk5; /** * * 可变参数可以解决代码冗余的问题。 * 如: * public int max(int i, int j); * public int max(int i, int j, int k); * 可以简化成 * public int max(int... num); * * 可以将可变参数视为长度可变的数组。不过需要注意以下问题 : * 1. 变长参数一定要放在最后面 max(int ... nums, int temp)// error * 2. 可变参数不能与数组参数并存 max(int[] nums)//error * @author yuahan * */ public class _Var_Arg { public static int max(int ... nums){ int max = Integer.MIN_VALUE; for(int num : nums){ if(num >= max){ max = num; } } return max; } public static void main(String[] args) { int max1 = _Var_Arg.max(1,2,3,4,5); int max2 = _Var_Arg.max(new int[]{1,2,3,4,5}); System.out.println(max1); System.out.println(max2); } }
8.格式化输入输出
不太喜欢c的输出格式,没有进行尝试。
发表评论
-
applet 您的安全设置已阻止本地应用程序运行
2013-08-23 19:13 1781控制面板中把JAVA的安全设置调至最低,然后重启浏览器。 -
Failed to create the Java Virtual Machine
2010-10-31 11:14 1342今天启动Eclipse,告诉我“Failed to creat ... -
udp sender 精确到毫秒
2010-10-22 20:14 12751。源文件。 package sender; impor ... -
Java实现的9种排序方法
2010-10-22 14:46 1044详见代码。 package com.java.sort; ... -
Java的System.getProperty()方法可以获取的值
2010-09-29 16:14 921ava的System.getProperty()方法可以获取的 ... -
Java 执行系统文件
2010-09-29 14:59 1021以下两个事例是执行Windows下的命令或者可执行文件。 ... -
Java access control
2010-08-19 18:31 901Java中有4个访问级别(不同于C或者C++的3个)。但规则同 ... -
Java中需要注意的函数
2010-08-17 22:23 1040(持续更新中。。。) ... -
Java面试题
2010-08-08 18:39 857最近在网上看到很多Java ... -
Java 入门
2010-08-06 16:59 1831(转载 IBM DeveloperWorks) ... -
Java中的深拷贝与浅拷贝
2010-08-06 06:32 958在Java中,一个重要的,而且是每个类都有的方法,clone( ... -
Java 容器类
2010-08-06 05:05 856Java功能丰富的集 ... -
java 解惑 1
2010-08-05 22:06 1025_1.java package itepub.net._201 ... -
Comparator and Comparable in Java
2010-08-05 19:10 9511. java.lang.Comparable java ... -
Java中 synchronize、wait和notify3
2010-08-05 19:07 901package com.java.lang.thread. ... -
Java中 synchronize、wait和notify2
2010-08-05 19:06 1563有一个生产者消费者实例,修改了一下,觉得还行,javaeye上 ... -
Java中 synchronize、wait和notify
2010-08-05 18:53 2333认识Java一段时间了了,到目前为止还没有好好认识一下其中的s ... -
Java中的String类
2010-08-05 18:42 10411. 正像很多人所说的那样,equals 和 == 是完全两个 ...
相关推荐
### Java 5 新特性详解 #### 一、引言 随着技术的发展,编程语言也在不断地进步和完善。Java 5 的发布标志着 Java 在功能性和便利性方面迈出了重要的一步。本篇文章将详细介绍 Java 5 中的一些关键特性,这些新特性...
java5新特性
标题 "使用模式设计及java5新特性在HibernateDAO中的应用" 涉及到的是软件开发中的两个关键领域:设计模式和Java编程语言的新特性,特别是在数据访问对象(DAO)层如何结合使用它们。这篇文章可能详细阐述了如何利用...
### Java 5新特性 #### 1. **泛型(Generics)** 泛型是Java 5最重要的特性之一,它允许在类、接口和方法声明中使用类型参数,增强了类型安全,减少了强制类型转换,提高了代码的可读性和可维护性。 #### 2. **...
Java 5是一个重要的Java平台版本,它引入了许多新特性,极大地提升了开发效率和代码质量。在"RowSetDemo"这个示例中,我们主要关注的是Java 5中的一个新特性——`java.sql.RowSet`接口及其相关的实现。`RowSet`是...
Java 5,也被称为JDK 1.5,是Java发展历程中的一个重要里程碑,引入了许多显著的新特性,极大地提升了开发效率和代码的可读性。以下是对这些关键特性的详细解释: 1. **自动拆装箱(Auto-boxing/Unboxing)**: 这一...
总的来说,JDK 1.5(Java 5.0)的新特性极大地提高了Java的生产力和代码质量。从泛型到增强的for循环,再到注解和枚举,这些改进都让Java开发者能够编写出更安全、更易于维护的代码。在实际开发中,理解并充分利用...
通过了解和熟练掌握这些新特性,开发者能够编写出更高效、更易于维护的 Java 5 代码。这些特性不仅提升了编程体验,也为后续的 Java 版本奠定了基础。学习并应用这些特性是保持 Java 技能与时俱进的关键。
Java8是Java编程语言的一次重大更新,引入了许多新的特性和功能,极大地提升了开发效率和代码的可读性。以下是一些主要的Java8新特性详解: 1. **Lambda表达式**:Lambda表达式是Java8中最显著的新特性,它为Java...
本文将深入探讨Java 8的三大关键新特性:接口的默认方法实现、Lambda表达式以及一系列相关的变化。 一、接口的默认方法实现 在Java 8之前,接口只能定义抽象方法,而不能包含具体实现。Java 8引入了默认方法...
JAVA 1.5的新特性是Java发展史上的一个重要里程碑,这一版本引入了一系列创新特性,旨在提升编程效率、增强代码安全性并简化开发流程。以下是对JAVA 1.5新特性的详细解析: ### 1. 泛型 (Generics) #### 概述 泛型...
在Java 8中,最重要的两个新特性无疑是Lambda表达式和Stream API。这两个特性都与函数式编程思想密切相关,让Java开发者能够更加灵活地处理数据。 ### Lambda表达式 Lambda表达式是Java 8中最显著的新特性之一,它...
5. **日期与时间API(java.time)**:取代了原来的`java.util.Date`和`Calendar`,新的日期时间API提供了更加方便和直观的方式来处理日期和时间。`LocalDate`、`LocalTime`和`LocalDateTime`是其中的主要类。 6. **...
总之,尽管Java 5的特性在当前看来可能并不新鲜,但考虑到许多企业仍使用旧版本的JDK,理解如何在这些环境中利用Java 5的新特性仍然是有价值的。通过巧妙的编码技巧和策略,开发者可以在不影响现有用户的同时,享受...
以下是关于Java 8新特性的详细讲解: 1. **函数式编程:Lambda表达式** Lambda表达式是Java 8中最显著的新特性,它允许我们将函数作为一个方法参数,或者以匿名函数的形式创建。Lambda表达式简洁且易于理解,使得...
Java 7是Java编程语言的一个重大更新,发布于2011年,它引入了许多新的特性和改进,旨在提升开发者的效率和代码的可读性。在这个主题中,我们将深入探讨Java 7的新特性以及Java的高级编程概念。 **1. 多线程并行流...
自 Java 8 发布后,Java 有了许多显著的新特性,极大地提升了开发效率和代码质量。以下是对 Java 8 及之后版本主要新特性的深入剖析: 1. **Lambda 表达式**: Java 8 引入了 Lambda 表达式,使得函数式编程成为...