武汉北大青鸟中南软件学院
400-027-0822

Java工程师面试时竟不知道的几个Java关键字

2017-02-25供稿中心: 北大青鸟武汉中南软件学院

关于一些熟悉的Java关键字,大家应该都知道。可是往往有一些被各位遗漏的java关键词,今天就把这些沧海遗珠找出来,在面试的时候能够更加的得心应手。

    1native

    字如其名,用来修饰java本地(原生)调用的方法。简单的说就是java调用原生的C/C++的方法。Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C或者C++

    标识符native可以与所有其它的java标识符连用,但是abstract除外。这是合理的,因为native暗示这些方法是有实现体的,只不过这些实现体是非java的,但是abstract却显然的指明这些方法无实现体。在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实现体是由非java语言在外面实现的。

2. transient

transient(临时的)变量修饰符,只能用来修饰字段。被它修饰的变量,在对象存储时(序列化),这些变量状态不会被持久化。当对象序列化的保存在存储器上时,不希望有些字段数据被保存,为了保证安全性,可以把这些字段声明为transient

3. strictfp

strictfp, 全称strict float point (精确浮点)

strictfp 关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的floatdouble表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。

在进行科学计算时可以使浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp。算钱的花还是算了,用整形会更好一点。

4. default

肯定有人说,这也算?哪个switch里没有个default?这里所说的default不是switch的默认,而是jdk8新增的特性。default方法。我们都知道在Java语言的接口中只能定义方法名,而不能包含方法的具体实现代码。接口中定义的方法必须在接口的非抽象子类中实现。

看下1.8Map接口里的remove方法。接口的方法里竟然有方法体。

default方法,也可以称Defender方法,或者虚拟扩展方法(Virtual extension methods)Default方法是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。

5. volatile

volatile(易变的)变量修饰符,也只能用来修饰字段,用于多线程的场合。volatile修饰变量。在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

这样可以防止两个方法同时被执行,还可以保证ji被同时更新,这样一来ij的值一直是一样的。

Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。

由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

以上小编总结的即是java中容易被忽略的几个关键字,但是这几个关键字又经常会在面试的时候出现,朋友们可以记一下。

 

关于我们
首页
公司简介
课程专业
师资力量
高薪就业
青鸟课程
ACCP
学士后Java
基础教育
UI设计
回到首页