Java中常见关键字

Java中常见关键字

static

static变量表示修饰的东西在一定范围内共享,应注意读写并发问题。

  • static修饰类变量
    • 该变量如果用public修饰,任何类都可以直接访问,无需初始化类,访问方式:类名.static 变量。
    • 应注意线程安全,解决方法如下:
      • 每次访问手动加锁
      • 将静态变量定义为线程安全的类型。例如:不使用ArrayList,而使用CopyOnWriteArrayList。
  • static修饰方法
    • 表明该方法和当前类无关。如果用public修饰,任意类可以直接访问
    • 被修饰的方法只能调用该类中静态方法,不能调用普通方法
    • 方法中变量执行时无线程安全问题,数据运行时在栈中,栈中每个进程是隔离的。
  • static修饰方法块
    • 静态块常用于在类启动前初始化某些值,具体顺序为
      在这里插入图片描述
      实现函数如下:
      父类
public class parentClass {
    public static List<String> l=new ArrayList(){{
        System.out.println("父类静态变量初始化");
    }};

    public static void testStatic(){
        System.out.println("父类静态方法被调用");
    }

    static {
        System.out.println("父类静态块初始化");
    }

    public parentClass(){
        System.out.println("父类构造函数初始化");
    }
}

子类

public class childClass extends parentClass {
    public static List<String> l=new ArrayList(){{
        System.out.println("子类静态变量初始化");
    }};
    public static void testStatic(){
        System.out.println("子类静态方法被调用");
    }
    static {
        System.out.println("子类静态块初始化");
    }
    public childClass(){
        System.out.println("子类构造函数初始化");
    }
    public static void main(String[] args) {
        System.out.println("main 函数被调用");
        new childClass();
    }
}

final

  1. 修饰类,无法继承
  2. 修饰方法,无法覆写
  3. 修饰变量,声明时必须初始化,无法修改其内存地址,可以修改值。(以String为例,修改值后,内存地址改变)

try,catch,finally

这三个关键词用于捕捉异常,代码在try中执行,catch中处理异常,最终执行finally(可省略)。
测试代码如下:

	 public void testTry(){
        try {
            System.out.println("try语句块运行");
            throw new RuntimeException("try Exception");
        }
        catch (Exception e){
            System.out.println("catch语句块运行");
            throw new RuntimeException("catch Exception");
        }
        finally {
            System.out.println("finally语句块运行");
        }
    }

测试结果为:
如下图所示,try语句块中异常被catch捕捉,catch中异常是先运行完finally中语句,未被捕捉再抛出。
在这里插入图片描述

volatile

volatile意思是可见的,修饰变量时,变量变为共享变量,即:变量的值一经修改会通知其他线程变量已经被修改。
【例子】:线程1和线程2都读取被volatile修饰的变量X,线程1修改X值并写入内存中,此时内存中存储的X值和线程2读取的X值不同。因为变量X被volatile修饰,内存通知所有CPUX值修改成功,线程2从CPU缓存中读取新的X值,解决线程和内存中值不同步问题。

transient

该关键字用于修饰变量,表明在序列化时无需序列化该类。

default

该关键字用于修饰接口,表明对于此接口子类无需强制实现(子类必须有默认实现)。

常见问题

  1. 变量和方法经常被static和final两个关键字修饰,为什么?
    答:1.(static)变量和方法与类无关,可以直接使用比较方便。
    2.(final)强调变量内存地址不可变,方法不能覆写,增强方法内部稳定性。
  2. 如何证明static静态变量和类无关?
    • 不需要初始化类就可以初始化静态变量。
    • 静态变量只初始化一次。初始化后,无论是否生成类对象,静态变量都不会初始化。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值