第2章 增强for&泛型

1.1 泛型1.1.1 泛型的引入
在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换

1.1.1.1 案例代码五:

package com.itheima_03;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
 * 使用集合存储自定义对象并遍历
 * 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,
 * 所以java为了解决这个问题,给我们提供了一种机制,叫做泛型
 * *
 */
public class GenericDemo {
public static void main(String[] args) {
//创建集合对象
Collection  c = new ArrayList();
//创建元素对象
Student s = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
//添加元素对象
c.add(s);
c.add(s2);
//遍历集合对象
Iterator  it = c.iterator();
while(it.hasNext()) {
 String str = (String)it.next();
 System.out.println(str);

}
}
}

class Student {
String name;
int age;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
}
以上代码会发生强制转换异常,原因就是String str = (String)it.next() ,存入集合的是Student,而强转为String,String与Student之间没有任何子父关系不能强转,未使用泛型前有可能发声强制转换异常的问题
1.1.2 泛型的使用
  当类上定义<>的时候就可以使用泛型,例如ArrayList类的定义:
  class  ArrayList<E>,那么我们在创建ArrayList对象的时候就可以指定<>中E的类型
  ArrayList<String> al=new ArrayList<String>(),那么String就把E替换掉了
1.1.2.1 案例代码六:

package com.itheima_03;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
 * 使用集合存储自定义对象并遍历
 * 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,
 * 所以java为了解决这个问题,给我们提供了一种机制,叫做泛型
 *
 * 泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点
 * 泛型好处:
 * 避免了类型转换的问题
 * 可以减少×××警告线
 * 可以简化我们代码的书写
 *
 * 什么时候可以使用泛型?
 * 问API,当我们看到<E>,就可以使用泛型了
 *
 */
public class GenericDemo {
public static void main(String[] args) {
//创建集合对象
Collection<Student> c = new ArrayList<Student>();
//创建元素对象
Student s = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
//添加元素对象
c.add(s);
c.add(s2);
//遍历集合对象
Iterator<Student> it = c.iterator();
while(it.hasNext()) {
//String str = (String)it.next();
//System.out.println(str);
Student stu = it.next();
System.out.println(stu.name);
}
}
}

class Student {
String name;
int age;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
}

1.2 增强for
增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
格式:
[AppleScript] 纯文本查看 复制代码
?
1
2
for(元素的数据类型 变量 : Collection集合or数组){
}
它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。
1.2.1 案例代码七:

package com.itheima_04;
import java.util.ArrayList;
import java.util.Collection;

/*
 * foreach:增强for循环,一般用于遍历集合或者数组
 * 格式:
 * for(元素的类型 变量 : 集合或者数组对象) {
 * 可以直接使用变量;
 * }
注意:在增强for循环中不能修改集合,否则会出现并发修改异常。
public interface Iterable<T>
实现这个接口允许对象成为 "foreach" 语句的目标。

 */
public class ForEachDemo {
public static void main(String[] args) {
 //创建集合对象
Collection<String> c = new ArrayList<String>();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
//增强for循环遍历集合
/*for(Object obj : c) {
System.out.println(obj);
}*/
/*for(String s : c) {
System.out.println(s.toUpperCase());
}*/
for (String string : c) {
c.add("android");
System.out.println(string);
}
}
}

原文地址:http://blog.51cto.com/13517854/2096418

时间: 2024-11-01 13:36:28

第2章 增强for&泛型的相关文章

第4章 C++STL泛型库概述

