黑马程序员-jdk1.5新特性-程序员宅基地

技术标签: jdk  iterator  string  generics  integer  list  

---------------------- android培训java培训、期待与您交流! --------------------

jdk1.5 中出现的新特性:

1)泛型(Generics)

2)增强的“for”循环(Enhanced For Loop)

3)自动装箱 / 自动拆箱(Autoboxing / unboxing)

4)类型安全的枚举(Type safe enums)

5)静态导入(Static import)

6)可变参数(Varargs)

1.泛型:

C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。Jdk1.5引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。泛型就是变量类型的参数化。     

 

importjava.util.List;

importjava.util.ArrayList;

public classGenericsTest{

 

      public static void main(String[] args){

 

           List<String> list = newArrayList<String>();

           list.add("abc");

 

           String str = newString("bd");

list.add(str);

 

           list.add(1);//编译时会报错,list只能存储String类型的

      }

}

2. 增强的“for”循环:

曾强的“for”循环又叫For-Each循环。For-Each循环的加入简化了集合的遍历。

importjava.util.List;

importjava.util.ArrayList;

importjava.util.Iterator;

public classGenericsTest{

 

      public static void main(String[] args){

 

           List<String> list = newArrayList<String>();

           list.add("abc");

 

           String str = newString("bd");

           list.add(str);

 

           //list.add(1);//编译时会报错,list只能存储String类型的

 

           for(String s : list){

          

           System.out.println(s);

          

           }

 

 

           for(int i=0; i < list.size();i++){

          

            System.out.println(list.get(i));

 

           }

 

 

 

           for(Iterator i = list.iterator();i.hasNext();){

       

          System.out.println(i.next());

 

           }

      }

}

 

3. 自动装箱 / 自动拆箱

自动装包/拆包大大方便了基本类型数据和它们包装类地使用。

自动装包:基本类型自动转为包装类.(int >> Integer)

自动拆包:包装类自动转为基本类型.(Integer >> int)

在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制解决了我们的问题。

public class Test1

{

      public static void main(String[] args){

     

      Integer a = 12;//自动装箱

 

      int b = a;//自动拆箱

 

      System.out.println(a == b);//输出为true

     

      }

}

4. 类型安全的枚举:

JDK1.5 引入枚举类型,使用关键字 enum,我们可以这样定义一个枚举类型:

public enum Color{

Red,Gree,Blue//Color 枚举类型有此 3 个实例,对象。

}   然后可以这样来使用Color myColor=Color.red 枚举类型还提供了 2 个有用的静态方法values( )和 valueOf( )。 publicclass Test {

public static voidmain(String[] args) {

ColormyColor=Color.Gree;

System.out.println(myColor);

System.out.println("------");

for(Colorcolor:Color.values()) {

System.out.println(color);

}

}

}

定义枚举类型本质上就是在定义一个类别,只不过很多细节由编译器帮你完成了,所以某些程度上,enum 关键 字的作用就像是 class 或 interface,我们所定义的每个枚举类型都继承自 java.lang.Enum 类,枚举中的每个成员默 认都是 public final,且是 static 的,所以你可以通过 类名.枚举成员名 直接使用它们。 而每个枚举的成员其实就是你定义的枚举类型的一个实例(Instance) ,换句话说,当定义了一个枚举类型后, 在编译时刻就能确定该枚举类型有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了, 这些实例在编译期间就已经完全确定下来了。

 public enum Coin {
 /* * Coin枚举的3个对象,下面有Coin的有字符串参数的
*构造方法,所以这3个实例都传进了字符串值,要用括号 括
*起来 3个对象,每个对象都维护着一个value值,Coin构
*造方法就是给value赋值 */
hs("haha"),cwj("menghuan"),abc("xiyou");
public String value;
public String getValue() { return value; }
Coin(String value)//Coin的有字符串参数的构造方法 
{ this.value=value; }
 public static void main(String[] args) {
Coin coin = Coin.cwj;
System.out.println(coin.getValue());

} //运行结果: menghuan

5. 静态导入:

要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。

6. 可变参数:

可变参数(Varargs) :

可变参数使程序员可以声明一个接受可变数目参数的方法。

注意:可变参数必须是方法声明中的最后一个参数,即一个方法不可能具有两个或两个以上的可变参 可变参数本质上就是一个数组,对于某个声明了可变参数的方法来说,我们既可以传递离散的值,也可以 传递数组对象。但如果将方法中的参数定义为数组,那么只能传递数组对象而不能传递离散的值。

public class Test{

private static intsum(int... nums) {

int sum=0;

for(intnumbers:nums) {

 sum+=numbers;

 }

return sum;

}

public static voidmain(String[] args) {

int result=sum(newint[]{1,2});

System.out.println(result);

result=sum(3,4);

System.out.println(result);

 }

 }

运行结果:3 7


------------------------ android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Xujun_Feng/article/details/7251270

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&lt;malloc.h&gt;#include&lt;iostream&gt;#include&lt;stack&gt;#include&lt;queue&gt;using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签