Java 检查实例变量的可访问性
静态方法是使用static关键字定义的,但是我们不使用static关键字来声明实例变量。通常,我们无法通过静态方法访问实例变量。
在本文中,我们将创建一个实例变量,然后通过静态方法来检查该实例变量的可访问性。首先让我们了解静态方法和实例变量。
实例变量
在编程语言的上下文中,变量是包含任何类型数据的容器的名称。我们可以说它是一个存储单元。
声明变量的语法
Data_Type nameOfvariable = values [optional];
变量可以在声明时初始化,也可以在整个程序中需要时进行初始化。但是值必须与在声明时指定的数据类型相同。
实例
String str;
// only declaration
int price = 59;
// declaration and initialization
str = “Tutorix”;
// initialization of ‘str’
实例变量是非静态变量的一种。它们声明在类的内部,但在该类的每个方法作用域之外。它们可以被定义的类中的所有方法访问。它们可以是public、private、protected或默认(default)的。如果我们没有指定任何访问修饰符,那么变量将使用默认的访问修饰符进行初始化。
静态方法
静态方法使用非访问修饰符static关键字来定义。通常,我们通过创建该类的对象来调用方法,但是静态方法可以在不使用对象的情况下调用。我们只能使用它们的类名来调用它们,因为静态方法属于类,不属于类的实例。
调用静态方法
Class_name.static_method_name
例如,大多数内置类Math的成员都是静态的。我们可以直接使用它们而不需要创建其对象。
示例
public class Main {
public static void main( String[] args ) {
double x = 6.55;
double y = 4.32;
System.out.println(" Ceil value of x: " + Math.ceil(x) );
System.out.println(" Floor value of y: " + Math.floor(y) );
System.out.println(" Value of PI = " + Math.PI);
}
}
输出
Ceil value of x: 7.0
Floor value of y: 4.0
Value of PI = 3.141592653589793
上述示例展示了Math类的静态方法ceil()和floor()的使用。我们可以看到,在我们的程序中直接使用了它们,而没有创建Math类的任何对象。
通过静态方法检查实例变量的可访问性
我们在之前的文章中已经提到,我们不能通过静态方法直接访问实例变量,只能通过创建一个类的实例或对象来访问它们。
示例
下面的程序演示了我们是否可以通过静态方法main()访问实例变量。
public class Main {
public String str = "Tutorialspoint";
public static void main(String []args) {
System.out.println(" Accessing instance variable " + str);
}
}
如果我们尝试运行上面的代码,会得到一个错误。
输出
Main.java:4: error: non-static variable str cannot be referenced from a static context
System.out.println(" Accessing instance variable " + str);
^
1 error
示例
以下程序示例演示了如何通过静态方法访问实例变量。我们将创建一个Main类的对象‘obj’,通过使用这个对象,我们可以访问变量‘str’。
public class Main {
public String str = "Tutorialspoint";
public static void main(String []args) {
Main obj = new Main();
// creating object using new keyword
// To access the instance variable ‘str’
System.out.println(" Accessing instance variable: " + obj.str);
}
}
输出
Accessing instance variable: Tutorialspoint
结论
在本文中,我们了解了实例变量和静态方法的概念。同时,我们还讨论了通过Java程序静态方法访问实例变量的可访问性。