[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包下的类库进行使用。

相关文章
|
3月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
80 2
|
4月前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
4月前
|
Java
【Java基础面试四】、介绍一下Java的数据类型
这篇文章介绍了Java的数据类型,包括8种基本数据类型(整数、浮点、字符、布尔)和3类引用数据类型(数组、类、接口),并提供了基本数据类型所占内存空间和数据范围的详细信息。
|
4月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(完结)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!(完结)
44 0
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
492 37
|
2月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
27 1
|
2月前
|
Oracle Java 关系型数据库
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
|
3月前
|
缓存 安全 Java
【Java面试题汇总】Java基础篇——基础、修饰符和关键字(2023版)
Java的特点和优点,、Java 8的新特性、面向对象、基本数据类型和引用类型、自动拆装箱与自动装箱、==与equals()的区别、为什么重写equals()就要重写hashcode()、抽象类和接口的区别、重载和重写的区别、四种引用方式、wt()和sleep()的区别、java方法是值传递还是引用传递?访问修饰符、static、final、this和super、volatile的用法及原理