JDK5.0以后的新特性

泛型、静态导入、可变参数、增强for()循环、自动拆装箱

一、泛型

1、概述:将原来具体的类型参数化,将数据类型(只能是引用数据类型)作为一种参数传递,提高代码的安全性;

2、格式:<数据类型>

3、位置: 1)数组、集合在创建对象的时候

ArrayList<String> al = new ArrayList<String>(); //后面的String叫作泛型推断

ArrayList集合使用泛型<String>限定后则该集合就只能存储String类型的元素,否则就会报错

2)泛型定义在类、接口上

public class ObjectDemo<T>{ //在类中就可以把T 当做Ojbect类型来使用

private T t;

public T get(){

return t;

}

}

3)泛型定义在方法上

public <T> void show(T t){ //相当与需要传入的参数是Object类型的

System.out.println(t);

}

4、通配符

<?> 代表任意数据类型:可以是Object类型以及Java类

<? extends E> 向下限定,要么跟当前类型一样,要么是它的子类

<? super E> 向上限定,保持当前类型一致,或者是他的父类

一般用在方法的参数中:

5、作用

1)将运行时期的异常提前到了编译期间

2)不用再强制类型转换

3)解决了一个黄色警告线的问题

egg:

二、增强for()循环 ———— 用于遍历数组、集合

1、格式

for(数据类型 名称 :需要遍历的集合或者数组名){

System.out.println(名称); //相当于循环了 集合.size() 多次,每次打印一个元素

}

2、注意事项

增强for()循环如同集合的迭代器遍历方法,不能在循环内用集合的方法修改集合内的元素,否则就会报java.util.ConcurrentModificationException异常

egg: //集合内如有bb就给集合添加元素dd

public class ForDemo {

public static void main(String[] args) {

ArrayList<String> al = new ArrayList<String>();

al.add("aa");

al.add("bb");

al.add("cc");

for(String s : al){

if(s.equals("bb")){

al.add("dd"); //错误的写法

}

}

}

}

3、嵌套遍历

格式: ArrayList<ArrayList<String>> al = new ArrayList<ArrayList<String>>();

for(ArrayList arr : al){

for(String s : arr){

}

}

egg:

三、自动拆装箱

1、概述:基本数据类型与其包装类之间的自动相互转换,无需强制转型;

装箱:就是自动将原始类型值转换成对应的对象;

拆箱:将基本数据类型的对象自转换成基本数据类型;

2、基本数据类型与其对应的包装类

byte--------->Byte

short------->Short

int--------->Integer

long-------->Long

float------->Float

double------>Double

boolean----->Boolean

char-------->Character

3、优缺点

优点:降低代码量,方便使用

弊端:有可能会影响程序的性能

egg: Integer num = 0;

for(int i = 0;i < 1000;i++){

num += i;

}

在这里,num每次循环进去时候是Integer类型,num += i;时候自动拆箱成int类型,出循环再自动装箱成Integer类型,在庞大的循环中会大大的降低程序的性能,生成无用对象增加GC压力;

所以,在使用中尽量避免。

四、静态导入

1、概述一个类中只要有静态方法就能使用静态导入,使其静态方法在本类中直接可见

2、格式:import static java.包名.类名.方法;

egg: import static java.lang.Math.random; //静态导入Math类中的random()方法;

import static java.lang.Math.*; //静态导入Math类中的所有静态方法;

3、使用:直接使用方法名调用

egg: import static java.lang.Math.*;

public class MathDemo {

public static void main(String[] args) {

random();

abs(-1);

pow(3, 2);

sqrt(4);

}

}

4、注意事项:

1)如果要使用静态导入,为了防止在一个类中出现同名的方法,那么调用的时候需要前缀来区别开来;

2)过度的使用静态导入会使代码的可读性降低。

五、可变参数

1、概述:参数类型相同,个数不确定时,将其看作一个数组处理————可变参数

2、格式:修饰符 返回值类型 方法名(参数类型...变量名){}

egg: public static int add(int ... x){ //这里的 int...x 相当与一个暂时不知道长度的数组 int[]x;

int num = 0; //在使用add()方法时候,添加几个参数,数组长度就是多少;

for(int i = 0; i < x.length;i++){

num += x[i];

}

return num;

}

3、特点

1)如果方法中有多个参数,那么可变参数必须在最后一个;

