📜  Java中的可访问和非访问修饰符(1)

📅  最后修改于: 2023-12-03 15:31:58.393000             🧑  作者: Mango

Java中的可访问和非访问修饰符

在Java中,修饰符通常用来改变类、方法、变量和构造函数的访问限制。Java的修饰符可以分为两类:访问修饰符和非访问修饰符。

访问修饰符

访问修饰符用于控制代码的访问级别。Java中有四种访问修饰符:

1. public

public是最常用的访问修饰符,它表示该类、变量或方法可以被任何类或方法调用。下面是一个例子:

public class MyClass{
    public int myVar = 1;
    public void myMethod(){
        System.out.println("Hello, World!");
    }
}
2. private

private表示该类、变量或方法只能在声明它的类内部访问。下面是一个例子:

public class MyClass{
    private int myVar = 1;
    private void myMethod(){
        System.out.println("Hello, World!");
    }
}
3. protected

protected表示该类、变量或方法可以被声明它的类的子类和同一个包的其他类访问。下面是一个例子:

public class MyClass{
    protected int myVar = 1;
    protected void myMethod(){
        System.out.println("Hello, World!");
    }
}
4. default

default表示该类、变量或方法只能被同一个包内的其他类访问。如果没有指定访问修饰符,默认为default。下面是一个例子:

class MyClass{
    int myVar = 1;
    void myMethod(){
        System.out.println("Hello, World!");
    }
}
非访问修饰符

非访问修饰符用来改变某些特性的默认行为。Java中有五个非访问修饰符:

1. final

final表示该变量的值不能被改变,被final修饰的类不能被继承,被final修饰的方法不能被重写。下面是一个例子:

public class MyClass{
    final int myVar = 1;
    final void myMethod(){
        System.out.println("Hello, World!");
    }
    //以下代码会报错
    //class MyOtherClass extends MyClass{}
    //void myMethod(){
    //      System.out.println("Hello, World!");
    //}
}
2. static

static表示该变量或方法属于该类而不是属于对象,可以直接通过类名调用。下面是一个例子:

public class MyClass{
    static int myVar = 1;
    static void myMethod(){
        System.out.println("Hello, World!");
    }
}
//以下代码可以直接通过类名调用
//MyClass.myVar = 2;
//MyClass.myMethod();
3. abstract

abstract表示该类或方法没有具体实现,只有声明。需要在子类中实现该方法。下面是一个例子:

public abstract class MyClass{
    abstract void myMethod();
}
public class MyOtherClass extends MyClass{
    void myMethod(){
        System.out.println("Hello, World!");
    }
}
4. synchronized

synchronized表示该方法同一时刻只能被一个线程访问。下面是一个例子:

public class MyClass{
    synchronized void myMethod(){
        System.out.println("Hello, World!");
    }
}
5. transient

transient表示该变量不需要被序列化,序列化是指将对象转化为字节流,然后可以将这些字节流写入文件或在网络上传输。下面是一个例子:

public class MyClass implements Serializable{
    transient int myVar = 1;
    void serializableMethod(){
        System.out.println("Hello, World!");
    }
}

以上就是Java中常用的访问修饰符和非访问修饰符。在编写代码时,我们需要根据自己的需求选择合适的修饰符。