Java 关键字总结

举报
cloud昵称bbs 发表于 2021/08/02 13:49:39 2021/08/02
【摘要】 Java 常用的几个关键字总结

private 关键字

private ,私有的,一种访问权限修饰符,用来修饰类的成员(包括成员变量和成员方法)

被修饰的成员只能在本类中访问

用法:

private 数据类型 变量名;
private 返回值类型 方法名(参数列表){}

public:公共的,访问权限修饰符,用来修饰类、成员变量、成员方法等,被修饰的内容可以在 任意类 中访问
default (包访问级别): 类的成员变量和方法什么修饰符都没有,又叫包修饰符,只有类本身成员和当前包下类的成员可以访问
protected (子类访问级别): 用 protected 修饰的成员变量和方法能被该类的成员以及其子类成员访问,还可以被同一个包中的其他类的成员访问

访问级别.png

案例:

A:给成员变量添加 private 修饰后,测试类中将不能直接访问

B:由于 private 的特性,需要在 Student 类中添加访问该属性的方法,供其它类调用

C:属性的操作一般都是取值和赋值,所以添加对应的公共方法: getXxx()setXxx(参数)

D:在测试类中通过 getXxx()setXxx(参数) 方法来实现属性的访问

    public static void main(String[] args) {
        Student2 stu = new Student2();
        stu.setAge(20);
        stu.setName("twe");

        System.out.println(stu.getAge());
        System.out.println(stu.getName());
        stu.study();
}

this 关键字

this,表示本类对象的引用,本质是一个对象

每一个普通方法都有一个 this,谁调用该方法,this 就指向谁

用法:

this.属性名;
this.方法名(参数);

案例:

package cn.itcast.demo;
public class Student2 {
    private String name = "one";
    private int age = 1;
    
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return this.name;
    }
    public int getAge() {
        return this.age;
    }
    public void study() {
        System.out.println(this.name + " is studying ");
    }
}

final 关键字

final 用于修饰类、方法和变量

  • 修饰类:

    表示该类不能被继承
    例如,StringSystem

  • 修饰方法:

    表示该方法不能被重写,不能与 abstract 共存

  • 修饰变量:

    表示最终变量,即 常量,只能赋值一次;

    不建议修饰引用类型数据,因为,对于引用数据类型,即使加了 final,仍然可以通过引用修改对象的内部数据,意义不大

static 关键字

修饰类的成员:

  • 成员变量:类变量
  • 成员方法:类方法

被修饰成员的调用方式:

类名.成员变量名;
类名.成员方法名(参数);

static 修饰成员变量

被本类所有对象共享

随意修改静态变量的值是有风险的,为了降低风险,可以同时用 final 关键字修饰,即公有静态常量(注意命名的变化):

public final static 变量类型 变量名 = 变量值;

static 修饰成员方法

静态方法:

静态方法中没有对象 this,所以不能访问非静态成员

使用场景:

只需要访问静态成员,不需要访问对象状态,所需参数都由参数列表显式提供

volatile 关键字

volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。

而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

一个 volatile 对象引用可能是 null

public class MyRunnable implements Runnable {
    private volatile boolean active;
    public void run() {
        active = true;
        while (active) { // 第一行
            // 代码
        }
    }
    public void stop() {
        active = false; // 第二行
    }
}

通常情况下,在一个线程调用 run() 方法(在 Runnable 开启的线程),在另一个线程调用 stop() 方法。 如果第一行中缓冲区的 active 值被使用,那么在第二行的 active 值为 false 时循环不会停止。

但是以上代码中我们使用了 volatile 修饰 active,所以该循环会停止;
volatile 修饰后,active 一旦发生变化,会被所有线程知道

synchronized 修饰符

synchronized 关键字声明的方法同一时间只能被一个线程访问,用于保证线程安全

synchronized 修饰符可以应用于四个访问修饰符

public synchronized void showDetails(){
	.......
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。