3.Java笔记:主要包括枚举,集合,迭代器,增强for,泛型

0. 枚举

两种实现方式

1. 自定义枚举类

class Season {
    private String name;
    private String desc;
    /*
    1.将构造器私有化
    2.去掉setXxx方法,防止属性被修改
    3.在Season内部,直接创建固定对象
    4.优化,可以加入final关键字
     */

    public static final Season SPRING = new Season("春天", "温暖");
    public static final Season SUMMER = new Season("夏天", "炎热");
    public static Season AUTUMN = new Season("秋天", "凉爽");
    public static Season WINTER = new Season("冬天", "寒冷");

    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

2. 使用枚举关键字

enum Season2 {
    SPRING("春天", "温暖"),
    SUMMER("夏天", "炎热"),
    AUTUMN("秋天", "凉爽"),
    WINTER("冬天", "寒冷");

    private String name;
    private String desc;

    Season2(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "Season2{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}
  1. 当我们使用 enum 关键字开发一个枚举类时,默认会继承 Enum 类, 而且是一个 final 类[如何证明],老师使用 javap 工 具来演示
    类的单继承机制,使得enum可以多实现接口,但不能继承其他的类。
  2. 传统的 public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成 SPRING(“春天”, “温暖”), 这里必 须知道,它调用的是哪个构造器.
  3. 如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略 第 482页
    韩顺平循序渐进学 Java 零基础第 483页
  4. 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
  5. 枚举对象必须放在枚举类的行首.

枚举方法

3. 三个基本的 Annotation:

  1. @Override: 限定某个方法,是重写父类方法, 该注解只能用于方法

  2. @Deprecated: 用于表示某个程序元素(类, 方法等)已过时 。不推荐使用,可以使用。什么都可以修饰。

  3. @SuppressWarnings: 抑制编译器警告。
    可以放置在类,方法,属性前。
    @Target 是修饰注解的注解,称为元注解。

1. 集合框架

​ 学习集合目标

​ 1.会使用集合存储数据
​ 2.会遍历集合,把数据取出来
​ 3.掌握每种集合的特性
​ 2个接口:
​ List接口:
​ 1.有序的集合(),存储和取出元素的顺序相同
​ 2.允许存储重复元素
​ 3.有索引,可以使用普遍的for循环遍历
​ Vector集合 ArrayList集合 LinkedList集合
​ Set接口:
​ 1.不允许有重复元素
​ 2.没有索引下标(不能使用for循环遍历)
​ TreeSet集合 HashSet集合
​ LinkedHahSet(继承父类HashSet)(有序集合,存和取顺序一样)

		List接口 与 Set接口		向上共性抽取形成Collection接口
	定义的是所有单列集合中共性的方法
	所有的单列集合都可以使用共性的方法
	没有带索引的方法
	
	集合框架的的学习方式:
		1.学习顶层。学习顶层接口/抽象类中共性的方法,所有的子类都可以使用。
		2.使用底层。使用底层子类创建对象时用。
	 collection中常用功能(顶层功能):
		public boolean add(E e);	把给定对象添加到当前集合中。
		public void clear();		清空集合中所有元素。
		public boolean remove();	把给定对象在当前集合中删除。
		public boolean contains();	判断当前集合中是否包含给定的对象。
		public boolean isEmpty();	判断当前集合是否为空。
		public int size();			返回集合中元素的个数。
		public Object[] toArray();	把集合中的元素,存储到数组中。

2. 迭代器Iterator

​ 迭代:在collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,
​ 如果有,就把这个元素取出来,继续再判断,如果还有就再取出来。一直到集合中所有元素全部取出。
​ 这种取出方式叫迭代。
​ Iterator接口中有两个常用方法:

boolean hasNext();		如果仍有元素可以迭代,返回true;否则返回false。
​			E next();				返回迭代的下一个元素。
​		
​		Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象。
​			collection方法中有一个方法叫iterator(),返回的就是Iterator接口的实现类对象。

​ 迭代器的使用步骤【重点】:
​ 1.使用集合中的方法iterator()获取迭代器的实现类对象。使用Iterator接口接收。(多态)
​ 2.使用Iaterator接口中的hasNext()方法判断有没有下一个元素。
​ 3.使用Iaterator接口中的next方法取出集合中的下一个元素。
​ 迭代器Iterator有泛型,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型。

3. 增强for循环:

​ 用来遍历集合和数组
​ 格式:
​ for(集合/数组数据类型 变量名:集合名/数组名){
​ sout(变量名);}
​ 【增强for循环必须有被遍历的目标。目标只能是collection或者是数组。】

4. 泛型:

​ 创建集合对象,使用泛型
​ 好处:
​ 1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
​ 2.把运行期异常(代码运行之后会抛出的异常),提升到了编译器。
​ 弊端:
​ 泛型确定后,就只能存储那一种数据类型

创建集合对象,不使用泛型:
好处:集合不使用泛型,默认的就是Object类型,可以存储任意类型的数据。
弊端:不安全,会引发异常。

泛型的定义和使用:
	不确定用什么数据类型的时候可以使用泛型;
	泛型可以接受任意的数据类型,【创建对象的时候确定泛型的数据类型】。
	
含有泛型的方法:
	泛型定义在方法的修饰符和返回值类型之间
	格式:	
		修饰符	<泛型> 返回值类型 方法名(参数列表 (使用泛型)){
		//...}
	
含有泛型的接口:
	 首先定义含有泛型的接口。和定义含有泛型的类比较像。
	 使用方法2种:
	 1.定义接口的实现类时,确认泛型具体数据类型。(实现接口,指定接口的类型。)
	 2.接口是用什么泛型,实现类就用什么泛型,类跟着接口走。
		相当于定义了一个含有泛型的类,创建对象的时候确定泛型。

泛型通配符:
	?代表任意数据类型
使用方式:
	不能创建对象使用
	只能作为方法的参数使用。【定义的时候不能用,作为参数传递的时候可以用】
		定义一个方法以后,我们不知道方法体中的集合使用什么数据类型,可以使用泛型通配符 ? 来接收数据类型。
		泛型是没有继承概念的。
泛型的上限限定,下限限定。
(extends   super    父类   ???)

斗地主案例:
四部思路。
Collections.shuffle方法。对集合进行随机打乱排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值