C++到Java学习总结(与类相关,未完待续)

时间:2024-10-11 07:31:30

X、java中的类*

在Java中,类和类成员(如变量、方法)的修饰符有很多种,包括访问控制修饰符(如publicprivate)和非访问控制修饰符(如staticfinalabstract等)。这些修饰符控制类、方法和变量的可见性、行为和特性。以下是它们的详细分类和作用:

  1. 访问控制修饰符(Visibility Modifiers)

这些修饰符控制类、方法和变量的可见性,即它们在程序中的访问权限。

  • public:公开的,表示该类、方法或变量对所有类可见。

    • 类级别:类可以被任何地方访问。
    • 方法/变量级别:方法或变量可以被其他类访问。
    public class MyClass {
        public int x;  // 公开的成员变量
        public void doSomething() {  // 公开的方法
            // 任何类都可以调用这个方法
        }
    }
    
  • private:私有的,表示该类、方法或变量仅对当前类可见,不能被其他类访问。

    • 类级别:类不能使用private修饰,只有内部类才能是private
    • 方法/变量级别:只能在声明它的类内部访问。
    class MyClass {
        private int x;  // 仅当前类可访问
        private void doSomething() {  // 仅当前类可调用的方法
            // 外部类无法调用此方法
        }
    }
    
  • protected:受保护的,表示该类、方法或变量对同一包中的类和任何子类可见(即使子类在不同的包中)。

    class MyClass {
        protected int x;  // 同包或子类可访问
        protected void doSomething() {  // 同包或子类可调用
            // 可以被子类覆盖
        }
    }
    
  • 默认(包级别,缺省访问权限):如果没有使用任何访问控制修饰符,默认情况下,类、方法和变量对同一包中的其他类可见,但对其他包中的类不可见。

    class MyClass {  // 没有显式访问修饰符,包内可见
        int x;  // 包内可见,其他包无法访问
        void doSomething() {  // 包内可见的方法
            // 只有同一个包中的类可以访问这个方法
        }
    }
    
  1. 非访问控制修饰符(Non-Access Modifiers)

这些修饰符用于定义类、方法和变量的特定行为或属性。

  • static:静态的,用于类级别的成员变量或方法。静态成员属于类,而不是类的实例,可以通过类名直接访问。

    class MyClass {
        static int x;  // 静态变量,所有实例共享
        static void doSomething() {  // 静态方法
            // 可以不通过对象,直接通过类名访问
        }
    }
    
  • final:最终的,用于类、方法或变量,表示不能修改。

    • final类不能被继承。
    • 方法final方法不能被子类覆盖。
    • 变量final变量是常量,初始化后不能再修改。
    final class MyFinalClass {  // 不能继承此类
    }
    
    class MyClass {
        final int x = 10;  // 常量
        final void doSomething() {  // 不能被子类覆盖
        }
    }
    
  • abstract:抽象的,用于类和方法,表示类或方法必须被子类实现。

    • :抽象类不能实例化,必须通过子类实现。
    • 方法:抽象方法没有方法体,必须由子类实现。
    abstract class MyAbstractClass {  // 不能实例化此类
        abstract void doSomething();  // 抽象方法,子类必须实现
    }
    
  • synchronized:用于方法或代码块,确保多线程访问时只有一个线程可以执行该代码,其他线程必须等待。

    class MyClass {
        synchronized void doSomething() {  // 同步方法
            // 确保多线程安全
        }
    }
    
  • volatile:用于变量,表示变量的值在多个线程中可能会被修改,不能缓存该变量的值,必须从主内存中读取。

    class MyClass {
        volatile int x;  // 保证线程读取最新值
    }
    
  • transient:用于成员变量,表示该变量不会被序列化。

    class MyClass implements Serializable {
        transient int x;  // 此变量不会被序列化
    }
    
  • strictfp:用于类、接口或方法,表示浮点计算将遵循严格的IEEE 754标准。

    strictfp class MyClass {  // 保证浮点数计算的精度
        strictfp void doSomething() {  // 方法也可以标记为strictfp
        }
    }
    
  • native:用于方法,表示该方法是本地方法,由外部C/C++代码实现。

    class MyClass {
        native void doSomething();  // 本地方法,通常通过JNI调用
    }
    
  1. 修饰符组合使用
    修饰符可以组合使用。例如:
  • 一个静态且最终的变量:
    public static final int CONSTANT = 100;  // 常量,所有类共享
    
  • 一个同步的静态方法:
    public static synchronized void synchronizedMethod() {
        // 多线程访问时,确保同步
    }
    
  1. 类的修饰符
  • public:类可以被任何其他类访问。
  • abstract:类是抽象的,不能实例化。
  • final:类不能被继承。
  • strictfp:类中的所有浮点运算都遵守IEEE 754标准。

总结:

  • 访问控制修饰符publicprivateprotected和默认(包访问)。
  • 非访问控制修饰符staticfinalabstractsynchronizedvolatiletransientstrictfpnative

这些修饰符可以用于类、方法、成员变量等,以控制访问权限和定义行为特性。