实例方法可以直接访问实例方法。这是什么意思?

时间:2018-02-25 21:03:31

标签: java

在浏览Java文档后,我了解到使用' static'关键字是类变量(或静态字段),类似于使用'静态'在方法声明期间,是一个静态方法(或类方法)。类变量和类方法是按类名本身引用的。

阅读thisthis主题,但无法理解Java文档中的以下句子。

说什么是什么意思..... 并非所有实例和类变量和方法的组合都是允许的:

  1. 实例方法可以访问实例变量和实例方法 直接
  2. 实例方法可以访问类变量和类方法 直接
  3. 类方法可以直接访问类变量和类方法。
  4. Java doc清楚地解释了Class变量和Class方法,但是上面3点让我感到困惑。

2 个答案:

答案 0 :(得分:1)

Example Execution

  

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方法可以直接访问类变量和类方法。

  • 静态方法是Java中可以在不创建的情况下调用的方法 阶级的对象。它们由类名本身或引用引用 该类的对象。
  • 内存分配:它们存储在堆的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'引用,因此它无法访问实例成员。