Java API —— JDK5新特性

JDK5新特性

自动拆装箱、泛型、增强for、静态导入、可变参数、枚举

 

1、增强for概述

  1)简化数组和Collection集合的遍历

  2)格式:

  for(元素数据类型 变量 : 数组或者Collection集合) {

    使用变量即可,该变量就是元素

  }

  3)好处:简化遍历

  4)注意事项:增强for的目标要判断是否为null

例子1:

package jdk5;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by gao on 15-12-16.
 */
/*
 * 增强for:是for循环的一种。
 *
 * 格式:
 *         for(元素数据类型 变量 : 数组或者Collection集合) {
 *            使用变量即可,该变量就是元素
 *       }
 *
 * 好处:简化了数组和集合的遍历。
 *
 * 弊端: 增强for的目标不能为null。
 * 如何解决呢?对增强for的目标先进行不为null的判断,然后在使用。
 */
public class ForDemo01 {
    public static void main(String[] args) {
        // 定义一个int数组
        int[] arr = {1, 2, 3, 4, 5};
        for (int x = 0; x < arr.length; x++) {
            System.out.println(arr[x]);
        }
        System.out.println("-------------");
        //增强for
        for (int x : arr) {
            System.out.println(x);
        }
        System.out.println("-------------");
        // 定义一个字符串数组
        String[] strArray = {"林青霞", "风清扬", "东方不败", "刘意"};
        for (String s : strArray) {
            System.out.println(s);
        }
        System.out.println("-------------");
        // 定义一个集合
        ArrayList<String> array = new ArrayList<String>();
        array.add("hello");
        array.add("wrold");
        array.add("java");
        for (String s : array) {
            System.out.println(s);
        }
        List<String> list = null;
        // NullPointerException
        // 这个s是我们从list里面获取出来的,在获取前,它肯定还好做一个判断
        // 说白了,这就是迭代器的功能
        if (list != null){
            for(String s : list){
                System.out.println(s);
            }
        }
        // 增强for其实是用来替代迭代器的
        //ConcurrentModificationException
        // for (String s : array) {
        // if ("world".equals(s)) {
        // array.add("javaee");
        // }
        // }
        // System.out.println("array:" + array);
    }
}

例子2:

package jdk5;
import java.util.ArrayList;
import java.util.Iterator;
/**
 * Created by gao on 15-12-16.
 */
/*
 * ArrayList存储字符串并遍历。要求加入泛型,并用增强for遍历。
 * A:迭代器
 * B:普通for
 * C:增强for
 */
public class ForDemo02 {
    public static void main(String[] args) {
        // 创建集合对象
        ArrayList<String> arrayList = new ArrayList<String>();
        // 创建并添加元素
        arrayList.add("hello");
        arrayList.add("world");
        arrayList.add("java");
        // 遍历集合
        // 迭代器
        Iterator<String> it = arrayList.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("------------------------");
        // 普通for
        for(int x = 0; x < arrayList.size(); x++){
            String s = arrayList.get(x);
            System.out.println(s);
        }
        System.out.println("------------------------");
        //增强for
        for(String s : arrayList){
            System.out.println(s);
        }
    }
}

例子3:

学生类:

package jdk5;
/**
 * Created by gao on 15-12-9.
 */
public class Student {
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

测试类:

package jdk5;
import java.util.ArrayList;
import java.util.Iterator;
/**
 * Created by gao on 15-12-16.
 */
public class ForDemo03 {
    public static void main(String[] args) {
        // 创建集合对象
        ArrayList<Student> array = new ArrayList<Student>();
        // 创建学生对象
        Student s1 = new Student("林青霞", 27);
        Student s2 = new Student("貂蝉", 22);
        Student s3 = new Student("杨玉环", 24);
        Student s4 = new Student("西施", 21);
        Student s5 = new Student("王昭君", 23);
        // 把学生对象添加到集合中
        array.add(s1);
        array.add(s2);
        array.add(s3);
        array.add(s4);
        array.add(s5);
        // 迭代器
        Iterator<Student> it = array.iterator();
        while (it.hasNext()) {
            Student s = it.next();
            System.out.println(s.getName() + "---" + s.getAge());
        }
        System.out.println("--------------");
        // 普通for
        for (int x = 0; x < array.size(); x++) {
            Student s = array.get(x);
            System.out.println(s.getName() + "---" + s.getAge());
        }
        System.out.println("--------------");
        //增强for
        for (Student s : array) {
            System.out.println(s.getName() + "---" + s.getAge());
        }
    }
}

2、静态导入(开发不常用)

