JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法

简介: JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法 学完我们的java之旅,其实收获还是很多的,但是依然还有很多的知识点需要我们的突破,所以写下这个java进阶之旅的系列,这个系列不会说的那么的基础,主要是对一些高级点的功能进行剖析,所以,一起来看看吧!一.

JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法


学完我们的java之旅,其实收获还是很多的,但是依然还有很多的知识点需要我们的突破,所以写下这个java进阶之旅的系列,这个系列不会说的那么的基础,主要是对一些高级点的功能进行剖析,所以,一起来看看吧!

一.增强for循环

for循环在我们的开发中是非常非常的多的,但是有多少人会用增强for循环?其实还是有很多人会用哈,但是还是有很多人一知半解,我们来看一下增强for循环的格式是怎样的

  • 语法

for(type 变量名:集合变量名){….}

  • 注意事项
    • 1.迭代变量必须在括号内定义
    • 2.集合变量可以是数组或实现了iterable接口的集合类

我们写一个小例子来查看一下就知道了

public class ForClass {

    public static void main(String[] args) {

        int[] mInt = { 1, 3, 5, 7, 9 };

        for (int x : mInt) {
            System.out.println("result:" + x);
        }
    }
}

输出的结果也是总所周知,全部输出来了,这里就不演示了 ,这就是比较简单的增强for循环了

二.基本数据类型的自动拆箱与装箱

这个基本数据类型的拆箱与装箱是什么呢?这样,我们用思路来说明,我们看这段代码

Integer num1 = 3;

如果详细分析的话,应该是把一个基本数据类型3装箱成了Integer 赋值给了num1,如果你使用过以前的JDK版本,具体是几,好像是1.5还是1.6之前是会报错的,再来看下拆箱,其实可以看一下这段代码

System.out.println(num1 + 3);

Integer 和3相加,是等于6,在现在的JDK版本早就支持了自动拆箱和装箱,所以我们现在只要了解一下就好了,这里要注意以下int范围是-128–127,如果超过了就GG

三.享元设计模式(flyweight)

同样的,这里会牵扯到一个设计模式,如果我们需要很多个对象,但是每一个对象的使用方法都是一样的,数据也是一样的,所以我们就没必要创建这么多,就创建一个就好了,可重复利用,这个就是享元设计模式了,是不是很简单

四.枚举的概述

说道枚举,他是JDK1.5新增加的一个概念,其实现在开发用的相对还是比较少的, 但是你如果翻阅12年上下的代码,你可以看到很多的枚举的影子,他到底是什么呢?我们来深入了解了解


  • 1.我们为什么要用枚举

说道这个,我们先来看个例子,比如要定义星期几或者性别的变量,我们该怎么去定义?假设用1-7分别表示星期一到星期日,但是有人可能会写成等于0去了
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现的这一目标


  • 2.用普通类如何实现枚举功能

我们可以模拟一下试试看,需要做的事情有

  • 私有的构造方法
  • 每个元素分别用一个公有的静态变量表示
  • 可以有若干公有方法或抽象方法

我们先用基本的JAVA类来演示一下枚举的作用

public class WeekDay {

    private WeekDay() {
    };

    public final static WeekDay SUN = new WeekDay();
    public final static WeekDay MON = new WeekDay();

    public WeekDay nextDay() {
        if (this == SUN) {
            return MON;
        } else {
            return SUN;
        }
    }

    public String toString() {
        return this == SUN ? "SUN" : "MON";
    }
}

这个是我们用普通的方式来实现枚举的思想,这也是可以的,但是我们JAVA中提供了枚举的应用姿势:

五.枚举的应用

其实但从枚举来说,使用起来还是比较简单的,我们来看下是什么?

public class ForClass {

    public static void main(String[] args) {

        WeekDay weekDay = WeekDay.THI;
        System.out.println(weekDay);
        System.out.println(weekDay.name());
        System.out.println(weekDay.ordinal());

    }

    public enum WeekDay {
        SUN, MON, TUE, WED, THI, FRI, SAT
    }
}

