1.数字下划线

从Java7开始,为了提高可读性,允许在一个数值型字面值的两个数字之间使用下划线,
  如用1_000_000(或0b1111_0100_0010_0100_0000)表示100万。Java编译器会去
  除这些下划线

2.浮点数和无穷大

(1)在JDK5.0中可以使用十六进制来表示浮点数。例如:0.125可以表示为0x1.0p-3。
  p表示指数,尾数采用十六进制,指数采用十进制。指数的基数是2,而不是10。
  (2)Java中存在表示溢出和出错情况的三个特殊的浮点数值:
  正无穷大(Double.POSITIVE_INFINITY):用一个正数除以0将得到一个正无穷大;
  负无穷大(Double.NEGATIVE_INFINITY):用一个负数除以0将得到一个正无穷大;
  NaN(不是一个数字):0除以0或对一个负数开方将得到一个NaN;所有“非数值”的值
  都被认为是不相同的。只能使用Double.isNaN()来判断是否为NaN。
  (3)严格的浮点计算(使用strictfp标识符):
  例如double w = x*y/z;很多Intel处理器计算x*y,并且将结果存储在80位寄存器
  中,再除以z并将结果截断为64位。这样可以得到更加精确的结果,并且能避免指数溢
  出。但是这个结果可能与始终在64位机器上计算的结果不一样。对于使用strictfp关
  键字标记的方法必须使用严格的浮点计算来产生理想的效果,例如,我们可以标记main
  方法:public static strictfp void mian(String[] args)
  (4)在Math类中,为了达到最佳性能,所有方法都使用计算机浮点单元中的例程,如果
  要得到一个完全可预测的结果,应使用StrictMath类。它使用“自由发布的Math类库”
  (fdlibm)实现算法。详情访问:(https://www.netlib.org/fdlibm)    
  (5)两个浮点数的相等测试:
  虽然不能依赖于两个浮点数值的相等测试,但是可以通过测试两个数的差距小于某个
  阈值,来比较是否已经足够接近。
//两个浮点数的相等测试
final double EPSILON = 1E-14;
double x = 1.0 - 0.1 - 0.1 - 0.1 -0.1 - 0.1;
if(Math.abs(x-0.5)<EPSILON){
	System.out.println(x + " is approximately 0.5.");
}

3.代码点和代码单元

(1)UTF编码问题:Unicode的代码点可以划分为17个代码级别。代码点从U+0000~
 U+FFFF,包括了经典的Unicode代码;其余为附加代码,代码点从U+10000~U+10FFFF),
 其中包括一些辅助字符。
 而辅助字符采用一对连续的代码单元进行编码。这样的编码值落在基本的多语言级别中
 空闲的2048字节中,成为替代区域(U+D800~U+DBFF用于第一个代码单元,U+C000~
 U+DFFF用于第二个代码单元)。
 (2)大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码
 单元表示。
 想要得到实际的长度,即代码点数量,可以调用:
 int cpCount  = greeting.codePointCount(0,greeting.length);
 //greeting为字符串
 想要得到第i个代码点,可以使用:
 int index = greeting.offsetByCodePoint(0,i);
 int cp = greeting.codePointAt(index);
import java.util.Scanner;
public class CodePointTest {
    public static void main(String args[]){
        System.out.print("请输入一串字符串:");
        Scanner input = new Scanner(System.in);
        String s = input.nextLine();
        int n1 = s.length();//得到代码单元数量
        System.out.println(s+"的代码单元数量为:"+n1);
        int n2 = s.codePointCount(0,n1);//得到代码点数量,即字符串实际的长度
        System.out.println(s+"的代码点数量为"+n2);
        System.out.print("打印"+s+"的各个代码单元:");
        for(int i = 0;i<n1;i++){
            System.out.print(s.charAt(i)+" ");//打印各个代码单元
        }
        System.out.print("\n打印"+s+"的各个代码点:");
        for(int i = 0;i<n2;){
            int cp = s.codePointAt(i);
            System.out.print(Character.toChars(cp));//打印各个代码点
            System.out.print(" ");
            if(Character.isSupplementaryCodePoint(cp)){//判断是否为增补字符
                i += 2;
            }else{
                i++;
            }
        }
        int index = s.offsetByCodePoints(0,0);//得到第一个代码点的索引值
        int cp =s.charAt(index);
        System.out.print("\n第一个代码点为:");
        System.out.print(Character.toChars(cp));
    }
}

4.带标签的break语句:

可以使用带标签的break语句跳到嵌套的所有循环语句之外,标签必须放在希望跳出的
 最外层循环之前,并紧跟一个冒号。同样continue也可以使用带标签的语句。

5.数组的相关方法

(1)可以使用Array.copyOf(原数组,新数组长度)来复制数据或者增加数组的大小。
(2)可以使用Arrays.binarySearch(type[] a,type[])采用二分搜索算法查找值
v。如果查找成功,则返回相应的下标值。
(3)可以使用System.out.println(Arrays.deepToString(a))来打印二维数组。