本篇博客内容

  一、自动装箱和自动拆箱

  二、泛型

  三、增强for循环

  四、静态导入

  五、可变参数

  六、枚举

一、自动装箱和自动拆箱  <=返回目录

  java有8种基本数据类型  byte、short、int、long、float、double、char、boolean,

  对应的有8种包装类型  Byte、Short、Integer、Long、Float、Double、Character、Boolean。

  所谓自动装箱就是:将基本数据类型的值直接赋值给对应包装类型的变量,java自动进行转换。(自动装箱:基本数据类型 ==> 包装类型)

  自动拆箱:将包装类型的值赋给基本数据类型的变量,java自动进行转换。(自动拆箱: 包装类型 ==> 基本数据类型)

// 自动装箱
Integer a = 1;
// 执行上面那句代码的时候,系统为我们执行了:
// Integer a = Integer.valueOf(1); // 装箱 int ==> Integer // 自动拆箱
int b = a;
// 执行上面那句代码的时候,系统为我们执行了:
// int b = a.intValue(); // 拆箱 Integer ==> int
Integer i = 1;
i += 1; // 先拆 i+1,再装i=i+1
//执行上面那句代码的时候,系统为我们执行了:
i = Integer.valueOf(i.intValue() + 1);

二、泛型  <=返回目录

  泛型(一)泛型类和泛型方法

  泛型(二)封装工具类CommonUtils-把一个Map转换成指定类型的javabean对象

  泛型(三)模拟commons-dbutils

  泛型(四)类型通配符

  泛型(五)

三、增强for循环   <=返回目录

  使用增强for时,先对要进行遍历的数据进行判空判断。

package com.oy.test;

public class Test {

    public static void main(String[] args) {
String[] strArray = new String[] {"a", "b", "c"};
// printArray(strArray);
printArray2(strArray); Integer[] intArray = new Integer[] {1, 2 ,3};
// printArray(intArray);
printArray2(intArray); // printArray种使用增强for的代码不严谨,比如:
Object[] objArray = null;
// printArray(objArray); // 报错NullPointerException
printArray2(objArray);
} // 使用增强for的代码不严谨
private static void printArray(Object[] objArray) {
for (Object str : objArray) {
System.out.println(str);
}
} // 改进
private static void printArray2(Object[] objArray) {
if (objArray != null && objArray.length > 0) {
for (Object str : objArray) {
System.out.println(str);
}
}
}
}

四、静态导入  <=返回目录

  自定义工具类,包含一个静态方法

package com.oy.util;
import java.util.UUID;
public class Utils {
// 获取UUID,32位字符串
public static String uuid() {
return UUID.randomUUID().toString().replace("-", "").toUpperCase();
}
}

  静态导入格式: import 包名.类名.方法名;

package com.oy.test;

// import com.oy.util.Utils; // 原来是导入类
// 静态导入是:导入方法
// 静态导入格式: import 包名.类名.方法名;
import static com.oy.util.Utils.uuid; public class Test {
public static void main(String[] args) {
String str = uuid();
System.out.println(str);
} }

五、可变参数  <=返回目录

  可变参数本质是一个数组

public class Test {

    public static void main(String[] args) {
System.out.println(add(1)); //
System.out.println(add(1, 2)); //
System.out.println(add(1, 2, 3)); // System.out.println(add(new int[] {1, 2})); // 3 // System.out.println(add(1, new int[] {2, 3})); // 报错
} private static int add(int... intArray) {
int sum = 0;
for (int i : intArray) {
sum += i;
}
return sum;
}
}

  可变参数只能作为方法的最后一个参数

public class Test {

    public static void main(String[] args) {
System.out.println(add(1)); //
System.out.println(add(1, 2)); //
System.out.println(add(1, 2, 3)); // System.out.println(add(1, new int[] {2, 3})); //
} // 可变参数只能作为方法的最后一个参数
// private static int add(int a, int... intArray, int b) { // 报错
private static int add(int a, int... intArray) {
int sum = 0;
sum += a;
for (int i : intArray) {
sum += i;
}
return sum;
}
}

六、枚举  <=返回目录

6.1、什么是枚举:

  将变量的值罗列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。回想单例设计模式:单例类是一个类只有一个实例。那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。

6.2、自己实现枚举类

  最简单的枚举类

package com.oy.test;

/**
* @author oy
* @date 2019年5月26日 下午10:58:44
* @version 1.0.0
*/
public class Direction {
public static final Direction FRONT = new Direction();
public static final Direction BEHIND = new Direction();
public static final Direction LEFT = new Direction();
public static final Direction RIGHT = new Direction(); private Direction () {}
}

  添加一个字段

package com.oy.test;

public class Direction2 {
public static final Direction2 FRONT = new Direction2("front");
public static final Direction2 BEHIND = new Direction2("behind");
public static final Direction2 LEFT = new Direction2("left");
public static final Direction2 RIGHT = new Direction2("right"); // private Direction2 () {} private String name;
public String getName() {
return name;
} private Direction2(String name) {
this.name = name;
} }

   添加一个抽象方法

