Java常用修饰符及示例

Java修饰符是用来改变类、方法、变量、接口等元素的行为和可见性的关键字。Java修饰符主要分为两大类:访问修饰符和非访问修饰符。

访问修饰符(Access Modifiers):

  1. public

    • 提供最大的访问权限,任何类(无论是同一包内的还是不同包的)都可以访问到public修饰的类、方法和变量。

    示例:

    public class MyClass {
        public int myPublicVar;
        public void myPublicMethod() { ... }
    }
    
  2. private

    • 最严格的访问控制,仅限于所在类内部访问,对于类的外部、子类或其他包中的类都无法访问。

    示例:

    class MyClass {
        private int myPrivateVar;
        private void myPrivateMethod() { ... }
    }
    
  3. protected

    • **允许在同一包中的任何类访问,同时允许不同包的子类访问。**这对于继承体系下的封装和访问控制非常有用。

    示例:

    package com.example;
    
    class ParentClass {
        protected int myProtectedVar;
        protected void myProtectedMethod() { ... }
    }
    
    package com.another;
    
    class ChildClass extends com.example.ParentClass {
        // 可以访问myProtectedVar和myProtectedMethod
    }
    
  4. 默认访问权限(无修饰符)

    • 当不使用任何访问修饰符时,类、方法或变量具有包访问权限。也就是说,它们可以被同一包内的所有类访问,但不能被不同包的类访问,无论是否有继承关系。

非访问修饰符(Non-Access Modifiers):

非访问修饰符用于提供关于类、方法、变量等成员的其他信息。 如它们是否是静态的、最终的、抽象的等。

  1. static

    • 修饰类成员(字段、方法或嵌套类),表明它是属于类本身的,而不是属于类的某个实例。无需创建对象就可以通过类名直接访问。

    示例:

    class MyClass {
        static int count;
        static void incrementCount() {
            count++;
        }
    }
    // 直接通过类名调用
    MyClass.incrementCount();
    
  2. final

    • 修饰类表示不能被继承;修饰方法表示不能被重写;修饰变量表示常量,一旦赋值后就不能再更改。

    示例:

    final class MyFinalClass { ... } // 不可继承的类
    class MyClass {
        final void myFinalMethod() { ... } // 不可重写的方法
        final int CONSTANT = 10; // 常量
    }
    
  3. abstract

    • 用于修饰类,表示该类是抽象类,不能被实例化;修饰方法表示该方法没有具体实现,由子类去实现。

    示例:

    abstract class AbstractClass {
        abstract void doSomething(); // 抽象方法
    }
    
  4. synchronized

    • 修饰方法或代码块,用于处理多线程并发访问资源时的同步控制。

    示例:

    class MyClass {
        public synchronized void syncMethod() {
            // 同步方法,同一时间只有一个线程可以执行
        }
    }
    
  5. volatile

    • 修饰变量,确保线程间的可见性和防止指令重排序。

    示例:

    class MyClass {
        volatile boolean flag;
    }
    
  6. transient

    • 修饰变量,表示该变量不会被序列化机制处理,在对象被序列化时,该变量的值不保存到序列化的流中。

    示例:

    class MyClass implements Serializable {
        transient int tempData; // 不会被序列化
    }
    
  7. native

    • 修饰方法,表示该方法是由Java之外的语言(如C、C++)实现的,并通过JNI(Java Native Interface)调用。

    示例:

    class MyClass {
        native void myNativeMethod(); // 由非Java代码实现的方法
    }
    
  8. strictfp

    • 修饰类或方法,表示在这个类或方法中进行的浮点数运算遵循严格的IEEE 754标准,确保跨平台的一致性。

    示例:

    strictfp class MyClass {
        strictfp double calculate() { ... } // 浮点计算严格遵守IEEE 754标准
    }
    

对于接口的修饰符:

  • public:接口默认就是public,所以即使没有显式写出public,接口也会对所有类开放。
  • abstract:接口方法默认就是抽象的,无需显式标注。
  • default:Java 8开始支持的修饰符,用于在接口中提供一个默认的方法实现。
  • static:Java 8开始支持的修饰符,用于在接口中定义静态方法。
  • strictfp:接口也可以被strictfp修饰,使得所有实现此接口的类中的相应方法执行严格的浮点计算。
  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值