  1)静态导入概述

格式:import static 包名….类名.方法名;

可以直接导入到方法的级别

  2)注意事项

方法必须是静态的

如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。

由此可见,意义不大,所以一般不用,但是要能看懂。

例子1:

package jdk5;
/**
 * Created by gao on 15-12-16.
 */
//import java.lang.Math;
import static java.lang.Math.abs;
import static java.lang.Math.pow;
import static java.lang.Math.max;
public class StaticImportDemo01 {
    public static void main(String[] args) {
        // System.out.println(java.lang.Math.abs(-100));
        // System.out.println(java.lang.Math.pow(2, 3));
        // System.out.println(java.lang.Math.max(20, 30));
        // 太复杂,我们就引入到import
//        System.out.println(Math.abs(-100));
//        System.out.println(Math.pow(2, 3));
//        System.out.println(Math.max(20, 30));
        // 太复杂,有更简单
        //System.out.println(abs(-100));
        System.out.println(java.lang.Math.abs(-100));
        System.out.println(pow(2, 3));
        System.out.println(max(20, 30));
    }
    public static void abs(String s) {
        System.out.println(s);
    }
}

3、可变参数

  1)可变参数概述

定义方法的时候不知道该定义多少个参数、

  2)格式

修饰符 返回值类型 方法名(数据类型…  变量名){}

  3)注意:

这里的变量其实是一个数组

如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

  4)Arrays工具类中的一个方法

public static <T> List<T> asList(T... a)

例子1:

package jdk5;
/**
 * Created by gao on 15-12-16.
 */
/*
 * 可变参数:定义方法的时候不知道该定义多少个参数
 * 格式:
 *         修饰符 返回值类型 方法名(数据类型…  变量名){
 *
 *         }
 *
 *         注意:
 *             这里的变量其实是一个数组
 *             如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
 */
public class ArgsDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int result = sum(a, b);
        System.out.println("result:" + result);
        // 3个数据的求和
        int c = 30;
        result = sum(a, b, c);
        System.out.println("result:" + result);
        // 4个数据的求和
        int d = 30;
        result = sum(a, b, c, d);
        System.out.println("result:" + result);
        // 需求:我要写一个求和的功能,到底是几个数据求和呢,我不太清楚,但是我知道在调用的时候我肯定就知道了
        // 为了解决这个问题,Java就提供了一个东西:可变参数
        result = sum(a, b, c, d, 40);
        System.out.println("result:" + result);
        result = sum(a, b, c, d, 40, 50);
        System.out.println("result:" + result);
    }
    private static int sum(int... a) {
        int s = 0;
        for (int x : a) {
            s += x;
        }
        return s;
    }
    // public static int sum(int a, int b, int c, int d) {
    // return a + b + c + d;
    // }
    //
    // public static int sum(int a, int b, int c) {
    // return a + b + c;
    // }
    //
    // public static int sum(int a, int b) {
    // return a + b;
    // }
}

输出结果:

result:30

result:60

result:90

result:130

result:180

例子2:

package jdk5;
import java.util.Arrays;
import java.util.List;
/**
 * Created by gao on 15-12-16.
 */
/*
 * public static <T> List<T> asList(T... a):把数组转成集合
 *
 * 注意事项:
 *         虽然可以把数组转成集合,但是集合的长度不能改变。
 */
public class ArgsDemo02 {
    public static void main(String[] args) {
        // 定义一个数组
//        String[] strArray = { "hello", "world", "java" };
        //固定参数
//        List<String> list = Arrays.asList(strArray);
        //可变参数
        List<String> list = Arrays.asList("hello","java");
        // UnsupportedOperationException
        // list.add("javaee");
        // UnsupportedOperationException
        // list.remove(1);
        list.set(1, "javaee");
        for(String s : list){
            System.out.println(s);
        }
    }
}
时间: 2024-11-10 06:51:39

