当前位置: 首页 > news >正文

java基础-修饰符

java修饰符

  • 修饰符分类
  • 访问修饰符的作用域代码说明
    • 访问修饰符总览
  • 非访问修饰符
    • static
    • final
    • abstract
    • synchronized
    • volatile
    • transient
    • native
    • strictfp
    • 非访问修饰符总览表
  • 非访问修饰符组合与冲突规则

修饰符分类

分类:访问修饰符 和 非访问修饰符

1.访问修饰符

  • 公共public:任何情况都可以访问,不同包或相同包的任何类
  • 保护protected :同一个包的类可访问+不同包的子类可访问
  • 默认default:同一个包的任何类可访问
  • 私有pritave:只能在同一个类可访问

2.非访问修饰符

访问修饰符的作用域代码说明

代码示例 注意看package包的路径
父类

package com.idss.utils.base;
public class Parent {
    public int publicVar;      // 全局可见
    protected int protectedVar;// 同一包或子类可见
    int defaultVar;            // 同一包可见
    private int privateVar;    // 仅当前类可见
}

子类在同一包下的,只有private修饰的报错了
在这这里里插入图片描述
下面是子类在不同包下的 这里default和private的都报错了
在这里插入图片描述
说明

  • public 无所谓 是否在用一个包 是不是子类都可以访问
  • protected 哪怕不是同一个包,子类也允许访问
  • default只能在同一个包中,在不同包即使是子类也不能访问
  • private 哪怕是同一个包,子类也不允许访问

访问修饰符总览

修饰符作用范围
public全局可见:任何类均可访问。
protected同一包内 + 子类:允许同一包内的类访问,以及不同包的子类继承访问。
默认(无修饰符)同一包内:仅允许同一包内的类访问(又称包级私有)。
private仅本类内部:仅允许定义它的类内部访问。

非访问修饰符

static

static详情介绍

final

final(不可变),可以声明成员变量、方法、类以及本地变量
1.final标记的类不能被继承

public final class Constants {
	................................
}
// class Sub extends Constants {} // ❌ final 类不可继承

2.final标记的方法不能被子类复写

    public final void acquire(int arg) {
		................................
    }

3.final标记的变量(成员变量或局部变量)即为常量,只能赋值一次

public final class ImmutableClass { // final类
    private final int value; // final变量
  
    public ImmutableClass(int value) {
        this.value = value;
    }
  
    public final void printValue() { // final方法
        System.out.println(value);
    }
}

abstract

abstract抽象修饰范围是 类 或者 方法上
抽象类:不能被实例化,需子类继承并实现抽象方法
抽象方法:只有声明,无具体实现(子类必须重写

public abstract class Animal {
    public abstract void sound(); // 抽象方法
  
    public void sleep() { // 非抽象方法
        System.out.println("Animal is sleeping");
    }
}

public class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}

注意1:抽象类不能实例化,必须有子类进行继承,不是实现是继承。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/20ab4bbf60ac4ced82364b7ff27ec59d.png
注意2:抽象类是提供模板方法作用,所以在抽象类中常见正常模板方法 和 抽象方法,如在AbstractList 中,带有abstract修饰的抽象方法 想要实现具体的方法功能必须有子类继承实现

public abstract E get(int index);   // 获取指定位置的元素
public abstract int size();         // 返回列表长度

同时还有不带abstract修饰的方法,提供了默认实现方式,就是默认的模板方法

public boolean add(E e) { 
    add(size(), e);  // 默认在末尾添加元素
    return true;
}

synchronized

synchronized详情介绍
作用

  • 同步方法:锁定当前对象实例(this)或类的 Class 对象(静态方法)。
  • 同步代码块:显式指定锁对象,控制更细粒度的同步。

volatile

1.确保内存可见性 2.禁止指令重排序 volatile详情描介绍

transient

序列化忽略:标记变量不被序列化
如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient(暂态的) [ˈtrænzɪənt] 关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化
详情使用参考序列化和反序化操作

native

声明方法由本地代码(如 C/C++)实现,需通过 JNI 调用

public class NativeDemo {
    public native void nativeMethod(); // 本地方法声明
  
    static {
        System.loadLibrary("NativeLibrary"); // 加载本地库
    }
}

需要注意的是,native声明的方法是本地方法通过 JNI 调用,但本地方法有操作系统和JVM管理两种
本地方法区分

strictfp

作用:确保浮点运算在不同平台上结果一致(遵循 IEEE 754 标准),针对浮点型数据类型

public strictfp class Calculator {
    public strictfp double calculate() {
        return 1.23 / 3.45; // 严格遵循浮点运算规则
    }
}

非访问修饰符总览表

修饰符作用对象核心功能典型应用场景
static类、方法、变量定义与类关联的静态成员(不依赖实例)工具方法、常量、共享资源(如单例)
final类、方法、变量阻止继承、重写或修改常量、不可变类、核心算法保护
abstract类、方法定义抽象类或抽象方法(需子类实现)模板方法模式、接口默认实现
synchronized方法、代码块保证线程同步(同一时间仅一个线程访问)多线程共享资源操作(如计数器、缓存)
volatile变量确保变量的可见性(直接读写主内存)多线程标志位控制(如状态标记)
transient变量序列化时忽略该变量敏感数据(如密码)或临时缓存字段
native方法声明方法由本地代码(如C/C++)实现JNI(Java Native Interface)集成
strictfp类、方法确保浮点运算在不同平台结果一致科学计算、金融精度敏感场景

非访问修饰符组合与冲突规则

  1. 互斥组合

    • abstractfinal:不能同时修饰类或方法(final 禁止扩展,abstract 需要子类实现)。
    • abstractprivate:抽象方法不能是 private(需子类可见)。
    • abstractstatic:抽象方法不能是 static(静态方法无法被重写)。
  2. 常见组合

    • public static final:定义全局常量(如 public static final int MAX_SIZE = 100)。
    • private static final:类内私有常量。
    • public synchronized:线程安全的公共方法。

相关文章:

  • Jakarta EE 11发布:云原生Java企业应用的新标准
  • Android Studio Narwhal | 2025.1.1新功能
  • Python3笔记之号称替代pip的uv包管理器
  • 01.02、判定是否互为字符重排
  • H3C的MSTP+VRRP高可靠性组网技术(MSTP单域)
  • Adam为什么能加速收敛和自适应学习率?
  • 2025.04.05-美团春招第四题
  • 【大数据生态】Hive的metadata服务未开启
  • 一种单脉冲雷达多通道解卷积前视成像方法【论文阅读】
  • DDoS防御与流量优化
  • 机器学习-线性回归模型
  • JdbcTemplate基本使用
  • [Bond的杂货铺] CKS 证书也到货咯
  • Python标准库json完全指南:高效处理JSON数据
  • 动态规划——两个数组的dp问题
  • [C++面试] 初始化相关面试点深究
  • macos下 ragflow二次开发环境搭建
  • PIXOR:基于LiDAR的3D检测模型解析
  • Skyline配置指南-微信小程序
  • 【Unity网络编程知识】C#的 Http相关类学习
  • 律师网站建设/有域名有服务器怎么做网站
  • 十堰网站开发/郑州seo培训
  • 永康市网站建设/湖南长沙seo教育
  • 湖南省人民政府办公厅/百度推广怎么优化排名
  • 昆明做网站建设找谁/域名申请
  • 蚌埠市建设工程质监站网站/百度推广怎么操作