Java 修饰符
修饰符
到目前为止,您已经非常熟悉几乎所有示例中出现的 public
关键字:
public class Main
public
关键字是一个 访问修饰符,这意味着它用于设置类、属性、方法和构造函数的访问级别.
我们把修饰符分成两组:
- 访问修饰符函数 - 控制访问级别
- 非访问修饰符函数 - 不控制访问级别,但提供其他功能
访问修饰符
对于 类,可以使用 public
或 default:
修饰符 | 描述 | 试一试 |
---|---|---|
public | 任何其他类都可以访问该类 | 试一试 » |
default | 只有同一个包中的类才能访问该类.这在您不指定修饰符时使用.您将在 java 包 一章中了解有关包的更多信息 | 试一试 » |
对于 属性、方法和构造函数,可以使用以下方法之一:
修饰符 | 描述 | 试一试 |
---|---|---|
public | 所有类都可以访问该代码 | 试一试 » |
private | 代码只能在声明的类中访问 | 试一试 » |
default | 代码只能在同一个包中访问.这在您不指定修饰符时使用.您将在 java 包 一章中了解有关包的更多信息 | 试一试 » |
protected | 代码可以在相同的包和 子类 中访问.在 Java 继承 一章中,您将了解更多关于子类和超类的信息 | 试一试 » |
非访问修饰符
对于 类, 可以使用 final
或 abstract
:
修饰符 | 描述 | 试一试 |
---|---|---|
final | 该类不能被其他类继承(您将在 Java 继承 一章中了解有关继承的更多信息) | 试一试 » |
abstract | 该类不能用于创建对象(要访问抽象类,必须从另一个类继承)。 | 试一试 » |
对于 属性和方法,可以使用以下方法之一:
修饰符 | 描述 |
---|---|
final | 无法覆盖/修改属性和方法 |
static | 属性和方法属于类,而不是对象 |
abstract | 只能用于抽象类,也只能用于方法。例如,该方法没有主体 abstract void run();. 主体由子类(继承)提供。在继承和抽象章节中,您将学习到有关继承和抽象的更多信息 |
transient | 序列化包含属性和方法的对象时,将跳过这些属性和方法 |
synchronized | 方法一次只能由一个线程访问 |
volatile | 属性的值不是本地缓存的,总是从 "主存" 中读取 |
Final
如果不想覆盖现有属性值,请将属性声明为 final
:
实例
public class Main {
final int x = 10;
final double PI = 3.14;
public static void main(String[] args) {
Main myObj = new Main();
myObj.x = 50;
myObj.PI = 25;
System.out.println(myObj.x);
}
}
Static
static
静态方法意味着它可以在不创建类的对象的情况下被访问,这与 public
不同:
实例
一个演示 static
方法和 public
方法之间差异的实例:
public class Main {
// Static method
static void myStaticMethod() {
System.out.println("You can call static methods without creating objects");
}
// Public method
public void myPublicMethod() {
System.out.println("Public methods must be called by creating objects");
}
// Main method
public static void main(String[] args) {
myStaticMethod();
Main myObj = new Main();
myObj.myPublicMethod();
}
}
Abstract
abstract
抽象方法属于 abstract
抽象类,并且没有主体。主体由子类提供:
实例
// abstract class
abstract class Main {
public String fname = "John";
public int age = 24;
public abstract void study();
}
// Subclass (inherit from Main)
class Student extends Main {
public int graduationYear = 2022;
public void study() {
System.out.println("Studying all day long");
}
}