Java基础知识(三) 关键字

关键字

1. 变量命名规则

在Java 语言中,变量名、函数名、数组名统称为标识符Java 语言规定标识符只能由字母(a~ z,A ~Z)、数字(0 ~ 9)、下画线(_)和$ 组成,并且标识符的第一个字符必须是字母、下画线或$)。此外,标识符也不能包含空白字符(换行符、空格和制表符)。

char: char是 Jeva 语言的一个数据类型,是保留字,不能作为标识符,其他如 int、float等与之类似。

2. break、continue 以及 return 有什么区别

break、continue 以及 return 的区别如下:

  1. break 用于直接强行跳出当前循环,不再执行剩余代码。当循环中遇到 break 语句时,忽略循环体中任何其他语句和循环条件测试,程序控制在循环体后面的语句重新开始。所以,当多层循环嵌套,并且 break 语句出现在嵌套循环中的内层循环时,它将仅仅只是终止了内层循环的执行,而不影响外层循环的执行。
  2. continue 用于停止当次循环,回到循环起始处,进入下一次循环操作。continue 语句之后的语句将不再执行,用于跳过循环体中的一部分语句,也就是不执行这部分语句,而不是跳出整个循环执行下一条语句,这就是 continue 与 break 的主要区别。简单来说,continue 只是中断一次循环的执行而已。
  3. return 语句是一个跳转语句,用来表示从一个方法返回(返回一个值或其他复杂类型),可以使程序控制返回到调用该方法的地方。当执行 main 方法时,return 语句可以使程序执行返回到 Java 运行系统。

3. final、finally 和 finalize 有什么区别