package com.oy.test;

public abstract class Direction3 {
public static final Direction3 FRONT = new Direction3("front") { @Override
void show() {
System.out.println("front show...");
} };
public static final Direction3 BEHIND = new Direction3("behind") { @Override
void show() {
System.out.println("behind show...");
} };
public static final Direction3 LEFT = new Direction3("left") { @Override
void show() {
System.out.println("left show...");
} };
public static final Direction3 RIGHT = new Direction3("right") { @Override
void show() {
System.out.println("right show...");
} }; // private Direction2 () {} private String name;
public String getName() {
return name;
} private Direction3(String name) {
this.name = name;
} abstract void show();
}

  

  测试

public class Test {

    public static void main(String[] args) {
Direction d1 = Direction.FRONT;
System.out.println(d1); Direction2 d2 = Direction2.FRONT;
System.out.println(d2);
System.out.println(d2.getName()); // front Direction3 d3 = Direction3.FRONT;
System.out.println(d3);
System.out.println(d3.getName()); // front
d3.show(); // front show...
}
}

6.3、enum

  enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中。

  只有枚举项的枚举类

public enum Direction {
FRONT, BEHIND, LEFT, RIGHT;
}

  

  添加一个字段

public enum Direction {
FRONT("front"), BEHIND("behind"), LEFT("left"), RIGHT("right"); private String name;
public String getName() {
return name;
} private Direction(String name) {
this.name = name;
}
}

  添加一个抽象方法

public enum Direction {
FRONT("front") {
@Override
void show() {
System.out.println("front show...");
}
}, BEHIND("behind") {
@Override
void show() {
System.out.println("behind show...");
}
}, LEFT("left") {
@Override
void show() {
System.out.println("left show...");
}
}, RIGHT("right") {
@Override
void show() {
System.out.println("right show...");
}
}; private String name;
public String getName() {
return name;
} private Direction(String name) {
this.name = name;
} abstract void show();
}

  

6.4、使用枚举的注意事项

  定义枚举类要用关键字enum;
  所有枚举类都是Enum的子类;
  枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略;
  枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
  枚举类也可以有抽象方法,但是枚举项必须重写该方法;

6.5、枚举在switch语句中的使用

package com.oy.test;

public class Test {

    public static void main(String[] args) {
print(Direction.RIGHT);
} private static void print(Direction d) {
switch (d) { // 括号里面是枚举类型
case FRONT: // 这里不需要Direction.FRONT
System.out.println(d.getName());
break;
case BEHIND:
System.out.println(d.getName());
break;
case LEFT:
System.out.println(d.getName());
break;
case RIGHT:
System.out.println(d.getName());
break;
default:
break;
}
}
}

6.6、枚举类的常用方法

  int compareTo(E o)
  String name(): 返回次枚举常量的名称
  int ordinal(): 返回此枚举常量的编号
  String toString(): 返回此枚举常量的名称
  <T> T valueOf(Class<T> type, String name)
  values() : 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便

public class Test {
public static void main(String[] args) {
// int compareTo(E o)
Direction d1 = Direction.FRONT; // 编号0
Direction d2 = Direction.BEHIND; // 编号1
Direction d3 = Direction.LEFT; // 编号2
Direction d4 = Direction.RIGHT; // 编号3 System.out.println(d1.compareTo(d1)); // 0-0=0
System.out.println(d1.compareTo(d2)); // 0-1=-1
System.out.println(d1.compareTo(d3)); // 0-2=-2
System.out.println(d1.compareTo(d4)); // 0-3=-3 // String name(): 返回此枚举常量的名称
System.out.println("d2.name: " + d2.name()); // BEHIND // int ordinal(): 返回此枚举常量的编号
System.out.println("d3.ordinal: " + d3.ordinal()); // 2 // String toString()
System.out.println("d2.toString: " + d2.toString()); // BEHIND // <T> T valueOf(Class<T> type, String name)
//java.lang.IllegalArgumentException: No enum constant com.oy.test.Direction.LEFT1
// Direction d5 = Direction.valueOf("LEFT1");
Direction d5 = Direction.valueOf("LEFT");
System.out.println("d5: " + d5); // 遍历枚举类
Direction[] directs = Direction.values();
int i = 0;
for (Direction dire : directs) {
System.out.println("directs[" + (i++) + "]=" + dire.toString());
}
}
}

  结果:

0
-1
-2
-3
d2.name: BEHIND
d3.ordinal: 2
d2.toString: BEHIND
d5: LEFT
directs[0]=FRONT
directs[1]=BEHIND
directs[2]=LEFT
directs[3]=RIGHT

参考:

  (1)详解Java的自动装箱与拆箱(Autoboxing and unboxing)

  (2)java enum(枚举)使用详解 + 总结

