从初学者到专家:Java枚举的完整指南

1.枚举的概念

在Java中,枚举是一种特殊的数据类型,用于定义一组有限的命名常量。枚举提供了一种更直观、更可读的方式来表示一组相关的常量,并且可以为这些常量绑定其他数据或行为。

背景:枚举是在JDK1.5以后引入的。

主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式

要定义一个枚举,需要使用enum关键字。以下是一个简单的枚举定义的示例:

创建一个枚举类:TestEnum

public enum TestEnum {
  RED,        // 枚举常量 RED
  BLACK,      // 枚举常量 BLACK
  GREEN,      // 枚举常量 GREEN
  WHITE;      // 枚举常量 WHITE
  
  public static void main(String[] args) {
    TestEnum testEnum2 = TestEnum.BLACK;   // 创建一个变量 testEnum2 并将其设置为 BLACK 枚举常量
    
    switch (testEnum2) {    // 使用 switch 语句根据 testEnum2 的值进行判断
      case RED:
        System.out.println("red");    // 如果 testEnum2 的值为 RED,则输出 "red"
        break;
      case BLACK:
        System.out.println("black");  // 如果 testEnum2 的值为 BLACK,则输出 "black"
        break;
      case WHITE:
        System.out.println("WHITE");  // 如果 testEnum2 的值为 WHITE,则输出 "WHITE"
        break;
      case GREEN:
        System.out.println("green");  // 如果 testEnum2 的值为 GREEN,则输出 "green"
        break;
      default:
        break;
    }
  }
}

2.枚举的常用方法

Enum类是所有枚举类型的基类,在Java中提供了一些常用的方法来操作和处理枚举类型。下面是
Enum类的常用方法:
1.values ()方法:
package demo2;

public enum TestEnum {
    RED,        // 枚举常量 RED
    BLACK,      // 枚举常量 BLACK
    GREEN,      // 枚举常量 GREEN
    WHITE;      // 枚举常量 WHITE

    public static void main(String[] args) {
        TestEnum[] values = TestEnum.values();
        for (TestEnum value : values) {
            System.out.println("Name: " + value.name() + ", Index: " + value.ordinal());
        }


    }
}

运行截图:


valueOf(String name)方法:

package demo2;

public enum TestEnum {
    RED,        // 枚举常量 RED
    BLACK,      // 枚举常量 BLACK
    GREEN,      // 枚举常量 GREEN
    WHITE;      // 枚举常量 WHITE

    public static void main(String[] args) {
        String colorName = "GREEN";
        TestEnum enumInstance = TestEnum.valueOf(colorName);
        System.out.println("Enum Constant Name: " + enumInstance.name());


    }
}

运行截图:


3.ordinal()方法:
package demo2;

public enum TestEnum {
    RED,        // 枚举常量 RED
    BLACK,      // 枚举常量 BLACK
    GREEN,      // 枚举常量 GREEN
    WHITE;      // 枚举常量 WHITE

    public static void main(String[] args) {
        TestEnum testEnum2 = TestEnum.BLACK;   // 创建一个变量 testEnum2 并将其设置为 BLACK 枚举常量

        int index = testEnum2.ordinal();   // 使用 ordinal() 方法获取 testEnum2 的索引位置
        System.out.println("Index: " + index);
    }
}

 运行截图:


4.compareTo()方法:

public enum TestEnum {
  RED,        // 枚举常量 RED
  BLACK,      // 枚举常量 BLACK
  GREEN,      // 枚举常量 GREEN
  WHITE;      // 枚举常量 WHITE
  
