[Java 基础] Java修饰符

简介: [Java 基础] Java修饰符

Java修饰符详解

Java修饰符用于定义类、方法或者变量,修改其行为的关键字。Java语言主要提供了两类修饰符:

  • 访问权限修饰符: default, public , protected, private
  • 非访问权限修饰符: final, abstract, static, synchronized volatile

下面分别来详细介绍。

一、访问权限修饰符

Java定义了四种访问权限,分别是:默认(缺省)、公共(public)、保护(protected)和私有(private)。

1、default (缺省)

在同一包内可被访问,超出该包范围就不可访问。

class MyClass {
    String name;  // 缺省的访问权限
}

2、public

被修饰的类、方法、属性可以在任何地方被访问。

public class MyPublicClass {
    public String name;  // 公共的访问权限
}

3、protected

被其修饰的类、方法、属性可以被同一个包内的其他类、该类的子类以及其他包中的子类访问。

public class MyProtectedClass {
    protected String name;  // 保护的访问权限
}

4、private

被其修饰的类、方法、属性只能被自己访问和修改。

public class MyPrivateClass {
    private String name;  // 私有的访问权限
}

二、非访问权限修饰符

1、final

用于修饰类、方法和变量,final修饰的类不能被继承,修饰的方法不能被覆盖,修饰的变量为常量,必须初始化且不能改变。

public final class MyFinalClass {
    public final void myMethod() {
        final int num = 10;
    }
}

2、abstract

用于创建抽象类和抽象方法。抽象类不能实例化,抽象方法只有方法名,没有方法体,由子类提供方法实现。

public abstract class MyAbstractClass {
    public abstract void myMethod();
}

3、static

主要用于修饰类属性和类方法,可直接通过类调用,无需创建类的实例。

public class MyStaticClass {
    public static int count; 
    public static void myMethod(){}
}

4、synchronized

在多线程环境下,用synchronized修饰的方法或者代码块可以保证同一时间只有一个线程实例执行,保证了线程的安全性。

public synchronized void show() {
    for (int i = 0; i < 5; i++) {
        System.out.println(Thread.currentThread().getName() + " : " + i);
    }
}

volatile

volatile 修饰符用于修饰变量,主要用于保证多线程操作中变量的可见性,即一个线程修改了某个变量的值,新值对于其他线程来说是可以立即得知的。

public class MyVolatileClass {
    public volatile int count; 
}

关键字volatile的内存语义是:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存;当读一个volatile变量时,JMM会把这个线程对应的本地内存中的共享变量置为无效,线程接下来将从主内存中读取共享变量。

在实际编程中,对于多线程,我们还应配合synchronized关键字,或者java.util.concurrent包下的类库进行使用。

相关文章
|
8天前
|
Java 测试技术 数据库
【JAVA基础篇教学】第十七篇:Java单元测试
【JAVA基础篇教学】第十七篇:Java单元测试
|
8天前
|
Java 索引
【JAVA基础篇教学】第七篇:Java异常类型说明
【JAVA基础篇教学】第七篇:Java异常类型说明
|
8天前
|
存储 Java
【JAVA基础篇教学】第一篇:Java基础数据类型
【JAVA基础篇教学】第一篇:Java基础数据类型
|
6天前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
8天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
8天前
|
XML Java 数据库连接
【JAVA基础篇教学】第十五篇:Java中Spring详解说明
【JAVA基础篇教学】第十五篇:Java中Spring详解说明
|
8天前
|
设计模式 Java
【JAVA基础篇教学】第十四篇:Java中设计模式
【JAVA基础篇教学】第十四篇:Java中设计模式
|
8天前
|
Java
【JAVA基础篇教学】第十三篇:Java中I/O和文件操作
【JAVA基础篇教学】第十三篇:Java中I/O和文件操作
|
8天前
|
Java
【JAVA基础篇教学】第十二篇:Java中多线程编程
【JAVA基础篇教学】第十二篇:Java中多线程编程
|
8天前
|
存储 Java 索引
【JAVA基础篇教学】第十一篇:Java中字符串操作详解
【JAVA基础篇教学】第十一篇:Java中字符串操作详解