Java的关键字和保留字

701 阅读4分钟

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());

    }
}

这样就得到了准确的数据。