JDK5的新特性的更多相关文章

  1. Java基础和JDK5.0新特性

    Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...

  2. Javaweb学习笔记——(七)——————myexlipse基本使用、jdk5.0新特性及反射讲解

    1.debug调试模式: *使用这种模式,调试程序(看到程序运行停止在这一行) -显示出来行号 -双击左边,出现一个圆点,表示设置了一个断点 *使用debug as方式,运行程序 -特使是否进入到调试 ...

  3. JDK5的新特性之 增强for

      package cn.itcast.day19.foreach; import java.util.ArrayList; import java.util.Collection; import j ...

  4. Day07 jdk5.0新特性&Junit&反射

    day07总结 今日内容 MyEclipse安装与使用 JUnit使用 泛型 1.5新特性 自动装箱拆箱 增强for 静态导入 可变参数方法 枚举 反射 MyEclipse安装与使用(yes) 安装M ...

  5. JDK5的新特性:泛型、可变参数、静态导入

    数组可以在创建的时候就指定存放的数据类型,这样放入不同类型的时候就会发生编译错误. 而集合却可以存储多种不同类型,这样的话如果是遍历的时候在集合中装了好多不同的数据类型的时候,十分容易发生类型转换错误 ...

  6. Java JDK5.0新特性

    JDK5.0新特性 虽然JDK已经到了1.8 但是1.5(5.0)的变化是最大的 1. 增强for循环 foreach语句 foreach简化了迭代器 作用: 对存储对象的容器进行迭代 (数组, co ...

  7. JavaSE 学习笔记之Jdk5.0新特性(十九)

    Jdk5.0新特性: Collection在jdk1.5以后,有了一个父接口Iterable,这个接口的出现的将iterator方法进行抽取,提高了扩展性. --------------------- ...

  8. JDK5.0新特性 (Day_07)

      JDK5.0新特性   目录 静态导入 自动装箱/拆箱 for-each循环 可变参数 枚举 JDK 5.0 新特性简介 JDK 5.0 的一个重要主题就是通过新增一些特性来简化开发,这些特性包括 ...

  9. JDK5.0新特性(静态导入、自动装箱/拆箱、增强for循环、可变参数、枚举、泛形)

    JDK5中新增了很多新的java特性,利用这些新语法可以帮助开发人员编写出更加高效.清晰,安全的代码. 这些新特性主要有:1.静态导入2.自动装箱/拆箱3.增强for循环4.可变参数5.枚举6.泛型7 ...

  10. JDK5.0新特性1

    目录 静态导入 自动装箱/拆箱 for-each循环 可变参数 枚举 JDK 5.0 新特性简介 JDK 5.0 的一个重要主题就是通过新增一些特性来简化开发,这些特性包括: 静态导入 自动装箱/拆箱 ...

随机推荐

  1. Java中个容器的对比

    List: 有序,列表存储,元素可重复 Set: 无序,元素不可重复 Map:无序,元素可重复,key不能重复 LinkedList :链表,删除和添加效率很高,随机访问效率较ArrayList类低, ...

  2. Android——LruCache源码解析

    以下针对 Android API 26 版本的源码进行分析. 在了解LruCache之前,最好对LinkedHashMap有初步的了解,LruCache的实现主要借助LinkedHashMap.Lin ...

  3. Mac021--编辑软件

    一.思维导图MindNode 知乎Mac常用的思维导图:https://zhuanlan.zhihu.com/p/37768277 MindNode下载地址:https://macblcom.ctfi ...

  4. [Vim] 02 用 Windows 下的 gVim 假装 Linux 下的 Vim

    0. 前言 这应该是极简配置,"极简"就是字面意思 我安装的版本是 8.1.1 来看个素颜 1. 找到 _vimrc 文本 我装在 E:\Program Files (x86)\V ...

  5. CentOS7 开启路由转发

    1.临时开启,(写入内存,在内存中开启) echo "1" > /proc/sys/net/ipv4/ip_forward 2.永久开启,(写入内核) 在 vim /etc/ ...

  6. 安装CentOS7虚拟机

    基础环境 Windows 10 VMware Workstation 1.下载CentOS7镜像 https://www.centos.org/download/ 此次安装使用的版本为: CentOS ...

  7. MySQL explain,Extra分析(转)

    explain结果中有一个Extra字段,对分析与优化SQL有很大的帮助 数据准备: create table user ( id int primary key, name varchar(20), ...

  8. XMPP实现原理

    XMPP协议简介   XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messagi ...

  9. 2018-8-10-VisualStudio-修改配色

    title author date CreateTime categories VisualStudio 修改配色 lindexi 2018-08-10 19:16:52 +0800 2018-2-1 ...

  10. Educational Codeforces Round 68 (Rated for Div. 2) C. From S To T (字符串处理)

    C. From S To T time limit per test1 second memory limit per test256 megabytes inputstandard input ou ...