2)可变参数在实际传参的时候就知道到底有多少个了;

3)在使用时,相当与创建了一个数组,可使用循环遍历,如上egg。

时间: 2024-10-17 00:57:39

JDK5.0以后的新特性的相关文章

c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.------------SDK2.0功能-------------2 2.1. 泛型:2 3. --------------sdk3.0  增加了以下功能..2 3.1. LINQ 3 4.  ----------sdk4

C# 6.0可能的新特性

C# 6.0可能的新特性 1.主构造函数(Primary Constructors) 主构造函数给类中的变量赋值 Before public class Point { private int x, y; public Point(int x, int y) this.x = x; this.y = y; } } After public class Point(int x, int y) { private int x, y; } 2.自动属性赋值(Auto Properties) Befor

Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结

Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系 1 2. paip.------------SDK2.0功能------------- 2 2.1. 泛型: 2 3. --------------sdk3.0  增加了以下功能.. 2 3.1. LINQ 3 4.  ----------sdk4.0 新加功能------------ 3 5. ].Net4.5的五项强大新特性 3 5.

MySQL 8.0.2复制新特性(翻译)

译者:知数堂星耀队 MySQL 8.0.2复制新特性 MySQL 8 正在变得原来越好,而且这也在我们MySQL复制研发团队引起了一阵热潮.我们一直致力于全面提升MySQL复制,通过引入新的和一些有趣的功能.此外,我们还听取了社区的建议和反馈.因此,我们很荣幸能够与你一同见证最新版本(MySQL 8.0.2)的里程碑式的发布,为此我们总结了其中的一些值得注意的变化.跟随我们下面的博客,我们将会分享这些新功能的一些见解. 我们对MySQL 组复制进行了加强,主要有以下几个方面: 不允许对离开组的成

解析Hadoop 2.3.0版本的新特性

2014年2月20日,Hadoop 2.3.0版本发布,这是apache 在2014年发布的第一个Hadoop版本,揭开了Hadoop 2014发展的序幕. 该版本引入了很多大家期待已久的特性,包括HDFS 的异构层次化存储架构.DataNode Cache,YARN的单点故障解决方案,以及MapReduce的自动化部署等.本文尝试为大家解析这些特性,并给出一些资料供大家深入了解. HDFS新特性. 2.3.0中引入了两个大的HDFS特性,分别是异构层次化存储架构和DataNode Cache.

有史来最大改变 Android 5.0十大新特性

有史来最大改变 Android 5.0十大新特性 2014.10.16 14:51:31 来源:腾讯数码作者:腾讯数码 ( 0 条评论 ) 距离Android系统上一次重大更新不到一年的时间,谷歌再一次从KitKat升级到了Lollipop,而两次都使用糖果来命名,营销的目的显露无 遗.当我们首次看到Android 5.0 Lollipop这个名字的时候,就已经意识到这将是Android系统有史以来变化最大的一次升级. 首先,在感官界面设计上,我们彻底迎来了Android系统的扁平化时代,新的系

【HANA系列】SAP HANA 1.0 SPS 11 新特性

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA 1.0 SPS 11 新特性 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 1:SQL新特性更新2:System Views新特性更新3:Smart Data Access(好像针对IBM出的)4:Multistore tables新特性 原文地址:https://www.cnbl

(数据科学学习手札73)盘点pandas 1.0.0中的新特性

本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 毫无疑问pandas已经成为基于Python的数据分析领域最重要的包,而就在最近,pandas终于迎来了1.0.0版本,对于pandas来说这是一次更新是里程碑式的,删除了很多旧版本中臃肿的功能,新增了一些崭新的特性,更加专注于高效实用的数据分析,本文就将针对pandas 1.0.0在笔者眼中比较重要的特性进行介绍,对于想要完整彻底了解新版

java基础(1)-比较jdk5,jdk6,jdk7的新特性

jdk8已经出来好长时间了,这里自己学习时简单总结的jdk5,jdk6和jdk7的新特性:本文提纲: 一.jdk5的新特性 二.jdk6的新特性 三.jdk7的新特性 一.jdk5的新特性 首先简单介绍一下各种特性及其使用 1.泛型(Generic)C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能.一个集合可以放任何类型的对象, 相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换.猛虎引入了泛型,它允许指定集 Collection<String>