Java修饰符大全

Java修饰符是Java中常用的关键字之一,在Java语言中使用它来控制访问权限、实现封装、继承和多态。本文将从多个方面对Java修饰符进行详细阐述,包括访问修饰符、非访问修饰符、final修饰符、static修饰符、abstract修饰符、synchronized修饰符、volatile修饰符、transient修饰符、native修饰符和strictfp修饰符。

一、访问修饰符

访问修饰符用于控制Java类、Java接口或类中的成员变量和方法的访问权限,可以分为public、protected、private和默认(即不加任何修饰符)四种类型。

1、public修饰符

public修饰符可以被任何类、接口和成员变量和方法访问,是最开放的修饰符,通常被用于设置Java中的公共API。本质上讲,类和接口的public修饰符必须与文件名相同。

public class MyClass {
    public int num = 10;

    public void print() {
        System.out.println("This is a public method");
    }
}

2、protected修饰符

protected修饰符允许Java类、Java接口和其成员变量和方法在其包内被访问。同时,可以让继承自该类的子类访问该类的成员变量和方法,即使该子类的父类在另外一个包内也可以。

package com.example.demo;

public class MyParentClass {
    protected int num = 10;

    protected void print() {
        System.out.println("This is a protected method");
    }
}

public class MyChildClass extends MyParentClass {
    void printNum() {
        System.out.println("The value of num is " + num);
    }
}

3、private修饰符

private修饰符是Java中最严格的限制访问权限的修饰符,它可以限制Java类、接口和成员变量和方法的访问范围仅在该类或接口本身的内部。即使继承自该类的子类也无法访问该类的私有成员变量和方法。

public class MyClass {
    private int num = 10;

    private void print() {
        System.out.println("This is a private method");
    }
}

4、默认修饰符

当Java类、接口或成员变量和方法不使用任何访问修饰符时,Java将会采用默认修饰符来限制它们的访问范围。默认修饰符只能在同一个包中的类或接口中进行访问。

package com.example.demo;

class MyClass {
    int num = 10;

    void print() {
        System.out.println("This is a default method");
    }
}

二、非访问修饰符

Java中的非访问修饰符主要用于类、方法和变量的修饰,可以分为final、static、abstract和synchronized四种类型。

1、final修饰符

final修饰符可以用于Java类、Java方法和Java变量中,表示该类、方法或变量只能被赋值一次。在声明final变量时必须要赋初值,而final方法表示该方法不可以被子类重写,final类代表该类不可以被继承。

public class MyClass {
    public static final double PI = 3.1415926;

    final int num = 10;

    final void print() {
        System.out.println("This is a final method");
    }
}

final class MyFinalClass {
    void print() {
        System.out.println("This is a final class");
    }
}

2、static修饰符

static修饰符可以用于Java类、Java变量和Java方法中,表示该类、变量或方法属于类而非实例化对象,多个实例的静态成员变量可以共享。而静态方法可以直接调用,无需实例化对象,使用类名.方法名的方式即可调用。

public class MyClass {
    public static int num = 10;
    public int count = 0;

    public static void printNum() {
        System.out.println("The value of num is " + num);
    }

    public void increment() {
        num++;
        count++;
    }
}

3、abstract修饰符

abstract修饰符可以用于Java类、Java方法中,表示该类或方法只是一个声明而没有实现。一旦Java类使用abstract修饰符,则该类就必须被声明为抽象类(abstract class)。而抽象方法必须被声明在抽象类中,子类必须实现父类的所有抽象方法。

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

public class MyChildClass extends MyAbstractClass {
    @Override
    public void print() {
        System.out.println("This is a concrete method");
    }
}

4、synchronized修饰符

synchronized修饰符可以用于Java方法中,表示该方法只能在一个线程中执行。当一个线程正在访问synchronized方法时,其他线程必须等待该线程执行完成后才能继续执行该方法。

public class MyClass {
    public synchronized void print() {
        for (int i = 0; i < 5; i++) {
            System.out.println("This is thread " + Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

三、其他非访问修饰符

除了以上几种非访问修饰符之外,Java中还有volatile、transient、native和strictfp修饰符。它们分别用于保证多线程可见性、防止Java序列化、本地方法调用和定义浮点精度。

1、volatile修饰符

volatile修饰符可以用于Java变量中,可以确保多个线程之间变量值的可见性。当多个线程同时访问同一个volatile变量时,它们会从内存中读取该变量的值,而不是从线程的本地缓存中读取。同样的,当更新一个volatile变量时,它会立即写入到内存中,而不是延迟更新。

public class MyVolatileClass {
    public volatile int num = 0;

    public void increment() {
        num++;
        System.out.println("The value of num is " + num);
    }
}

2、transient修饰符

transient修饰符可以用于Java变量中,表示该变量不参与Java序列化。当Java对象被序列化时,transient变量的值将被忽略。

public class MyTransientClass implements Serializable {
    public transient String name = "Alice";
}

3、native修饰符

native修饰符可以用于Java方法中,表示该方法是使用其他编程语言编写的库函数。只有声明有native修饰符的方法才可以使用Java调用其他语言编写的方法。

public class MyNativeClass {
    public native void callCFunction();
}

4、strictfp修饰符

strictfp修饰符可以用于Java方法中或Java类声明中,表示该方法或类的浮点运算采用IEEE 754规范。在不同的平台之间,浮点数的计算可能会有一些微小的差异。但使用strictfp修饰符可以确保相同的结果在不同的平台上运行时都是相同的。

public strictfp class MyStrictfpClass {
    public strictfp double add(double a, double b) {
        return a + b;
    }
}

结论

Java修饰符是Java程序设计中的核心概念,通过对Java修饰符的详细阐述,我们了解了访问修饰符和非访问修饰符的含义和用法,并给出了具体的代码示例。根据不同的需求,开发人员可以采用不同的Java修饰符进行修饰,以实现相应的功能和效果。

原创文章,作者:AYQMT,如若转载,请注明出处:https://www.506064.com/n/315664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
AYQMT的头像AYQMT
上一篇 2025-01-09 12:14
下一篇 2025-01-09 12:14

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论