zoukankan      html  css  js  c++  java
  • 类方法与实例方法的区别与使用

    Java中类的方法分为类方法(用static修饰)也称为静态方法和实例方法(没有用static修饰)

    1.实例方法:

    当类的字节码加载到内存中的时候,类的实例方法并没有被分配到入口地址,只有当类的对象创建之后,实例方法才分配了入口地址。从而实例方法可以被类创建的所有的对象所调用,还有一点要注意,当我们创建第一个类的对象时,实例方法的入口地址会完成分配,当后续在创建对象时,不会被分配新的入口地址,该类的所有的对象共享实例方法的入口地址,当该类的所有的对象被销毁,入口的地址才会消失。

    2.类方法

    当类的字节码文件加载到内存,类方法的入口地址就会被分配完成,所以类方法不仅仅被该类的对象调用,也可以直接通过类名称完成调用,类方法的入口地址只有程序退出才消失。

    因为类方法的入口地址的分配要早于实例方法入口地址的分配时间。在oc中类创造的对象不需要release释放掉,这个对象会被放到自动缓冲池中。

    3.举例:

    NSObject *object1 =  [[NSObject alloc]init];
    

     instance method 以“-”开头

    class method 以"+"开头,相当于static方法

    +(void)function;//类方法,不需要实例化对象就可以调用的方法

    - (void)function;//成员方法,必须通过实例化的对象调用

    其中oc是以消息机制传递信息,发送alloc消息给类分配内存空间,发送init消息生成对象,指针指向对象本身。

    4.总结:

    (1)在类方法中不能引用实例变量----实例变量的定义类似实例方法,没有用static修饰的变量,实例变量的创建的实例方法的创建类似,也在类的创建时完成,所以在类方法中不能引用实例变量的,因这个时候实例变量还没有分配内存地址。

    (2)在类方法中不能使用super和this关键字

    这是因为super和this都指向父类和本类的对象,而在类方法中调用的时候,这些指代的对象有可能还没有创建。

    (3)类方法不能调用实例方法

    与类方法相比,实例方法的定义就没有什么限制了:

    (1) 实例方法可以引用类变量和实例变量

    (2) 实例方法可以使用super和this关键字

    (3) 实例方法中可以调用类方法

  • 相关阅读:
    多项式逼近remes算法
    Linux 设置系统时间和日期 API
    阿里云ONS而微软Azure Service Bus体系结构和功能比较
    TCP并发server,每个客户一个子进程
    mybatis完美的实战教程
    sharepoint 2013 更改搜索server组态
    zoj 3672 思考题
    HashMap早知道
    My安装Eclipse三种方法插件
    java list<string>组 传递到值js排列
  • 原文地址:https://www.cnblogs.com/guohai-stronger/p/8971320.html
Copyright © 2011-2022 走看看