📅  最后修改于: 2023-12-03 15:31:58.393000             🧑  作者: Mango
在Java中,修饰符通常用来改变类、方法、变量和构造函数的访问限制。Java的修饰符可以分为两类:访问修饰符和非访问修饰符。
访问修饰符用于控制代码的访问级别。Java中有四种访问修饰符:
public是最常用的访问修饰符,它表示该类、变量或方法可以被任何类或方法调用。下面是一个例子:
public class MyClass{
public int myVar = 1;
public void myMethod(){
System.out.println("Hello, World!");
}
}
private表示该类、变量或方法只能在声明它的类内部访问。下面是一个例子:
public class MyClass{
private int myVar = 1;
private void myMethod(){
System.out.println("Hello, World!");
}
}
protected表示该类、变量或方法可以被声明它的类的子类和同一个包的其他类访问。下面是一个例子:
public class MyClass{
protected int myVar = 1;
protected void myMethod(){
System.out.println("Hello, World!");
}
}
default表示该类、变量或方法只能被同一个包内的其他类访问。如果没有指定访问修饰符,默认为default。下面是一个例子:
class MyClass{
int myVar = 1;
void myMethod(){
System.out.println("Hello, World!");
}
}
非访问修饰符用来改变某些特性的默认行为。Java中有五个非访问修饰符:
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!");
//}
}
static表示该变量或方法属于该类而不是属于对象,可以直接通过类名调用。下面是一个例子:
public class MyClass{
static int myVar = 1;
static void myMethod(){
System.out.println("Hello, World!");
}
}
//以下代码可以直接通过类名调用
//MyClass.myVar = 2;
//MyClass.myMethod();
abstract表示该类或方法没有具体实现,只有声明。需要在子类中实现该方法。下面是一个例子:
public abstract class MyClass{
abstract void myMethod();
}
public class MyOtherClass extends MyClass{
void myMethod(){
System.out.println("Hello, World!");
}
}
synchronized表示该方法同一时刻只能被一个线程访问。下面是一个例子:
public class MyClass{
synchronized void myMethod(){
System.out.println("Hello, World!");
}
}
transient表示该变量不需要被序列化,序列化是指将对象转化为字节流,然后可以将这些字节流写入文件或在网络上传输。下面是一个例子:
public class MyClass implements Serializable{
transient int myVar = 1;
void serializableMethod(){
System.out.println("Hello, World!");
}
}
以上就是Java中常用的访问修饰符和非访问修饰符。在编写代码时,我们需要根据自己的需求选择合适的修饰符。