`
vvnet
  • 浏览: 112197 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

JDK1.5特性实例

    博客分类:
  • JAVA
阅读更多

class Temp{
String id ="";
public Temp() {
super();
}

public Temp(String id) {
super();
this.id = id;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}

public class JdkTest {
// jdk1.5泛性、For-Each循环,特性实例
static List<String> processAll(List<Temp> c) {
List<String> strs = new ArrayList();
for (Temp emp : c) {
strs.add(emp.getId());
}
return strs;
}
//jdk1.5可变参数(Varargs),特性实例
public static void write(String... objs) {
for (String obj: objs){
System.out.print(obj);
}
System.out.print("\n");
}
public static void main(String args[]){
List<Temp> c = new ArrayList();
c.add(new Temp("1"));
c.add(new Temp("2"));
c.add(new Temp("3"));
List<String> strs =processAll(c);
for(String str: strs){
System.out.println(str);
}
write("hello");
write("hello"," world");
write("hello"," world"," welcome");
write("hello"," world"," welcome"," to");
write("hello"," world"," welcome"," to"," Leaderbird");
}
}

 

 

 

 

 

泛型(Generic):
//类型安全,不用转型
List<String> list = new ArrayList<String>();

//说明class A是范型类,T可以是任意类型
//多个类型参数的时候,用逗号分开 <T,V>
//接口用法一样
class A<T>{
    private T t;
    public void setT(T t){
        this.t = t;
    }
}
public class Test{
    public static void main(String[] args){
        A<String> a = new A<String>();
        a.setT("str")    //规范了class A里的T类型,所以只能传递String进去
    }
}

//受限范型
public class Limited<T extends Number> {
    public static void main(String[] args) {
        Limited<Integer> number;   //正确
        Limited<String> str;       //编译错误
    }
}

//通配符
public void print(List<?> list){ // 如写成 List<T> 编译就会报错
    // ..
}
public void draw2All(List<? extends Shape> shapes){ //可以是任何Shape的子类
    // ..
}

范型方法:
--------------------------------------------------

public class Test {
    public static void main(String[] args) throws Exception {
//         可换成Integer[] a = {1,2,3},但List的类型也必须由String换成Integer: List<Integer> ..
        String[] a = {"1","2","3"};
        List<String> list = new ArrayList<String>();
        System.out.println(list.size());
        fromArrayToCollection(a,list); // fromArrayToCollection方法强制了参数的类型
        System.out.println(list.size());
    }

    public static <T> void fromArrayToCollection(T[] a, Collection<T> c) {
        for (T o : a)
            c.add(o);
    }
}
--------------------------------------------------



For-Each循环:
Object[] os = new Object[5];
for(Object o : os){
    // ..
}
//和"泛型"配合的话:
List<String> list = new ArrayList<String>();
for(String s : list){ // 可以直接告诉程序,遍历后的类型是 String
    // ..
}


自动装包/拆包(Autoboxing/unboxing):
自动装包:基本类型自动转为包装类.(int >> Integer)
自动拆包:包装类自动转为基本类型.(Integer >> int)
//一般,jdk1.5降级到1.4,多少会产生点"自动装包/拆包问题"


枚举(Enums):
public enum Color
{
Red,
White,
Blue
}
// Color myColor = Color.Red;
// 提供了两个有用的静态方法values()和valueOf()
for (Color c : Color.values())
    System.out.println(c);

例子:
--------------------------------------------------
package demo.test.jdk15;

import java.util.*;

public class EnumTest {

    public enum Authority {
        READ, READ_MAIL, WRITE, EXECUTE;
    }

    public enum Role {
        USER() {
            private Authority[] au = { Authority.EXECUTE };

            Authority[] getAuthorities() {
                return au;
            }
        },
        MANAGER() {
            private Authority[] au = { Authority.READ, Authority.EXECUTE };

            Authority[] getAuthorities() {
                return au;
            }
        },
        SUPER() {
            private Authority[] au = { Authority.WRITE, Authority.READ,
                    Authority.EXECUTE, Authority.READ_MAIL };

            Authority[] getAuthorities() {
                return au;
            }
        };

        abstract Authority[] getAuthorities();
    }

    public enum User {
        MARY() {
            Role[] r = { Role.USER };

            Role[] getRole() {
                return r;
            }
        },
        JACK() {
            Role[] r = { Role.MANAGER , Role.USER };

            Role[] getRole() {
                return r;
            }
        };

        abstract Role[] getRole();
    }

    public static void main(final String[] args) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("user", User.JACK);

        Authority[] needAu = { Authority.READ, Authority.EXECUTE };
        if (hasAuthority((User) map.get("user"), needAu)) {
            System.out.println("+");
        } else {
            System.out.println("-");
        }
    }

    public static boolean hasAuthority(User u, Authority... a) {
        int needAu = a.length;
        if (needAu == 0) {
            return false;
        }
        Role[] roles = u.getRole();
        int hasAu = 0;
        for (Authority i : a) {
            for (Role r : roles) {
                boolean find = false;
                for (Authority j : r.getAuthorities()) {
                    System.out.println(r + " -- " + i + ":" + j);
                    if (j.ordinal() == i.ordinal()) {
                        if(needAu == ++hasAu){
                            return true;
                        }
                        find = true;
                        break;
                    }
                }
                if(find){
                    break;
                }
            }
        }
        return false;
    }
}
--------------------------------------------------


可变参数(Varargs):
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
// 为了解决此类问题(如多态问题),可用"可变参数"
public void write(Object...objs){
    // ..
}
// 注:传入的参数(如果有)会被当作一个数组处理,如要知道参数的数量,可取length


静态导入(Static Imports)
// "静态导入"会降低程序可读性,如无特殊需求,不建议使用
import static java.lang.Math.*; //是Math.* 不是Math
double d = sin(PI * 2); //无需再写 Math.sin(Math.PI * 2);


java.util.Scanner(扫描器)
//读取Console的内容
Scanner sc = new Scanner(System.in);
int i = sc.nextInt(); //可以是 nextXX()
//正则分割(类似Strint.split(xx))
String input = "a xx b xx c xx d xx";
Scanner sc = new Scanner(input).useDelimiter("\\s*xx\\s*");
while(sc.hasNext()){
    System.out.println(sc.next());
}


printf 和 java.util.Formatter:
//类似C里面的printf,喜欢的人可以用
//printf(Locale l, String format, Object... args)
//printf(String format, Object... args)
System.out.printf("%08d %s \n",5,"ss"); // 00000005 ss (换行)
//和 out.format(format, args) 效果相同

//还可以用 Formatter
String s = new Formatter().format("%08d %s \n", 5,"ss").toString();
System.out.println(s);


Properties (loadFromXML storeToXML)(用Properties读写xml)
//test.xml:
//注:<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Hi</comment>
<entry key="id">1</entry>
<entry key="name">rocie</entry>
<entry key="email">rocie@sina.com</entry>
</properties>

//loadFromXML
Properties prop = new Properties();
FileInputStream fis = new FileInputStream("e:/test.xml");
prop.loadFromXML(fis);
fis.close();
System.out.println("Name: " + prop.getProperty("name")); // 这里的name是entry的key

//storeToXML
Properties prop = new Properties();
prop.setProperty("id", "2");
prop.setProperty("name", "aho");
prop.setProperty("email", "aho@jp.com");
FileOutputStream fos = new FileOutputStream("e:/test.xml");
prop.storeToXML(fos, "这是注释","utf-8");
fos.close();


另外:
BigDecimal 多了很多实用方法,算钱方便多了~
Double 和 Float 提供了toHexString()方法(以前Integer/Long有)
Interger 位操作的扩充函数
System.clearProperty(String key) 清除一个属性(从前有getProperty()有setProperty(),但没有remove)
Double/Float/Long/Integer/Short/Byte等,都加入了一个静态常量 SIZE ,如Double.SIZE = 64

分享到:
评论

相关推荐

    jdk1.5的新特性泛型的实例代码

    jdk1.5的新特性泛型的实例代码,很好的学习资料

    JDK1.5新特性之注解功能(实例讲解)[文].pdf

    JDK1.5新特性之注解功能(实例讲解)[文].pdf

    jdk5.0新特性实例讲解

    jdk1.5(jdk5.0)较之前版本有了比较大的改变,本资料较详细的讲解了jdk5.0的新特性,相信能让你受益。

    JDK 1.5之Generics

    Generics 是JDK 1.5 一个最重要的特性,主要用来处理Collection。 以下代码在JDK 1.5 调试通过。 代码实例1: Demo.java package maoxiang.examples.jdk15.generics; import java.util.ArrayList; import java.util....

    Java注解学习讲义.docx

    注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要的作用有以下四方面: · 生成文档,通过代码里标识的元数据生成javadoc文档。 · ...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例

    每个人的开发环境可能会有差异,但有一点我需要说明的是,JDK的版本不得低于1.5,因为用到了很多1.5版才支持的新特性。Tomcat和MySQL请不要低于我所用的版本,因为我没在其它的版本上进行测试。Navicat则是MySQL...

    Java 2平台安全技术-结构,API设计和实现

    8.2 JDK 特性的改善 141 8.3 Java鉴别和许可服务 142 8.3.1 主题与主体 144 8.3.2 证件 144 8.3.3 可插入和可堆叠的鉴别 144 8.3.4 回调 147 8.3.5 访问控制 147 8.3.6 JAAS工具 149 8.4 小结 149 参考文献 151

    JAVA 2平台安全技术-结构,API设计和实现

    8.2 JDK 特性的改善 141 8.3 Java鉴别和许可服务 142 8.3.1 主题与主体 144 8.3.2 证件 144 8.3.3 可插入和可堆叠的鉴别 144 8.3.4 回调 147 8.3.5 访问控制 147 8.3.6 JAAS工具 149 8.4 小结 149 参考文献 151

    JDBC 3.0数据库开发与设计

    1.5 JDBC驱动程序简介 1.5.1 JDBC-ODBC 桥和ODBC驱动程序 1.5.2 本地API部分Java驱动程序 1.5.3 JDBC网络纯Java驱动程序 1.5.4 本地协议纯Java驱动程序 1.5.5 JDBC驱动程序的比较 1.6 本章小结 第2章 JDBC...

    Spring.3.x企业应用开发实战(完整版).part2

     Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...

    Spring3.x企业应用开发实战(完整版) part1

     Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...

    javaSE代码实例

    1.5 小结 11 第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档注释 13 2.2 基本数据类型 14 2.2.1 整型 15 2.2.2 浮点型 17 ...

    Java优化编程(第2版)

    1.5 java源文件编排格式 代码行长度与折行规则 1.6 程序注释 1.7 变量的声明初始化与放置 1.7.1 变量声明 1.7.2 变量初始化 1.7.3 变量放置 1.8 java程序语句编写规则 1.8.1 简单语句 1.8.2 复合语句 1.9 空格与空行...

    Java2核心技术.part5

    1.5关于Java的常见误解 第2章Java程序设计环境 2.1安装Java开发工具箱 2.1.1下载JDK 2.1.2设置执行路径 2.1.3安装库源代码和文档 2.1.4安装本书中的示例 2.1.5导航Java目录 2.2选择开发环境 ...

    Java2核心技术.part3

    1.5关于Java的常见误解 第2章Java程序设计环境 2.1安装Java开发工具箱 2.1.1下载JDK 2.1.2设置执行路径 2.1.3安装库源代码和文档 2.1.4安装本书中的示例 2.1.5导航Java目录 2.2选择开发环境 ...

    Java2核心技术.part1

    1.5关于Java的常见误解 第2章Java程序设计环境 2.1安装Java开发工具箱 2.1.1下载JDK 2.1.2设置执行路径 2.1.3安装库源代码和文档 2.1.4安装本书中的示例 2.1.5导航Java目录 2.2选择开发环境 2.3使用...

    Java2核心技术.part6

    1.5关于Java的常见误解 第2章Java程序设计环境 2.1安装Java开发工具箱 2.1.1下载JDK 2.1.2设置执行路径 2.1.3安装库源代码和文档 2.1.4安装本书中的示例 2.1.5导航Java目录 2.2选择开发环境 ...

    Java2核心技术.part4

    1.5关于Java的常见误解 第2章Java程序设计环境 2.1安装Java开发工具箱 2.1.1下载JDK 2.1.2设置执行路径 2.1.3安装库源代码和文档 2.1.4安装本书中的示例 2.1.5导航Java目录 2.2选择开发环境 ...

    Java2核心技术.part2

    1.5关于Java的常见误解 第2章Java程序设计环境 2.1安装Java开发工具箱 2.1.1下载JDK 2.1.2设置执行路径 2.1.3安装库源代码和文档 2.1.4安装本书中的示例 2.1.5导航Java目录 2.2选择开发环境 ...

Global site tag (gtag.js) - Google Analytics