zoukankan      html  css  js  c++  java
  • Java 修饰符


    章节


    Java 修饰符

    到目前为止,你可能对public关键字已经非常熟悉了,它几乎出现在所有示例中:

    public class MyClass
    

    public关键字是一个访问修饰符,用于设置类、属性、方法和构造函数的访问级别。

    Java中,修饰符可以分为两组:

    • 访问修饰符 控制访问级别
    • 非访问修饰符 不控制访问级别,但提供其他功能

    访问修饰符

    对于类,可以使用public或者缺省值(不指定):

    修饰符 描述
    public 任何其他类都可以访问该类
    缺省值(不指定) 该类只能由同一包中的类访问。当不指定修饰符时,将使用此选项。

    对于属性、方法和构造函数,可以使用以下修饰符:

    修饰符 描述
    public 代码对所有类都是可访问的
    private 代码只能在本类中访问
    缺省值(不指定) 代码只能在同一个包中访问。当不指定修饰符时,将使用此选项
    protected 代码可以在同一个包和子类中访问。

    非访问修饰符

    对于类,可以使用finalabstract:

    修饰符 描述
    final 该类不能被其他类继承
    abstract 该类不能用于创建对象(要访问抽象类,必须使用抽象类的子类)。

    对于属性和方法,可以使用以下修饰符:

    修饰符 描述
    final 不能重写/修改属性和方法
    static 属性和方法属于类,而不是对象
    abstract 只能在抽象类中使用,并且只能用于方法。抽象方法定义时没有主体,例如 abstract void run(); 抽象方法主体由抽象类的子类实现。
    transient transient修饰的属性和方法,在对象序列化时将跳过
    synchronized 方法同时只能由一个线程访问
    volatile 属性值不是线程本地缓存的,而是始终从“主内存”中读取。

    final

    如果希望属性值是不可变的,将属性声明为final:

    示例

    public class MyClass {
      final int x = 10;
      final double PI = 3.14;
    
      public static void main(String[] args) {
        MyClass myObj = new MyClass();
        myObj.x = 50; // 将生成一个错误: 无法为最终变量赋值
        myObj.PI = 25; // 将生成一个错误: 无法为最终变量赋值
        System.out.println(myObj.x); 
      }
    }
    

    static

    不需要创建类的对象,就可以访问静态方法或属性,这与public不同:

    示例

    举例说明,静态方法和公共方法的区别:

    public class MyClass {
      // Static 方法
      static void myStaticMethod() {
        System.out.println("调用静态方法无需创建对象");
      }
    
      // Public 方法
      public void myPublicMethod() {
        System.out.println("调用公共方法需创建对象");
      }
    
      // Main 方法
      public static void main(String[ ] args) {
        myStaticMethod(); // 调用静态方法
        // myPublicMethod(); 这将报错
    
        MyClass myObj = new MyClass(); // 创建MyClass的对象
        myObj.myPublicMethod(); // 调用公共方法
      }
    }
    

    abstract

    抽象方法属于抽象类,它没有主体。主体由子类提供:

    示例

    // 抽象类
    abstract class Person {
      public String fname = "Kevin";
      public int age = 35;
      public abstract void study(); // 抽象方法
    }
    
    // 子类(从Person继承)
    class Student extends Person {
      public int graduationYear = 2008;
      public void study() { // 这里提供了抽象方法的主体
        System.out.println("整天学习");
      }
    }
    
    // Code from filename: MyClass.java
    class MyClass {
      public static void main(String[] args) {
        // 创建Student类的对象(它继承Person的属性和方法)
        Student myObj = new Student(); 
    
        System.out.println("Name: " + myObj.fname);
        System.out.println("Age: " + myObj.age);
        System.out.println("Graduation Year: " + myObj.graduationYear);
        myObj.study(); // 调用抽象方法
      }
    }
    
  • 相关阅读:
    Alpha冲刺
    Alpha冲刺
    抽奖系统(记一次未完成的教训)
    Alpha冲刺
    软件工程
    软工实践
    软工实践
    软工实践
    软工实践
    软工实践
  • 原文地址:https://www.cnblogs.com/jinbuqi/p/11697079.html
Copyright © 2011-2022 走看看