美文网首页
Java 修饰符

Java 修饰符

作者: Tinyspot | 来源:发表于2022-08-05 06:54 被阅读0次

    1. 访问修饰符

    修饰符 本包 子孙类 其他包
    public Y Y Y
    protected Y Y
    default Y
    private

    2. static 修饰符

    static 可以修饰变量、方法和代码块

    2.1 静态属性(类属性)

    静态属性存在方法区
    静态成员是全类所有对象共享的成员

    2.2 静态方法(类方法)

    • 静态方法只能访问其他的静态成员,不能访问非静态成员
    • 静态方法中不允许使用 this 或 super 关键字
    • 静态方法可以继承,不能被覆盖(重写)、没有多态(子类实际上只是将父类中的该同名方法进行了隐藏,而非重写)

    2.3 静态代码块

    类加载时,触发静态代码块的执行(仅一次)
    执行地位:静态属性初始化之后
    作用:可为静态属性赋值,或必要的初始行为

    3. final 修饰符

    final表示不可改变
    final 可以修饰类、方法和变量,称为最终类、最终方法、常量

    3.1 最终类

    final 修饰类:此类不能被继承。例如 String, Math, System

    3.2 最终方法

    final 修饰方法:此方法不能被重写,可以被继承

    3.3 常量

    final 修饰变量:此变量值不能被改变(常量)
    常量类型:静态常量、成员常量、局部常量、基本类型常量和引用类型常量

    成员常量
    成员常量不再提供默认值,必须手动赋初始值
    赋值时机:显示初始化或构造方法
    注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值

    public class Animal {
        private final String name;
        public Animal() {
            this.name = "Bob";
        }
        public Animal(String name) {
            this.name = name;
        }
    }
    

    静态常量
    静态常量不再提供默认值,必须手动赋初始值
    赋值时机:显示初始化或静态代码块

    public class Animal {
        private static final String NAME = "";
        static {
            // NAME = "";
        }
    }
    

    特殊:对象常量
    final 修饰基本类型:值不可变
    final 修饰引用类型:地址不可变(只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生改变)

    public static void main(String[] args) {
        final int num = 10;
        // num = 30; // Cannot assign a value to final variable 'num'
    
        final int[] nums = new int[]{1, 2, 3};
        // nums = new int[5]; // 指向一个新的数组,不可以
        nums[0] = 11; // 修改数组里的元素是可以的
    
        final Person person = new Person();
        // person = new Person();  // Cannot assign a value to final variable 'person'
        person.setName("xing");
    }
    

    其他:
    'static' method declared 'final' :将一个方法声明为final,是防止该类被子类重写。但是static方法本身就不可被重写

    3.3 final, finally, finalize

    • final 用于声明属性,方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承.
    • finally 是异常处理语句结构的一部分,表示总是执行.
    • finalize 是 Object 类的一个方法,垃圾回收的方法

    4. abstarct 修饰符

    • 修饰类和方法
    • 修饰的类即为抽象类,不能被实例化
    • 构造方法和static方法不能是抽象的
    • 父类的抽象方法往往在子类中实现,抽象类可以具有指向子类对象的对象引用

    相关文章

      网友评论

          本文标题:Java 修饰符

          本文链接:https://www.haomeiwen.com/subject/ytftwrtx.html