• 03 Java 修饰符


    Java 修饰符主要分为两类:

    • 访问修饰符
    • 非访问修饰符

    访问修饰符

    • public,对所有类可见
    • protected,对同一包内的类和子类可见
    • default,同一个包内的类可见
    • private,对当前类可见
    修饰符 当前类 同一包内 子孙类 其它包
    public Y Y Y Y
    protected Y Y Y N
    default Y Y N N
    private Y N N N

    非访问修饰符

    static

    • static 是一个修饰符,被 static 修饰的成员变量和成员方法,不依赖类的特定实例,被类的所有实例共享,因此静态类方法中不可以定义 this,super 等关键字。
    • 静态成员变量和方法,可以使用类直接调用,如下可以直接使用 Dog 访问 name,age,printInfo()。
    • 静态方法只能访问静态成员,非静态方法既可以访问静态也可以访问非静态成员,如在 printInfo() 方法使用 static 修饰,其中涉及的 name 和 age 也必须使用 static 修饰。
    public class Dog {
        
        static String name;
        static int age;
        
        public static void printInfo() {
            System.out.println("name:" + name + ", age:" + age);
        }
        
        public static void main(String[] args) {
            
            Dog.name = "roy";
            Dog.age = 3;
            Dog.printInfo();
            
            Dog dog = new Dog();
            dog.printInfo();
        }
    }
    
    name:roy, age:3
    name:roy, age:3
    

    final

    • final 可以修饰类,方法,变量(成员变量和局部变量)
    • 当 final 修饰一个类,表示这个类不能被继承
    • 当 final 修饰一个方法,明确禁止该方法在子类中被覆盖
    • 当 final 修饰一个变量,如是基本类型,表示数值一旦确定,不能修改,如是引用类型,则初始化之后不能指向另一个对象

    abstract

    • 抽象类不能实例化对象,声明抽象类的唯一目的是将来对该类进行扩充
    • 一个类不能同时被 abstract 和 final 修饰,如果一个类包含抽象方法,则类一定要声明为抽象类,抽象类不一定有抽象方法
    • 抽象方法是一种没有任何实现的方法,该方法具体由子类提供
    • 抽象方法不能被声明为 final 和 static
    • 任何集成抽象类的子类必须实现弗雷的所有抽象方法,除非子类也是抽象类
    public abstract class SuperClass {
        abstract void m();
    }
    
    class SubClass extends SubClass {
        void m() {
            ………………
        }
    }
    

    synchronized

    synchronized 表示同一时间只能被一个线程访问

    public synchronized void showDetails() {
    
    }
    

    volatile

    volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值,而且,当成员变量发生改变时,会强制线程将变化的值回写到共享内存,这样在任何时刻,两个不同的线程总会看到某个成员变量的同一个值。

    public class Run {
        private volatile boolean active;
    }
  • 相关阅读:
    python中常用的数据类型之整型(int),浮点型(float), 布尔值(bool), 复数(complex)
    requests库的基础使用
    socket,urllib,urllib3,request多种方法请求网页首页
    nginx日志切割
    gitlab社区版安装
    批量修改文件编码
    lvm磁盘扩展及添加磁盘lvm分区
    函数
    集合
    数据类型练习题
  • 原文地址:https://www.cnblogs.com/wangyaoguo/p/8441353.html
Copyright © 2020-2023  润新知