/* 第二篇 C++STL泛化技术基础 第4章 C++STL泛型库概述 4.1 C++STL的发展历程 4.2 C++STL的各种实现版本 4.3 C++STL的Visual C++编译 4.4 C++STL的体系结构 4.5 C++STL存在的一些问题 4.6 本章小结 第二篇 C++STL泛化技术基础 第4章 C++STL泛型库概述 4.1 C++STL的发展历程 4.2 C++STL的各种实现版本 4.2.1 HP STL 4.2.2 SGI STL 4.2.3 STLport 4.2.4

Java增强的泛型

尽管Java 8是2014年年初才发布的,而Java 9要等到2016年年中,但是目前有一些计划放到某个未来版本(希望是Java 10)中的特性已经合并了进来. 具体而言,有两个比较大的特性已经开始原型设计了,它们是增强的泛型(Enhanced Generics)和值类型(Value Types).有了增强的泛型,Java开发者可以编写像List<int>这样的代码,省去了对基本类型进行装箱的痛苦.新的泛型提案有些地方比较模糊(或者说微妙),需要细心处理,具体见Brian Goetz在最近的设

我的学习之路_第六章_迭代器,泛型

[Collection] 类 接口类 所属包:java.util.Collection Collection类是集合的最顶层的接口,定义了集合共性的方法. 接口无法创建对象,使用多态的方式创建对象 Collection<集合中的数据类型(泛型)> 变量名 = new ArrayList<集合中的数据类型(泛型)>(); Collection接口常用子类接口有: List接口 set接口 List接口常用子类有: ArrayList类 LinkedList类 set接口常用的子类有:

实例讲解-泛型操作范例

1,题目要求: 2,本实例主要采用知识点 关联,泛型,接口. 3,具体内容 现在假设要表示一个让信息: 1)基本信息 2)联系方式. 在此时,肯定要设计一个接口,因为只有实现了此接口的类才应该表示人的信息. interface Info{ // 只有此接口的子类才是表示人的信息 } 此接口定义完成,但是在此接口中没有任何方法,所以此时,这个接口称为标识接口.之后定义人的类,人的类中只要是此接口子类就可以表示人的信息. class Contact implements Info{ // 表示联系方

泛型中的类型约束和类型推断

前一篇文章介绍了泛型的基本概念.在本文中,我们看一下泛型中两个很重要的特性:类型约束和类型推断. 类型约束 相信你还记得前面一篇文章中的泛型方法,在这个泛型方法中,我们就使用了类型约束. 类型约束(type constraint)进一步控制了可指定的类型实参,当我们创建自己的泛型类型或者泛型方法的时候,类型约束是很有用的. 回到前一篇例子中的泛型方法,这个泛型方法就要求可指定的类型实参必须实现了IComparable接口. 为什么会有这个约束呢?原因很简单,因为我们在泛型方法的实现中直接调用T类

理解C#泛型

在C# 2.0中引入了泛型,泛型的出现解决了编码中的很多问题.相信大家一定经常用到"System.Collections.Generic"命名空间中的泛型集合类("Generic"就是泛型的意思).在C# 1.0中,我们还在使用"System.Collections"命名空间中的非泛型集合类,那么看看我们在没有泛型的时候遇到的问题. 问题1:强制类型转换 ArrayList stuList = new ArrayList(); Student w

黑马程序员_java泛型

-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 由于本人认知有限,无法详细介绍泛型,因此本文只是粗略的描述泛型的相关知识,在以后的学习过程中会对这篇文章进行修改,希望这篇文章不会给读者带来迷惑,特此声明 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样.

C#图解教程 第十九章 LINQ

LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from-let-where片段 from子句let子句where子句 orderby子句select-group子句查询中的匿名类型group子句查询延续:into子句 标准查询运算符 标准查询运算符的签名查询表达式和标准查询运算符将委托作为参数LINQ预定义的委托类型使用委托参数的示例使用Lamba表达式参数的示例 LINQ to XML 标记语言XM

Java泛型与集合笔记

第一章 Java的泛型为了兼容性和防止代码爆炸,在编译成字节碼时会进行类型擦除,编译器自动添加代码做类型转换(用到List<Integer>的地方用Integer来做转换),自动做装箱拆箱,做foreach替换,在多个参数的情况下自动打包进一个数组里 第二章 子类型替换原则:任意可以使用父类型值的地方,用可以用子类的对象地址值替换