  public static void main(String[] args) {
    TestEnum testEnum1 = TestEnum.RED;    // 创建一个变量 testEnum1 并将其设置为 RED 枚举常量
    TestEnum testEnum2 = TestEnum.BLACK;  // 创建一个变量 testEnum2 并将其设置为 BLACK 枚举常量
    
    int comparisonResult = testEnum1.compareTo(testEnum2);  // 使用 compareTo() 方法比较 testEnum1 和 testEnum2 的顺序
    
    if (comparisonResult < 0) {    // 如果 comparisonResult 小于 0
      System.out.println(testEnum1 + " comes before " + testEnum2);  // 输出 testEnum1 在 testEnum2 之前
    } else if (comparisonResult > 0) {   // 如果 comparisonResult 大于 0
      System.out.println(testEnum1 + " comes after " + testEnum2);   // 输出 testEnum1 在 testEnum2 之后
    } else {
      System.out.println(testEnum1 + " and " + testEnum2 + " are the same");  // 输出 testEnum1 和 testEnum2 相同
    }
  }
}

 运行截图:


3.枚举的构造方法

枚举类型在Java中可以包含构造方法,用于初始化枚举常量。枚举的构造方法是私有的,因为枚举常量在定义时就被实例化,并且不能在其他地方进行实例化。

同时:当枚举对象有参数后,需要提供相应的构造函数

代码案例1:

public enum TestEnum {
  RED("Red Color"),        // 枚举常量 RED
  BLACK("Black Color"),    // 枚举常量 BLACK
  GREEN("Green Color"),    // 枚举常量 GREEN
  WHITE("White Color");    // 枚举常量 WHITE

  private String color;    // 枚举常量的属性

  private TestEnum(String color) {
    this.color = color;    // 枚举常量的构造方法
  }

  public String getColor() {
    return color;          // 获取枚举常量的颜色属性
  }
}

 

在上述代码中,TestEnum枚举类型包含了一个构造方法,它接受一个color参数,并将其赋值给枚举常量的color属性。构造方法是私有的,只能在枚举类型内部使用。

代码案例2:

public enum TestEnum {
  RED("Red Color", 1),        // 枚举常量 RED,具有颜色属性为 "Red Color" 和代码属性为 1
  BLACK("Black Color", 2),    // 枚举常量 BLACK,具有颜色属性为 "Black Color" 和代码属性为 2
  GREEN("Green Color", 3),    // 枚举常量 GREEN,具有颜色属性为 "Green Color" 和代码属性为 3
  WHITE("White Color", 4);    // 枚举常量 WHITE,具有颜色属性为 "White Color" 和代码属性为 4

  private String color;       // 枚举常量的颜色属性
  private int code;           // 枚举常量的代码属性

  private TestEnum(String color, int code) {
    this.color = color;       // 构造方法,用于初始化枚举常量的颜色属性和代码属性
    this.code = code;
  }

  public String getColor() {
    return color;             // 获取枚举常量的颜色属性
  }

  public int getCode() {
    return code;              // 获取枚举常量的代码属性
  }
}

在上述代码中,TestEnum枚举类型包含了一个接受两个参数的构造方法。每个枚举常量都会调用该构造方法进行初始化,并传递对应的参数。

除了构造方法,我们在枚举类型中定义了getColor()getCode()方法,用于获取枚举常量的颜色属性和代码属性。

代码案例3:

public enum TestEnum {
  RED("Red Color", 1, true),        // 枚举常量 RED
  BLACK("Black Color", 2, false),    // 枚举常量 BLACK
  GREEN("Green Color", 3, true),    // 枚举常量 GREEN
  WHITE("White Color", 4, false);    // 枚举常量 WHITE

  private String color;       // 枚举常量的颜色属性
  private int code;           // 枚举常量的代码属性
  private boolean active;     // 枚举常量的活动状态属性

  private TestEnum(String color, int code, boolean active) {
    this.color = color;
    this.code = code;
    this.active = active;
  }

  public String getColor() {
    return color;
  }

  public int getCode() {
    return code;
  }

  public boolean isActive() {
    return active;
  }
}

在上述示例中,我们为枚举常量定义了一个带有三个参数的构造方法。每个枚举常量都会调用该构造方法进行初始化,并传递相应的参数。

除了构造方法,我们还定义了getColor()getCode()isActive()方法,用于获取枚举常量的颜色属性、代码属性和活动状态属性。

 

 4.枚举和反射

