Java中的关键字和保留字
| **关键字** | **含义** |
| abstract | 表明类或者成员方法具有抽象属性 |
| assert | 断言,用来进行程序调试 |
| boolean | 基本数据类型之一,声明布尔类型的关键字 |
| break | 提前跳出一个块 |
| byte | 基本数据类型之一,字节类型 |
| case | 用在switch语句之中,表示其中的一个分支 |
| catch | 用在异常处理中,用来捕捉异常 |
| char | 基本数据类型之一,字符类型 |
| class | 声明一个类 |
| const | 保留关键字,没有具体含义 |
| continue | 回到一个块的开始处 |
| default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
| do | 用在do-while循环结构中 |
| double | 基本数据类型之一,双精度浮点数类型 |
| else | 用在条件语句中,表明当条件不成立时的分支 |
| enum | 枚举 |
| extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
| final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
| finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
| float | 基本数据类型之一,单精度浮点数类型 |
| for | 一种循环结构的引导词 |
| goto | 保留关键字,没有具体含义 |
| if | 条件语句的引导词 |
| implements | 表明一个类实现了给定的接口 |
| import | 表明要访问指定的类或包 |
| instanceof | 用来测试一个对象是否是指定类型的实例对象 |
| int | 基本数据类型之一,整数类型 |
| interface | 接口 |
| long | 基本数据类型之一,长整数类型 |
| native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
| new | 用来创建新实例对象 |
| package | 包 |
| private | 一种访问控制方式:私用模式 |
| protected | 一种访问控制方式:保护模式 |
| public | 一种访问控制方式:共用模式 |
| return | 从成员方法中返回数据 |
| short | 基本数据类型之一,短整数类型 |
| static | 表明具有静态属性 |
| strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE%20754)算术规范 |
| super | 表明当前对象的父类型的引用或者父类型的构造方法 |
| switch | 分支语句结构的引导词 |
| synchronized | 表明一段代码需要同步执行 |
| this | 指向当前实例对象的引用 |
| throw | 抛出一个异常 |
| throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
| transient | 声明不用序列化的成员域 |
| try | 尝试一个可能抛出异常的程序块 |
| void | 声明当前成员方法没有返回值 |
| volatile | 表明两个或者多个变量必须同步地发生变化 |
| while | 用在循环结构中 |
这些关键字我们应该了解他们如何使用,并且了解它们的用处。
Java关键字总结 Github某位大哥的总结。
到这里我们对Java可能有了一点点的了解,但是这也只是一点点的了解,越学习越深入就会发现,自己好像不会的东西越多。我觉得这是一个好事,这证明你对计算机的了解更加的深入了。
有趣的问题
下面让我们来看一段代码。
public class Demo {
public static void main(String[] args) {
double a = 1.1;
double b = 2.2;
double c = 3.3;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(a+b);
System.out.println(a+b==c);
System.out.println(1.1+0.1);
System.out.println(1.3+0.1);
}
}
这行代码在理论上讲没有任何的问题。
但是我们来运行一下这段代码。
???理论上没有问题的代码为什么得出了false。
这就牵扯到了一些计算机原理的知识,二进制。
我们将1.1和2.2转换成对应的二进制
1.1 = 1.000110011001100110011001100110011001100110011001101...
2.2 = 10.00110011001100110011001100110011001100110011001101...
可以看到数据特别的长,但是数据类型是有长度限制的,double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数。这就会导致我们在进行运算时实际本质上就是不精确的。
所以也就会得到为什么1.1+2.2 ==3.3 的结果为false了。
不光是Java其实其他的语言都存在这个问题,也不能说他是bug,这里其实还有很多细节,但是对我们开发来讲意义不大。
Java如何处理浮点型数据呢?
在Java中我们可以使用BigDecimal类。
import java.math.BigDecimal;
public class Demo {
public static void main(String[] args) {
BigDecimal d = new BigDecimal(Double.toString(1.1));
BigDecimal e = new BigDecimal(Double.toString(2.2));
BigDecimal f = d.add(e);
System.out.println(f.doubleValue());
}
}
这样就得到了准确的数据。