Java面试笔试指南(三)---关键字

本文详细介绍了Java中的关键字,包括变量命名规则、break、continue、return的区别,final、finally、finalize的用法,assert的作用,static的含义,switch的注意事项,以及volatile、instanceof和strictfp的关键特性。这些知识点对于Java面试和深入理解语言至关重要。
摘要由CSDN通过智能技术生成

1、变量命名规则

变量名、函数名、数组名统称为标识符,标识符只能由字母,数字,下划线和$组成,并且第一个字符不能是数字

变量名是区分大小写的,A 和 a 是2个变量

2、break、continue、return的区别

break:强制跳出当前循环,不在执行剩余代码,多层循环时,只能跳出一层;带标志的break语句可以跳出多重循环
continue:跳过当次循环,进入下一次循环,语句后面的代码不执行,用于跳过循环体中部分代码
return:跳转语句,从一个方法返回到调用该方法的地方
goto:保留字,以后可能会用上

public class Test{
    public static void main(String[ ] args ){
        out:
        for(int i =0;i<10;i++){
            for(int j =0;j<10;j++){
                if(i=2){
                    break out;
                }
            }
        }
    }
}

3、final、fianlly、finalize的区别

final:用于声明属性(不可变)、方法(不可复写)和类(不可被继承);final属性表示引用不可变,只能指向初始时化时指向的那个对象,不关心对象内容的变化,被final修饰的变量必须初始化

final变量的初始化位置:

  1. 定义是时初始化
  2. 初始化块中初始化,不可在静态初始化块中初始化
  3. 静态final变量在静态初始化块中初始化,不能在初始化块中初始化
  4. 类构造器中初始化,静态final成员不可在构造器中初始化

final方法:不允许任何派生类重写这个方法,但派生类可以使用这个方法,
final参数:表示这个参数在这个方法内部不能允许被修改

final类:此类不能被继承,并不表示类中的成员变量也不能改变

finally:作为异常处理的一部分,在try、catch、finally语句中,最终必定会执行的部分,通常用来释放资源

finalize:是Object类的一个方法,在垃圾回收器执行时会调用被回收对象的finalize()方法,可以重写此方法来实现对其他资源的回收(一旦垃圾回收器准备好释放对象占用的空间,将首先调用其finalize方法,并在下一次垃圾回收动作发生时,才会真正回收对象占用的内存)

4、assert的作用

assert(断言)作为一种软件调试的方法,提供了一种在代码中进行正确性检查的机制,作用是对一个boolean表达式进行检查,一个正确运行的程序必须保证这个boolean表达式的值为true

assert包括2中表达式:

  • assert expression1 (assert 1+1==2)
  • assert expression1:expression2 (assert 1+1==3:“assert failed,exit”)

其中expression1表示一个boolean表达式,expression2表示一个基本类型或者一个对象

assert的应用范围:

  1. 检查控制流
  2. 检查输入参数是否有效
  3. 检查函数结果是否有效
  4. 检查程序不变量

5、static的作用

  1. 为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关
  2. 实现某个方法或属性与类,而不与对象关联在一起

static成员变量:

通过static关键字来达到全局的效果,在内存中只有一个复制,所有实例都指向同一个内存地址,对静态变量的引用有2种:类.静态变量或对象.静态变量(实例变量属于对象,只有对象创建后实例变量才被分配空间,只能通过对象.实例变量引用)

不能在方法体中定义静态变量

static成员方法:

static方法是类的方法,不需要创建对象就可以被调用(非static方法,只有对象被创建出来后才可以被使用),static方法中不能使用this,super关键字,不能调用非static方法,只能方法所属类的静态成员变量和方法

static方法实现单例模式(该类只能拥有一个实例,为了实现这一功能必须隐藏类的构造函数,提供一个创建对象的方法):

class Singleton{
    private static Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

用public修饰的static变量和方法本质上是全局的,若在static变量前用private修饰,则表示这个变量可以被类的静态代码块或其他静态方法调用,但不能在其他类中通过类名来直接引用

static代码块:

在类中独立于成员变量和成员函数的代码块,不在任何方法体内,JVM在加载类是会执行static代码块,如果有多个static代码块,按顺序执行;static代码块经常用于初始化静态变量,static代码块之后被执行一次

static内部类:

不依赖于外部类实例对象而被实例化,不能与外部类同名,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态方法

6、switch使用注意事项

在使用switch(expr)时,expr只能是一个枚举常量(内部由整型或字符类型实现)或一个整数表达式(可以是基本类型也可以是包装类型)

byte、short、char类型的值都能够隐式地转换为int类型,这些类型以及它们的包装类可以作为switch 的表达式

与switch对应的是case语句,case语句只会可以直接是常量数组,也可以是常量计算式,还可以是final型的变量(该变量必须是编译时常量),不能是变量或者变量表达式

int a = 0;
switch(a){
    case 1+2:
    break;
    case b-1://不能是变量
    break;
    case 2:
    break;
}

在Java7中,switch支持String类型,但是String变量不能为null,case语句中的字符串也不能使用null

String str = “A”;
switchstr){
    case “A”:
    break:
    case “B”:
    break;
}

7、volatile、instanceof、strictfp的作用

volatile:

为了提高程序运行效率,编译器会自动对其进行优化,把经常被访问的变量缓存起来,程序在读取这个变量时直接从缓存读取,而不是内存中;当遇到多线程时,变量的值可能因为别的线程而改变,而该缓存的值不会改变,从而造成程序读取的值和实际的值不一致

volatile是一个类型修饰符,被设计用来修饰被不同线程访问和修改的变量,被volatile类型定义的变量,系统每次用到它时,都直接从对应的内存当中提取而不会利用缓存

使用volatile修饰的成员变量,在任何时候被任何线程读取时变量的值都相同

public class MyThread implements Runnable {
    private volatile Boolean flag;

    public void stop() {
        flag = false;
    }

    @Override
    public void run() {
        while (flag) {
            System.out.println("flag is " + flag);
        }
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.run();
    }
}

使用volatile定义的变量来停止线程,但是volatile不能保证操作的原子性,因此,一般情况下volatile不能带去synchronized,而且volatile会阻止编译器对代码的优化,降低程序的执行效率

instanceof:
判断一个引用类型的变量所指向的对象是否是一个类(接口、抽象类、基类)的实例

strictfp:
关键字strictfp(strict float point)精确浮点数,用于确保浮点数运算的准确性

一旦使用strictfp来声明一个类、接口或方法,那么在声明范围内,所有浮点数的计算都是精确的,当一个类被strictfp修饰,那么所有的方法都会自动被strictfp修饰,可以保证在不同的硬件平台上会有一致的运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值