public class MyClass {
// 这是类的内部上下文
private int privateField; // 私有字段
public int publicField; // 公共字段
private void privateMethod() {
// 私有方法
}
public void publicMethod() {
// 公共方法
}
// 类的外部上下文
public static void main(String[] args) {
MyClass obj = new MyClass(); // 在类的外部创建对象
// 在类的外部,只能访问公共成员
obj.publicField = 42; // 可以访问公共字段
obj.publicMethod(); // 可以调用公共方法
// 下面的代码将会导致编译错误,因为 privateField 和 privateMethod 是私有的
// obj.privateField = 789;
// obj.privateMethod();
}
}
private定义了类的成员(字段和方法)只能在类的内部(类的内部是指类的定义体内部)被使用,即使类实例化也不能调用。
static 成员是静态的,可以通过类名直接访问
public class MyClass {
// 静态字段
public static int staticField = 0;
// 静态方法
public static void staticMethod() {
System.out.println("This is a static method.");
}
}
public class Main {
public static void main(String[] args) {
// 可以通过类名直接访问静态字段和静态方法
MyClass.staticField = 42;
MyClass.staticMethod();
// 也可以通过对象来访问静态成员,但不推荐这样做,因为它们与对象无关
MyClass obj = new MyClass();
obj.staticField = 123; // 可以这样做,但不推荐
obj.staticMethod(); // 可以这样做,但不推荐
}
}
在Java中,通过类名访问静态成员(静态字段和静态方法)的原因是因为静态成员属于类本身,而不是特定的对象实例。这意味着它们在类加载时就已经存在,无需创建对象就可以使用。
静态成员被存储在类的静态区域内存中,而不是每个对象实例的堆内存中。这使得它们在整个应用程序的生命周期内都存在,并且可以被多个对象实例共享。因此,为了方便访问这些成员,Java设计了通过类名直接访问的机制,而不需要首先创建类的对象。
final
"final" 是一个关键字,它用于表示某个实体(通常是类、方法、变量等)具有最终性质,不可被继承、重写或修改。
this 表示当前对象的引用,可以使用 this
来引用当前对象的成员变量和方法。
public class MyClass {
private int value;
public MyClass(int value) {
// 使用 this 引用成员变量和方法
this.value = value;
}
public void printValue() {
System.out.println("Value is: " + this.value);
}
}