final、finally 和 finalize 的区别如下:

  1. final 用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖和类不可被继承(不能再派生出新的子类)。
    final 属性:被 finatl修饰的变量不可变。由于不可变有两重含义:
    一是引用不可变;二是对象不可变。final 指的是引用的不可变性,即它只能指向初始时指向的那个对象,而不关心指向对象内容的变化。所以,被 final 修饰的变量必须被初始化。一般可以通过以下几种方式对其进行初始化:
    ①在定义的时候初始化。
    ②final 成员变量可以在初始化块中初始化,但不可在静态初始化块中初始化。
    ③静态 final 成员变量可以在静态初始化块中初始化,但不可在初始化块中初始化。
    ④在类的构造器中初始化,但静态 final 成员变量不可以在构造函数中初始化。
    final 方法:当一个方法声明为 final 时,该方法不允许任何子类重写这个方法,但子类仍然可以使用这个方法。另外,还有一种被称为 inline(内联)的机制,当调用一个被声明为final 的方法时,直接将方法主体插人到调用处,而不是进行方法调用(类似于 C ++中的 in-line),这样做能提高程序的效率。
    final 参数:用来表示这个参数在这个函数内部不允许被修改。
    final 类;当一个类被声明为 final时,此类不能被继承,所有方法都不能被重写。但这并不表示 final 类的成员变量也是不可改变的,要想做到 final 类的成员变量不可改变,必须给成员变量增加 final 修饰。值得注意的是,一个类不能既被声明为 abstract,又被声明为 final。

  2. finally作为异常处理的一部分,它只能用在 try/eatch 语甸中,并且附带一个语句块,表示这段语句最终一定被执行,经常被用在需要释放资源的情况下

  3. finalize 是 Object 类的一个方法,在垃圾回收器执行时会调用被回收对象的 finalize()方法,(可以覆盖此方法来实现对其他资源的回收,例如关闭文件等。需要注意的是,一旦垃圾回收器准备好释放对象占用的空间,将首先调用其 finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

4. static关键字有哪些作用

static 关键字主要有两种作用:第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。第二,实现某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过类来直接调用方法或使用类的属性。

5. volatile有什么作用

在用 Java 语言编写的程序中,有时为了提高程序的运行效率,编译器会自动对其进行优化、把经常被访问的变量缓存起来,程序在读取这个变量时有可能会直接从缓存(例如寄存器)中来读取这个值,而不会去内存中读取。

这样做的一个好处是提高了程序的运行效率,但当遇到多线程编程时,变量的值可能因为别的线程而改变了,而该缓存的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致,例如,在本次线程内,当读取一个变量时,为提高存取速度,会先把变量读取到一个缓存中,当以后再取变量值时,就直接从缓存中取值,当变量值在本线程里改变时,会同时把变量的新值复制到该缓存中,以便保持一致。

volatile 是一个类型修饰符(type specifier),它是被设计用来修饰被不同线程访问和修改的变量。被 vqlatile 类型定义的变量,系统每次用到它时都是直接从对应的内存当中提取而不会利用缓存在使用了 volatile 修饰成员变量后,所有线程在任何时候所看到变量的值都是相同的。下面给出一个使用 volatile 的示例。

/**
 * 创建时间 2021/7/31 14:57
 * volatile使用示例
 * @author Ye
 * @version 1.0
 */
public class Test6 implements Runnable {

    private volatile Boolean flag;

    public void stop() {
        flag = false;
    }

    @Override
    public void run() {
        while (flag) {
            //do something
        }
    }
}

以上代码示例是用来停止线程最常用的一种方法,如果 boolean 类型的变量 flag 没有被声明为 volatile,那么,当这个线程的 run 方法在判断 flag 值时,使用的有可能是缓存中的值,此时就不能及时地获取其他线程对 flag 所做的操作,因此会导致线程不能及时地停止。

需要注意的是,由于 volatile 不能保证操作的原子性,因此,一般情况下 volatild(不能代替sychronized),此外,使用 volatile 会阻止编译器对代码的优化,因此会降低程序的执行效率。所以,除非迫不得已,否则,能不使用 volatile 就尽量不要使用 volatile。

6. instanceof 有什么作用

instanceof 是 Java 语言中的一个二元运算符,它的作用是判断一个引用类型的变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例,即它左边的对象是否是它右边的类的实例,该运算符返回 boolean 类型的数据。
常见的用法为:result = object instanceof class。如果 object 是 class 的一个实例,那么 instanceof 运算符返回 true;如果 object 不是 class 的一个实例,或者 object 是 null,那么 instanceof 运算符返回 false。
以如下程序为例:


/**
 * 创建时间 2021/7/31 15:08
 * instanceof测试
 * @author Ye
 * @version 1.0
 */
public class Test7 {
    public static void main(String args[]) {
        String s = "Hello";
        int[] a = {1, 21};
        if (s instanceof String) {
            System.out.println("true");
        }
        if (s instanceof Object) {
            System.out.println("true");
        }
        if (a instanceof int[]){
            System.out.println("true");
        }
    }
}

运行截图:
在这里插入图片描述

7. strictfp 有什么作用

关键字 strictfp 是 strict float point 的缩写,指的是精确浮点,它用来确保浮点数运算的准确性。JVM 在执行浮点数运算时,如果没有指定 strictfp 关键字,此时计算结果可能会不精确,而且计算结果在不同平台或厂商的虚拟机上会有不同的结果,导致意想不到的错误。而一旦使用了 strictfp 来声明一个类、接口或者方法,那么在所声明的范围内,Java 编译器以及运行环境会完全依照IEEE 二进制浮点数算术标准(IBEE 754)来执行,在这个关键字声明的范围内所有浮点数的计算都是精确的。需要注意的是,当一个类被 strictfp 修饰时,所有方法都会自动被 strictfp 修饰。因此,striecfp 可以保证浮点数运算的精确性,而且在不同的硬件平台上会
有一致的运行结果。下例给出了 strictfp 修饰类的使用方法:

/**
 * 创建时间 2021/7/31 15:23
 * strictfp测试
 * @author Ye
 * @version 1.0
 */
public strictfp class Test8 {
    public static void main(String[] args) {
        double d = 0.695626266d;
        float f = 0.5646126f;
        double df = d + f;
        System.out.println(df);
    }
}

运行截图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值