我们知道反射( 从初学者到专家:Java反射的完整指南-CSDN博客 )是,对于任何一个类,哪怕其构造方法是私有的,我们也可以通过反射拿到他的实例对象,那么枚举的构造方法也是私有的,我们是否可以拿到呢?
package demo2;

import java.lang.reflect.Constructor;

public enum TestEnum {
    RED("red",1),BLACK("black",2),WHITE("white",3),GREEN("green",4);
    private String name;
    private int key;


    private TestEnum (String name,int key) {
        this.name = name;
        this.key = key;
    }
    public static TestEnum getEnumKey (int key) {
        for (TestEnum t: TestEnum.values()) {
            if(t.key == key) {
                return t;
            }
        }
        return null;
    }
    public static void reflectPrivateConstructor() {
        try {
            Class<?> classStudent = Class.forName("TestEnum");
//注意传入对应的参数,获得对应的构造方法来构造对象,当前枚举类是提供了两个参数分别是String和int。
            Constructor<?> declaredConstructorStudent = classStudent.getDeclaredConstructor(String.class,int.class);
//设置为true后可修改访问权限
            declaredConstructorStudent.setAccessible(true);
            Object objectStudent = declaredConstructorStudent.newInstance("绿色",666);
            TestEnum testEnum = (TestEnum) objectStudent;
            System.out.println("获得枚举的私有构造函数:"+testEnum);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public static void main(String[] args) {
        reflectPrivateConstructor();
    }
}

运行截图:

这里的主要异常是: 就是没有对应的构造方法!
为什么呢?
因为我们提供的枚举的构造方法就是两个参数分别是 String int,我们所有的枚举类,都是默认继承与 java.lang.Enum ,说到继承,就要帮助父类进行构造!而我们写的类,并没有帮助父类构造!那意思是,我们要在自己的枚举类里面,提供super 吗?不是的,枚举比较特殊,虽然我们写的是两个,但是默认他还添加了两个参数哪两个参数呢?
我们看一下Enum 类的源码

 

 也就是说,我们自己的构造函数有两个参数一个是String一个是int,同时他默认后边还会给两个参数,一个是String一个是int。也就是说,这里我们正确给的是4个参数:

代码:

package demo2;

import java.lang.reflect.Constructor;

public enum TestEnum {
    RED("red",1),
    BLACK("black",2),
    WHITE("white",3),
    GREEN("green",4);
    private String name;
    private int key;


    private TestEnum (String name,int key) {
        this.name = name;
        this.key = key;
    }
    public static TestEnum getEnumKey (int key) {
        for (TestEnum t: TestEnum.values()) {
            if(t.key == key) {
                return t;
            }
        }
        return null;
    }
    public static void reflectPrivateConstructor() {
        try {
            Class<?> classStudent = Class.forName("demo2.TestEnum");
//注意传入对应的参数,获得对应的构造方法来构造对象,当前枚举类是提供了两个参数分别是String和int。
            Constructor<?> declaredConstructorStudent =
                    classStudent.getDeclaredConstructor(String.class,int.class,String.class,int.class);
//设置为true后可修改访问权限
            declaredConstructorStudent.setAccessible(true);
//后两个为子类参数,大家可以将当前枚举类的key类型改为double验证
            Object objectStudent = declaredConstructorStudent.newInstance("父类参数",666,"子类参数",888);
            TestEnum testEnum = (TestEnum) objectStudent;
            System.out.println("获得枚举的私有构造函数:"+testEnum);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public static void main(String[] args) {
        reflectPrivateConstructor();
    }
}

运行截图:

但还是报错了,为什么?

 直接公布答案!

根据Java源代码, newInstance() 方法在创建实例之前会先检查目标类是否是一个枚举类型。如果目标类是枚举类型, newInstance() 方法会抛出 InstantiationException 异常,阻止通过反射去创建枚举实例。
有一道面试题就是关于: 为什么枚举实现单例模式是安全的?
有兴趣的小伙伴可以去了解一下

5.总结

以下是关于枚举的一些总结:

  1. 定义枚举:可以使用关键字‘enum’来定义枚举类型。枚举类型的定义通常位于类的顶层,可以包含枚举常量、字段、方法等。
  2. 枚举常量:枚举类型中的常量称为枚举常量。它们是枚举类型的实例,使用预定义的名称来表示特定的常量值。枚举常量在枚举类型的定义中以逗号分隔,并以大写字母命名。
  3. 枚举方法:枚举可以包含方法,可以为枚举类型添加自定义的行为。枚举方法可以在每个枚举常量上调用,并可以在枚举类型内部定义。
  4. 枚举的比较:枚举类型可以使用`==`运算符进行比较,因为每个枚举常量都是唯一的。
  5. 枚举的序列化:枚举类型默认是可序列化的,可以直接将枚举类型的对象进行序列化和反序列化操作。
  6. 枚举的限制:枚举常量在编译时就被确定,无法在运行时动态创建新的枚举常量。枚举常量的数量是固定的。
  7. 枚举的特性

  • 唯一性:枚举常量是唯一的,每个枚举常量在枚举类型中只会存在一个实例。
  • 不可变性:枚举常量是不可变的,一旦创建,其值无法修改。
  • 安全性:枚举常量在多线程环境下是安全的,不需要额外的同步措施。
  •  可迭代性:枚举类型可以使用`values()`方法获取包含所有枚举常量的数组,并支持使用增强的`for-each`循环进行遍历。

优点:

1. 类型安全性:枚举提供了类型安全性,编译器可以在编译时检查枚举类型的正确使用。枚举常量只能是预定义的值,不允许其他值的赋值,从而减少了错误的发生。

2. 可读性和可维护性:枚举常量使用预定义的名称来表示特定的常量值,这提供了更好的代码可读性。使用枚举可以使代码更加清晰、易于理解和维护。

3. 易于扩展:在需要添加新的常量时,可以简单地在枚举中定义新的枚举常量。这样可以方便地扩展现有的枚举类型,而不会影响到其他部分的代码。

4. 单例模式的简化:枚举本身就是单例模式的一种实现方式。枚举常量是唯一的,且在多线程环境下是安全的,不需要额外的同步措施。

缺点:

1. 限制了灵活性:枚举常量的数量是固定的,它们在编译时就被确定,无法在运行时动态创建新的枚举常量。这种限制可能会导致在某些特定的场景下,无法灵活地扩展枚举类型。

2. 不适合表示连续变化的值:枚举适用于表示一组固定的离散的常量值,但不适合表示连续变化的值。如果需要表示一系列连续变化的值,使用枚举可能会显得笨拙和不合适。

3. 可序列化的复杂性:枚举类型默认是可序列化的,但在某些情况下,当枚举类型需要进行序列化和反序列化时,可能会引起一些复杂性和不一致性的问题。

总体而言,枚举在许多情况下都是一种有用的工具,可以提供类型安全性、可读性和可维护性。然而,在一些特定的场景下,枚举的限制可能会导致不适合使用枚举,需要考虑其他的解决方案。

   

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
JavaScript权威指南(第6版)》要讲述的内容涵盖JavaScript语言本身,以及web浏览器所实现的JavaScript API。本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增的章节包括 jQuery、服务器端 JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者系统学习,也适合有经验的 JavaScript开发者随手翻阅。 《JavaScript权威指南(第6版)》是程序员学习核心JavaScript语言和由WEB浏览器定义的JavaScript API的指南和综合参考手册。 《JavaScript权威指南(第6版)》涵盖html5和ecmascript 5。很多章节完全重写,以便与时俱进,紧跟当今的最佳web开发实践。本书新增章节描述了jQuery和服务器端JavaScript。 本书适合那些希望学习WEB编程语言的初、中级程序员和希望精通JavaScript的程序员阅读。 作者简介 作者:(美国)弗兰纳根(David Flanagan) 译者:淘宝前端团队 弗兰纳根(David Flanagan)是一名程序员,也是一名作家,他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、《The Ruby Programming Language》、以及《Java in a Nutshell》。David毕业于麻省理工学院,获得计算机科学与工程学位。他和妻子和孩子一起生活在西雅图和温哥华之间的美国太平洋西北海岸。 目录 前言 1 第1章 javascript概述 5 1.1 javascript语言核心 8 1.2 客户端javascript 12 第一部分 javascript 语言核心 第2章 词法结构 25 2.1 字符集 25 2.2 注释 27 2.3 直接量 27 2.4 标识符和保留字 28 2.5 可选的分号 30 第3章 类型、值和变量 32 3.1 数字 34 3.2 文本 38 3.3 布尔值 43 3.4 null和undefined 44 3.5 全局对象 45 3.6 包装对象 46 3.7 不可变的原始值和可变的对象引用 47 .3.8 类型转换 48 3.9 变量声明 55 3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 算术表达式 69 4.9 关系表达式 74 4.10 逻辑表达式 79 4.11 赋值表达式 81 4.12 表达式计算 83 4.13 其他运算符 86 第5章 语句 91 5.1 表达式语句 92 5.2 复合语句和空语句 92 5.3 声明语句 94 5.4 条件语句 96 5.5 循环 101 5.6 跳转 106 5.7 其他语句类型 113 5.8 javascript语句小结 116 第6章 对象 118 6.1 创建对象 120 6.2 属性的查询和设置 123 6.3 删除属性 127 6.4 检测属性 128 6.5 枚举属性 130 6.6 属性getter和setter 132 6.7 属性的特性 134 6.8 对象的三个属性 138 6.9 序列化对象 141 6.10 对象方法 142 第7章 数组 144 7.1 创建数组 144 7.2 数组元素的读和写 145 7.3 稀疏数组 147 7.4 数组长度 148 7.5 数组元素的添加和删除 149 7.6 数组遍历 149 7.7 多维数组 151 7.8 数组方法 152 7.9 ecmascript 5中的数组方法 156 7.10 数组类型 160 7.11 类数组对象 161 7.12 作为数组的字符串 163 第8章 函数 165 8.1 函数定义 166 8.2 函数调用 168 8.3 函数的实参和形参 173 8.4 作为值的函数 178 8.5 作为命名空间的函数 181 8.6 闭包 182 8.7 函数属性、方法和构造函数 188 8.8 函数式编程 194 第9章 类和模块 201 9.1 类和原型 202 9.2 类和构造函数 203 9.3 javascript中java式的类继承 207 9.4 类的扩充 210 9.5 类和类型 212 9.6 javascript中的面向对象技术 217 9.7 子类 230 9.8 ecmascript 5 中的类 239 9.9 模块 248 第10章 正则表达式的模式匹配 253 10.1 正则表达式的定义 253 10.2 用于模式匹配的string方法 261 10.3 regexp对象 263 第11章 javascript的子集和扩展 267 11.1 javascript的子集 268 11.2 常量和局部变量 271 11.3 解构赋值 274 11.4 迭代 276 11.5 函数简写 285 11.6 多catch 从句 285 11.7 e4x: ecmascript for xml 286 第12章 服务器端javascript 290 12.1 用rhino脚本化java 291 12.2 用node实现异步i/o 297 第二部分 客户端javascript 第13章 web浏览器中的javascript 309 13.1 客户端javascript 309 13.2 在html里嵌入javascript 313 13.3 javascript程序的执行 319 13.4 兼容性和互用性 326 13.5 可访问性 333 13.6 安全性 334 13.7 客户端框架 339 第14章 window对象 341 14.1 计时器 342 14.2 浏览器定位和导航 343 14.3 浏览历史 345 14.4 浏览器和屏幕信息 346 14.5 对话框 348 14.6 错误处理 351 14.7 作为window对象属性的文档元素 351 14.8 多窗口和窗体 353 第15章 脚本化文档 361 15.1 dom概览 362 15.2 选取文档元素 364 15.3 文档结构和遍历 371 15.4 属性 375 15.5 元素的内容 378 15.6 创建、插入和删除节点 382 15.7 例子:生成目录表 387 15.8 文档和元素的几何形状和滚动 389 15.9 html表单 396 15.10 其他文档特性 404 第16章 脚本化css 410 16.1 css概览 411 16.2 重要的css属性 416 16.3 脚本化内联样式 427 16.4 查询计算出的样式 431 16.5 脚本化css类 433 16.6 脚本化样式表 436 第17章 事件处理 440 17.1 事件类型 442 17.2 注册事件处理程序 451 17.3 事件处理程序的调用 454 17.4 文档加载事件 459 17.5 鼠标事件 461 17.6 鼠标滚轮事件 465 17.7 拖放事件 468 17.8 文本事件 475 17.9 键盘事件 478 第18章 脚本化http 484 18.1 使用xmlhttprequest 487 18.2 借助[script]发送http请求:jsonp 505 18.3 基于服务器端推送事件的comet技术 508 第19章 jquery类库 514 19.1 jquery基础 515 19.2 jquery的getter和setter 522 19.3 修改文档结构 528 19.4 使用jquery处理事件 531 19.5 动画效果 542 19.6 jquery中的ajax 550 19.7 工具函数 563 19.8 jquery选择器和选取方法 566 19.9 jquery的插件扩展 574 19.10 jquery ui类库 577 第20章 客户端存储 579 20.1 localstorage和sessionstorage 581 20.2 cookie 586 20.3 利用ie userdata持久化数据 592 20.4 应用程序存储和离线web应用 594 第21章 多媒体和图形编程 606 21.1 脚本化图片 606 21.2 脚本化音频和视频 608 21.3 svg:可伸缩的矢量图形 615 21.4 [canvas]中的图形 623 第22章 html5 api 658 22.1 地理位置 659 22.2 历史记录管理 662 22.3 跨域消息传递 668 22.4 web worker 671 22.5 类型化数组和arraybuffer 678 22.6 blob 682 22.7 文件系统api 691 22.8 客户端数据库 696 22.9 web套接字 704 第三部分 javascript核心参考 javascript核心参考 711 第四部分 客户端javascript参考客户端 javascript参考 847
内容简介 《JavaScript权威指南(第6版)》要讲述的内容涵盖JavaScript语言本身,以及web浏览器所实现的JavaScript API。本书第6版涵盖了 html5 和 ecmascript 5,很多章节完全重写,增加了当今 web 开发的最佳实践的内容,新增的章节包括 jQuery、服务器端 JavaScript、图形编程以及JavaScript式的面向对象。本书不仅适合初学者系统学习,也适合有经验的 JavaScript开发者随手翻阅。 《JavaScript权威指南(第6版)》是程序员学习核心JavaScript语言和由WEB浏览器定义的JavaScript API的指南和综合参考手册。 《JavaScript权威指南(第6版)》涵盖html5和ecmascript 5。很多章节完全重写,以便与时俱进,紧跟当今的最佳web开发实践。本书新增章节描述了jQuery和服务器端JavaScript。 本书适合那些希望学习WEB编程语言的初、中级程序员和希望精通JavaScript的程序员阅读。 作者简介 作者:(美国)弗兰纳根(David Flanagan) 译者:淘宝前端团队 弗兰纳根(David Flanagan)是一名程序员,也是一名作家,他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、《The Ruby Programming Language》、以及《Java in a Nutshell》。David毕业于麻省理工学院,获得计算机科学与工程学位。他和妻子和孩子一起生活在西雅图和温哥华之间的美国太平洋西北海岸。 目录 前言 1 第1章 javascript概述 5 1.1 javascript语言核心 8 1.2 客户端javascript 12 第一部分 javascript 语言核心 第2章 词法结构 25 2.1 字符集 25 2.2 注释 27 2.3 直接量 27 2.4 标识符和保留字 28 2.5 可选的分号 30 第3章 类型、值和变量 32 3.1 数字 34 3.2 文本 38 3.3 布尔值 43 3.4 null和undefined 44 3.5 全局对象 45 3.6 包装对象 46 3.7 不可变的原始值和可变的对象引用 47 .3.8 类型转换 48 3.9 变量声明 55 3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 算术表达式 69 4.9 关系表达式 74 4.10 逻辑表达式 79 4.11 赋值表达式 81 4.12 表达式计算 83 4.13 其他运算符 86 第5章 语句 91 5.1 表达式语句 92 5.2 复合语句和空语句 92 5.3 声明语句 94 5.4 条件语句 96 5.5 循环 101 5.6 跳转 106 5.7 其他语句类型 113 5.8 javascript语句小结 116 第6章 对象 118 6.1 创建对象 120 6.2 属性的查询和设置 123 6.3 删除属性 127 6.4 检测属性 128 6.5 枚举属性 130 6.6 属性getter和setter 132 6.7 属性的特性 134 6.8 对象的三个属性 138 6.9 序列化对象 141 6.10 对象方法 142 第7章 数组 144 7.1 创建数组 144 7.2 数组元素的读和写 145 7.3 稀疏数组 147 7.4 数组长度 148 7.5 数组元素的添加和删除 149 7.6 数组遍历 149 7.7 多维数组 151 7.8 数组方法 152 7.9 ecmascript 5中的数组方法 156 7.10 数组类型 160 7.11 类数组对象 161 7.12 作为数组的字符串 163 第8章 函数 165 8.1 函数定义 166 8.2 函数调用 168 8.3 函数的实参和形参 173 8.4 作为值的函数 178 8.5 作为命名空间的函数 181 8.6 闭包 182 8.7 函数属性、方法和构造函数 188 8.8 函数式编程 194 第9章 类和模块 201 9.1 类和原型 202 9.2 类和构造函数 203 9.3 javascript中java式的类继承 207 9.4 类的扩充 210 9.5 类和类型 212 9.6 javascript中的面向对象技术 217 9.7 子类 230 9.8 ecmascript 5 中的类 2
JavaScript权威指南(第6版)》主要讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScript API。本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增的章节包括jQuery、服务器端JavaScript、图形编程以及 JavaScript式的面向对象。本书不仅适合初学者系统学习,也适合有经验的 JavaScript 开发者随手翻阅。 David Flanagan是一名程序员,也是一名作家,它的个人网站是 。他在O’Reilly出版的其他畅销书还包括《JavaScript Pocket Reference》、《The Ruby Programming Language》、以及《Java in a Nutshell》。David毕业于麻省理工学院,获得计算机科学与工程学位。他和妻子和孩子一起生活在西雅图和温哥华之间的美国太平洋西北海岸。 目录: 前言 第1章 JavaScript概述 1.1 JavaScript语言核心 1.2 客户端JavaScript 第一部分 JavaScript 语言核心 第2章 词法结构 2.1 字符集 2.2 注释 2.3 直接量 2.4 标识符和保留字 2.5 可选的分号 第3章 类型、值和变量 3.1 数字 3.2 文本 3.3 布尔值 3.4 null和undefined 3.5 全局对象 3.6 包装对象 3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 4.10 逻辑表达式 4.11 赋值表达式 4.12 表达式计算 4.13 其他运算符 第5章 语句 5.1 表达式语句 5.2 复合语句和空语句 5.3 声明语句 5.4 条件语句 5.5 循环 5.6 跳转 5.7 其他语句类型 5.8 JavaScript语句小结 第6章 对象 6.1 创建对象 6.2 属性的查询和设置 6.3 删除属性 6.4 检测属性 6.5 枚举属性 6.6 属性getter和setter 6.7 属性的特性 6.8 对象的三个属性 6.9 序列化对象 6.10 对象方法 第7章 数组 7.1 创建数组 7.2 数组元素的读和写 7.3 稀疏数组 7.4 数组长度 7.5 数组元素的添加和删除 7.6 数组遍历 7.7 多维数组 7.8 数组方法 7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 函数 8.1 函数定义 8.2 函数调用 8.3 函数的实参和形参 8.4 作为值的函数 8.5 作为命名空间的函数 8.6 闭包 8.7 函数属性、方法和构造函数 8.8 函数式编程 第9章 类和模块 9.1 类和原型 9.2 类和构造函数 9.3 JavaScript中Java式的类继承 9.4 类的扩充 9.5 类和类型 9.6 JavaScript中的面向对象技术 9.7 子类 9.8 ECMAScript 5 中的类 9.9 模块 第10章 正则表达式的模式匹配 10.1 正则表达式的定义 10.2 用于模式匹配的String方法 10.3 RegExp对象 第11章 JavaScript的子集和扩展 11.1 JavaScript的子集 11.2 常量和局部变量 11.3 解构赋值 11.4 迭代 11.5 函数简写 11.6 多catch 从句 11.7 E4X: ECMAScript for XML 第12章 服务器端JavaScript 12.1 用Rhino脚本化Java 12.2 用Node实现异步I/O 第二部分 客户端JavaScript 第13章 Web浏览器中的JavaScript 13.1 客户端JavaScript 13.2 在HTML里嵌入JavaScript 13.3 JavaScript程序的执行 13.4 兼容性和互用性 13.5 可访问性 13.6 安全性 13.7 客户端框架 第14章 Window对象 14.1 计时器 14.2 浏览器定位和导航 14.3 浏览历史 14.4 浏览器和屏幕信息 14.5 对话框 14.6 错误处理 14.7 作为Window对象属性的文档元素 14.8 多窗口和窗体 第15章 脚本化文档 15.1 DOM概览 15.2 选取文档元素 15.3 文档结构和遍历 15.4 属性 15.5 元素的内容 15.6 创建、插入和删除节点 15.7 例子:生成目录表 15.8 文档和元素的几何形状和滚动 15.9 HTML表单 15.10 其他文档特性 第16章 脚本化CSS 16.1 CSS概览 16.2 重要的CSS属性 16.3 脚本化内联样式 16.4 查询计算出的样式 16.5 脚本化CSS类 16.6 脚本化样式表 第17章 事件处理 17.1 事件类型 17.2 注册事件处理程序 17.3 事件处理程序的调用 17.4 文档加载事件 17.5 鼠标事件 17.6 鼠标滚轮事件 17.7 拖放事件 17.8 文本事件 17.9 键盘事件 第18章 脚本化HTTP 18.1 使用XMLHttpRequest 18.2 借助发送HTTP请求:JSONP 18.3 基于服务器端推送事件的Comet技术 第19章 jQuery类库 19.1 jQuery基础 19.2 jQuery的getter和setter 19.3 修改文档结构 19.4 使用jQuery处理事件 19.5 动画效果 19.6 jQuery中的Ajax 19.7 工具函数 19.8 jQuery选择器和选取方法 19.9 jQuery的插件扩展 19.10 jQuery UI类库 第20章 客户端存储 20.1 localStorage和sessionStorage 20.2 cookie 20.3 利用IE userData持久化数据 20.4 应用程序存储和离线Web应用 第21章 多媒体和图形编程 21.1 脚本化图片 21.2 脚本化音频和视频 21.3 SVG:可伸缩的矢量图形 21.4 中的图形 第22章 HTML5 API 22.1 地理位置 22.2 历史记录管理 22.3 跨域消息传递 22.4 Web Worker 22.5 类型化数组和ArrayBuffer 22.6 Blob 22.7 文件系统API 22.8 客户端数据库 22.9 Web套接字 第三部分 JavaScript核心参考 JavaScript核心参考 第四部分 客户端JavaScript参考 客户端JavaScript参考

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值