这样我们就可以直接使用,并且输出的时候可以直接实现打印值的功能,就像上述我们JAVA类的功能一样

六.枚举的构造方法

我们更进一步的来演示一下其他使用方法

public enum WeekDay {

        SUN(1), MON, TUE, WED, THI, FRI, SAT;
        /**
         * 1.需要在函数之后 
         * 2.必须私有
         */
        private WeekDay() {
            System.out.println("只要用到了这个枚举类,都会执行空构造函数");
        }

        private WeekDay(int index){
            System.out.println("函数后面接参数就会调用有残构造");
        }
    }

这段看起来应该并不困难,主要是了解构造函数的规律和什么时候调用,注意一下就好了

七.枚举的抽象方法

我们继续来看,看下抽象函数的使用方法,我们现在假设路上的红绿灯,我们应该怎么去写?

public enum Color {
        RED(5) {
            @Override
            public Color nextColor() {
                return GREEN;
            }
        },
        GREEN(10) {
            @Override
            public Color nextColor() {
                return BLUE;
            }
        },
        BLUE(15) {
            @Override
            public Color nextColor() {
                return RED;
            }
        };
        // 返回下一种颜色
        public abstract Color nextColor();

        // 灯显示时间
        private int time;

        private Color(int time) {
            this.time = time;
        }
    }

实现起来还是有点涵养的对吧,其实思想很通顺,我们有三个灯,他都有显示下一个灯的功能,所以可以直接抽象,而且他有是都需要显示时间,所以,我们可以写一个有参的构造函数,就ok了

对了

  • 枚举只有一个成员时,就可以作为一种单利的实现方式

我们本章就先到这里吧,这篇只能算是只是一个基础概念,为我们后面做铺垫,我们下篇会涉及到一些深一点的东西,比如反射的机制等

有兴趣的可以加群:555974449我们一起学习

目录
相关文章
|
26天前
|
存储 缓存 安全
Java中的数据类型
Java语言提供了八种基本类型,分为4类8种:六个数值型(四个整数型byte、short、int、long,两个浮点型float、double)、一个字符型char和一个布尔型boolean。每种基本类型有固定的位数、取值范围及默认值。此外,还存在`void`类型,但无法直接操作。基本类型支持隐式和显式类型转换,并有对应的包装类如`Integer`、`Double`等,用于在需要对象的场景中使用。包装类支持自动装箱与拆箱机制,简化了基本类型与引用类型的转换,但需要注意性能和空指针异常等问题。
Java中的数据类型
|
29天前
|
Java
Java之for循环
Java 提供了三种 for 循环方式:fori、foreach 和 Stream.foreach。fori 是最早的循环形式,现已较少使用;foreach 是对 fori 的语法糖,编译时会自动转换;Stream.foreach 结合 lambda 表达式使用,代码更简洁,但不支持 break 和 return。
66 11
Java之for循环
|
23天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
23天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
23天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
23天前
|
设计模式 Java 程序员
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
本系列文章聚焦于面向对象软件设计中的设计模式,旨在帮助开发人员掌握23种经典设计模式及其应用。内容分为三大部分:第一部分介绍设计模式的概念、UML图和软件设计原则;第二部分详细讲解创建型、结构型和行为型模式,并配以代码示例;第三部分通过自定义Spring的IOC功能综合案例,展示如何将常用设计模式应用于实际项目中。通过学习这些内容,读者可以提升编程能力,提高代码的可维护性和复用性。
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
|
30天前
|
设计模式 算法 搜索推荐
设计模式概述
设计模式是软件工程中的最佳实践,帮助开发者解决常见问题,提高代码的可重用性、可读性和可靠性。学习设计模式可以提升思维能力、标准化程序设计、增强代码质量。文章介绍了设计模式的分类(创建型、结构型、行为型)及其在流行框架中的应用,建议读者掌握SOLID原则并深入学习GoF的23种设计模式。
78 3
设计模式概述
|
2月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
2月前
|
Java
Java基础之数据类型
Java基础之数据类型
23 6
|
2月前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
119 7

热门文章

最新文章