Java API —— JDK5新特性的相关文章

Java SE 6 新特性: 编译器 API

新 API 功能简介 JDK 6 提供了在运行时调用编译器的 API,后面我们将假设把此 API 应用在 JSP 技术中.在传统的 JSP 技术中,服务器处理 JSP 通常需要进行下面 6 个步骤: 分析 JSP 代码: 生成 Java 代码: 将 Java 代码写入存储器: 启动另外一个进程并运行编译器编译 Java 代码: 将类文件写入存储器: 服务器读入类文件并运行: 但如果采用运行时编译,可以同时简化步骤 4 和 5,节约新进程的开销和写入存储器的输出开销,提高系统效率.实际上,在 JD

Atitit..jdk&#160;java&#160;各版本新特性&#160;1.0&#160;1.1&#160;1.2&#160;1.3&#160;1.4&#160;1.5(5.0)&#160;1.6(6.0)&#160;7.0&#160;8.0&#160;9.0&#160;attilax&#160;大总结

Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 1.2. Java版本:JDK 1.02 1.3. Java版本:JDK 1.13 1.4. Java版本:JDK 1.2 (Java 2)4 1.4.1. 1999年5 1.4.2. 2000年5 1.5. Java版本:JDK 1.35 1.5.1. 2001年6 1.5.2. 2002年7

Java SE 6 新特性: HTTP 增强--转

概述 Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HTTP 协议出现了很多实用的新特性:NTLM 认证提供了一种 Window 平台下较为安全的认证机制:JDK 当中提供了一个轻量级的 HTTP 服务器:提供了较为完善的 HTTP Cookie 管理功能:更为实用的 NetworkInterface:DNS 域名的国际化支持等等. NTLM 认证 不可

Java 8的新特性—终极版

声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己翻译了一版(写作驱动学习,加深印象),有些地方参考了该同学的. Java 8 前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas

Java SE 6 新特性: JMX 与系统管理

Java SE 6 新特性: JMX 与系统管理 2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Mustang 在性能方面有了不错的提升.与 Tiger 在 API 库方面的大幅度加强相比,虽然 Mustang 在 API 库方面的新特性显得不太多,但是也提供了许多实用和方便的功能:在脚本,WebService,XML,编译器 API,数据库,JMX,网

JDK5新特性之 可变参数的方法

可变参数的方法:不知道这个方法该定义多少个参数 注意: > 参数实际上是数组 > 必须写在参数列表最后一个 package cn.itcast.day24.varparam; import java.lang.reflect.Type; /** * * JDK5新特性之 可变参数 * 定义方法时,不知道该定义多少个参数 * * 格式: * 修饰符 方法返回值 方法名(数据类型 ... 变量名){} * * 注意: * 可变参数实际上是一个数组 * 可变参数必须写在方法的参数列表的最后 * */

Java 8 新特性:Java 类库的新特性之 Stream类 ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  Java 类库的新特性之 Stream类 (注:此文中涉及到的一部分图片为网络图片,若有问题,请联系我将其删除.) 一.Java8对IO/NIO 的改进 Java 8 对 IO/NIO 也做了一些改进,主要包括: 改进了java.nio.charset.Charset 的实现,使编码和解码的效率得以提升: 精简了jre/lib

Java SE 8 新特性之旅 : Java开发世界的大变动

我很自豪的成为了adopt-OpenJDK的一员,像其他专业团队成员一样,但是我只刚加入了8个月,我们一同经历了Java SE 8 的开发.编译.编码.讨论--等等,直到JDK上线.Java SE 8发布于2014年3月18日,现在可供下载使用. 我很高兴发布这一系列"Java SE 8 新特性之旅",我会写一些例子来简化Java SE 8知识的获取.开发经验.新特性和API,然后 利用你的知识,提高你的编码能力,同时提高你的生产力.我希望你能像我写文章一样享受它. 我们将游览Java

Java 8 新特性:Java 类库的新特性之 Optional类 ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  Java 类库的新特性之 Optional类 1.Optional简述 到目前为止,著名的NullPointerException是导致Java应用程序失败的最常见原因.过去,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的