在浏览Java文档后,我了解到使用' static'关键字是类变量(或静态字段),类似于使用'静态'在方法声明期间,是一个静态方法(或类方法)。类变量和类方法是按类名本身引用的。
阅读this和this主题,但无法理解Java文档中的以下句子。
说什么是什么意思..... 并非所有实例和类变量和方法的组合都是允许的:
Java doc清楚地解释了Class变量和Class方法,但是上面3点让我感到困惑。
答案 0 :(得分:1)
1.Instance方法可以直接访问实例变量和实例方法。
一些信息:
实例方法是需要其类对象的方法 在它被调用之前创建。要调用实例方法,我们必须这样做 在其定义的范围内创建类的Object。
实例变量在类中声明,但在方法,构造函数之外 或任何阻止。
class Example1 {
int a = 100; // instance variable
public void printData() { // this an instance method called using an object of class Example1
getData(); // accessing another instance method directly without any object
}
public void getData() {
System.out.println(a); // accessing instance variable 'a' directly without any object
}
}
public class InstanceDemo {
public static void main(String[] args) {
Example1 obj1 = new Example1();
obj1.printData(); // will print 100
}
}
2.Instance方法可以直接访问类变量和类方法。
类变量也称为静态变量,用static声明 类中的关键字,但在方法,构造函数或块之外。
class Example2 {
static int a = 20; // 'static' / class variable
public void printData() { // instance method
setData(); // accessing class method directly
System.out.println(a); // accessing class variable directly
}
public static void setData() { // class method 'static'
a = 200; // setting value of class variable 'a'
}
}
public class InstanceDemo {
public static void main(String[] args) {
Example2 obj2 = new Example2();
obj2.printData(); // will print 200
}
}
3.Class方法可以直接访问类变量和类方法。
内存分配:它们存储在堆的Permanent Generation空间中 它们与它们所在的类不相关联 那个班。但是他们的局部变量和传递给它们的参数是 存储在堆栈中。因为他们属于班级所以他们可以被召唤 没有创建类的对象。
class Example3 {
static int a = 300;
public static void printData() {
getData(); // accessing class method
}
public static void getData() {
System.out.println(a); // accessing class variable 'a'
}
}
public class InstanceDemo {
public static void main(String[] args) {
//calling class method : class method are called using class name.
Example3.printData(); // will print 300
}
}
答案 1 :(得分:0)
我认为你只需要练习编程,这样你就可以体验语言的运作方式。理解静态访问的怪癖是最初要掌握的难事之一。静态成员通常面向提供类实用程序。
实例方法在堆栈上获取指向它正在操作的实例的指针,因此它可以访问实例的成员。静态方法与任何特定实例无关。没有'this'引用,因此它无法访问实例成员。