`

[转]Java se 7 最新特性研究(一)

阅读更多

详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp81

 

从2006到现在等待了多年的jdk7终于发布了.这里将对它的一些新特做一些初步的研究:

jdk7 相对于jdk6主要在以一几个方面有了非常显著的改进的提升:

首先分析其对java语言本身的改进:

二进制表示的支持(Binary Literals)的支持。

在JDK7中可以用二进制的形式表示整形数据(byte,short,int,long),这些整形类数据如果用二制表示则需0b或0B打头。如:

byte aByte=(byte)0b01;

short aShort=(short)0B001;

int aInt=0b01001;

long aLong=0B011101L;

使用二进制表示数据有什么好处呢?我们看一下下面的例字。

示例一:

要求定义一个数组。表示按位旋转(即后个数是前一个数向左旋转一位,请注意是旋转)。用二制可以比较清晰地表示这种数据结构:

public static final int[] phases = {
  0b00110001,
  0b01100010,
  0b11000100,
  0b10001001,
  0b00010011,
  0b00100110,
  0b01001100,
  0b10011000
}

大家看了上面的定义可以比较快地理解定义的内容。如果用16进制或8进制那可能就比较难理解了。如下:

public static final int[] phases = {
    0x31, 0x62, 0xC4, 0x89, 0x13, 0x26, 0x4C, 0x98
}

在定义和设计一些模拟器,如微处理器等方面也很有帮助。如下面是定义的一个8位的微处理器的模拟器:

public State decodeInstruction(int instruction, State state) {
  if ((instruction & 0b11100000) == 0b00000000) {
    final int register = instruction & 0b00001111;
    switch (instruction & 0b11110000) {
      case 0b00000000: return state.nop();
      case 0b00010000: return state.copyAccumTo(register);
      case 0b00100000: return state.addToAccum(register);
      case 0b00110000: return state.subFromAccum(register);
      case 0b01000000: return state.multiplyAccumBy(register);
      case 0b01010000: return state.divideAccumBy(register);
      case 0b01100000: return state.setAccumFrom(register);
      case 0b01110000: return state.returnFromCall();
      default: throw new IllegalArgumentException();
    }
  } else {
    final int address = instruction & 0b00011111;
    switch (instruction & 0b11100000) {
      case 0b00100000: return state.jumpTo(address);
      case 0b01000000: return state.jumpIfAccumZeroTo(address);
      case 0b01000000: return state.jumpIfAccumNonzeroTo(address);
      case 0b01100000: return state.setAccumFromMemory(address);
      case 0b10100000: return state.writeAccumToMemory(address);
      case 0b11000000: return state.callTo(address);
      default: throw new IllegalArgumentException();
    }
  }
}

当然你可以很利二进制定义一张图片。如:


public static final short[] HAPPY_FACE = {
   (short)0b0000011111100000;
   (short)0b0000100000010000;
   (short)0b0001000000001000;
   (short)0b0010000000000100;
   (short)0b0100000000000010;
   (short)0b1000011001100001;
   (short)0b1000011001100001;
   (short)0b1000000000000001;
   (short)0b1000000000000001;
   (short)0b1001000000001001;
   (short)0b1000100000010001;
   (short)0b0100011111100010;
   (short)0b0010000000000100;
   (short)0b0001000000001000;
   (short)0b0000100000010000;
   (short)0b0000011111100000;
}

 

总之,JDK7新增的这种整形的表示方对处理二制的数据操作提供了很好的帮助。

 

String 可以作为switch的statement,很多编程人员都遇到过通过一个字符串来决定程序流转的问题,以JDK7以前大家得通过一些特殊的处理才能得以实现。如先通过一个转换器将

字符串转换为数字类型。JDK7就不需要做那些转换可以直接将字符串做条件来使用。如下:

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
     String typeOfDay;
     switch (dayOfWeekArg) {
         case "Monday":
             typeOfDay = "Start of work week";
             break;
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
             typeOfDay = "Midweek";
             break;
         case "Friday":
             typeOfDay = "End of work week";
             break;
         case "Saturday":
         case "Sunday":
             typeOfDay = "Weekend";
             break;
         default:
             throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
     }
     return typeOfDay;
}

是不是觉得上面的代码很简明?

 

今天先研究到这里,明天研究JDK7最新的异常处理处理特性.

分享到:
评论

相关推荐

    Java虚拟机规范(Java SE 7)-完整目录书签文字版

    Java SE 7(Java Standard Edition 7)是Java发展的一个重要版本,引入了许多新特性和改进,使得开发者能够编写更高效、更可靠的代码。在《Java虚拟机规范(Java SE 7)》中,详细阐述了JVM的工作原理、内存模型、类...

    Java虚拟机规范(Java_SE_7).pdf中文版

    Java SE 7版的虚拟机规范是对之前版本的更新,它详述了虚拟机的最新标准,以及如何保证不同的Java虚拟机实现(例如Oracle HotSpot、OpenJDK、IBM J9等)能够提供统一的外部接口和行为。 从1999年《Java虚拟机规范...

    Java虚拟机规范(SE 7中文版)

    《Java虚拟机规范(JavaSE7版)》是程序员深入了解Java语言运行机制不可或缺的文档。它不是特定虚拟机实现的说明书,而是一份确保不同公司实现的Java虚拟机具有一致外部接口的契约文档。这份文档是Java程序员的基础...

    Java虚拟机规范(Java SE 7)

    《Java虚拟机规范(Java SE 7)》是一本权威性的文档,旨在为Java虚拟机(JVM)的设计和实现提供一个明确的指南。这本书不仅对于深入理解Java编程语言至关重要,也是学习和开发高性能Java应用程序的基础。 #### 二...

    JAVA SE6.0编程指南源码

    通过深入研究"编程指南代码",开发者可以了解到这些特性的实际应用和最佳实践,同时也可以学习到如何利用Java SE 6.0的工具和API解决问题。这样的源码分析对于初学者来说是宝贵的教育资源,对于有经验的开发者则是...

    Java虚拟机规范(Java_SE_7).pdf

    《Java虚拟机规范(Java SE 7版)》是一份详细介绍了Java虚拟机(JVM)架构和运行机制的重要文档。这份规范不仅是Java开发人员深入了解Java语言特性的必备资料,也是Java虚拟机实现者们遵循的标准指南。本文将基于提供...

    Java虚拟机规范 Java SE 7 中文版

    《Java虚拟机规范(Java SE 7版)》是一本详细介绍Java虚拟机(JVM)工作原理的标准文档,由Tim Lindholm、Frank Yellin、Gilad Bracha、Alex Buckley撰写。该书的中文版由周志明、吴璞渊、冶秀刚翻译,于2011年11月13...

    Java虚拟机规范(中文版) Java SE 7

    《Java虚拟机规范(Java SE 7版)》是Java虚拟机领域的权威文档之一,它为Java虚拟机的设计提供了一个标准,确保了不同公司开发的Java虚拟机能够保持一致的行为。这份文档不仅对Java虚拟机的基本原理进行了详尽的...

Global site tag (gtag.js) - Google Analytics