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我们一起学习

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

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

    ——>  -128~127之间的特殊性.为什么要这样设计,好处? ——>  享元模式(Flyweight Pattern):享元模式的特点是,复用我们内存中已存在的对象,降低系统创建对象实 ...

  2. 别说你不知道java中的包装类,wrapper type,以及容易在自动拆箱中出现的问题

    很多时候,会有人问你,你知道什么是包装类吗? 或者高端一点问你你知道,wrapper type,是什么吗? 然后你就懵逼了,学了java很多时候都不知道这是啥. 其实问你的人,可能只是想问你,java ...

  3. java 1.5 自动拆箱和装箱的注意事项

    背景 java1.5后引入了自动装箱和自动拆箱的概念 自动拆箱:将引用类型转化为基本数据类型 自动装箱:将基本数据类型装为引用类型 但是实际使用中,什么情况自动拆箱什么情况自动装箱呢? 自动装箱 In ...

  4. Java进阶之自动拆箱与自动装箱

    序. java基本类型介绍 java中,基本数据类型一共有8种,详细信息如下表: 类型 大小 范围 默认值 byte 8 -128 - 127 0 short 16 -32768 - 32768 0 ...

  5. 享元模式(FlyWeight Pattern)及其在java自动拆箱、自动装箱中的运用

    本文主要从三个方面着手,第一:简要介绍享元模式.第二:享元模式在基本类型封装类中的运用以Integer为例进行阐述.第三:根据第一.第二的介绍,进而推出java是如何实现自动拆箱与装箱的. 第一:简要 ...

  6. Java中的自动拆箱装箱(Autoboxing&Unboxing)

    一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类 ...

  7. JavaStudy——Java之自动拆箱与自动装箱

    java基本类型介绍 java中,基本数据类型一共有8种,详细信息如下表: 类型 大小 范围 默认值 byte 8 -128 - 127 0 short 16 -32768 - 32768 0 int ...

  8. Java知多少(24)包装类、拆箱和装箱详解

    虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎合人类根深蒂固的习惯, ...

  9. [Java学习] Java包装类、拆箱和装箱详解

    虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎合人类根深蒂固的习惯, ...

随机推荐

  1. 使用vba做一个正则表达式提取文本工具

    测试中经常会遇到对数据的处理,比如我要删除某些特定数据,数据源是从网页请求中抓取,这时候可能复制下来一大堆内容,其中我们只需要特定的某些部分,笔者通常做法是拷贝到notepad++中处理,结合RegT ...

  2. Redis常用命令--Hashes

    Hash是由键值对组成的map.Hashes的底层是通过字典实现的.一个哈希表里面可以有多个哈希表节点.而每个哈希节点就保存了字典中的一个键值对. 字典是一种用于保存键和值对的抽象数据结构.字典里的每 ...

  3. [HEOI2015]小Z的房间

    Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. ...

  4. bzoj 3924: [Zjoi2015]幻想乡战略游戏

    Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来, ...

  5. poj 1873 凸包+枚举

    The Fortified Forest Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6198   Accepted: 1 ...

  6. 51Nod 1196 字符串的数量

    用N个不同的字符(编号1 - N),组成一个字符串,有如下要求: (1) 对于编号为i的字符,如果2 * i > n,则该字符可以作为结尾字符.如果不作为结尾字符而是中间的字符,则该字符后面可以 ...

  7. 一款基于Vue的扩展性组件库 VV-UI

    github: https://github.com/VV-UI/VV-UI 演示地址: https://vv-ui.github.io/VV-UI/#/meta-info 1. LoadingBar ...

  8. C#之Action和Func的用法

    以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发 ...

  9. 构建纯TypeScript应用

    构建纯TypeScript应用 现在只有命令行应用的例子. 前言 现在,应用开发的趋势是命令行接口应用和Web应用. node.js 和 typescript的崛起所以,这里讨论如何创建纯的TypeS ...

  10. sqlserver 截取字符串(转)

    SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要 ...