zoukankan      html  css  js  c++  java
  • java里类方法和实例方法

    实例方法相对于静态方法(或者叫类方法)而言没有 static 前缀类般方法被对象拥有(也称之实例方法原因)
    特点定义时候前面没有 static 前缀本类直接调用时候必须也实例方法内否则调用前必须先实例出对象例:
    class A {
    public void instanceMethod () {
    System.out.println("这是一个实例方法");
    }
    public static void staticMethod () {
    System.out.println("这是一个静态方法");
    instanceMethod(); //错
    new A().instanceMethod(); //只有这样才对
    }
    }
    class B {
    public void callInstanceMethod () {
    new A().instanceMethod(); //调用 A 实例实例方法
    A.staticMethod(); //调用 A 静态方法
    }
    }

    当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。需要注意的是,当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。

    对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。类方法的入口地址直到程序退出才被取消。

    类方法在类的字节码加载到内存时就分配了入口地址,因此,Java语言允许通过类名直接调用类方法,而实例方法不能通过类名调用。在讲述类的时候我们强调过,在Java语言中,类中的类方法不可以操作实例变量,也不可以调用实例方法,这是因为在类创建对象之前,实例成员变量还没有分配内存,而且实例方法也没有入口地址。

    class A

    {     int x,y;

         static float f(int a){}

         float g(int x1,int x2){}

    }

    class B

    {   public static void main(String args[])

        {  A a1=new A();

          A.f(2,3);        //合法。

          a1.f(2,4);       //合法。

          a1.g(2,5);      //合法。

          A.g(3,2);      //非法。

        }

    }

  • 相关阅读:
    hive与hbase整合
    待重写
    hive DML
    【知识强化】第六章 总线 6.1 总线概述
    【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构
    【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
    【知识强化】第四章 指令系统 4.2 指令寻址方式
    【知识强化】第四章 指令系统 4.1 指令格式
    【知识强化】第三章 存储系统 3.6 高速缓冲存储器
    【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
  • 原文地址:https://www.cnblogs.com/zhaoyueplc/p/3668612.html
Copyright © 2011-2022 走看看