精华内容
下载资源
问答
  • 类方法和实例方法区别

    千次阅读 2019-06-15 09:13:50
    Objective-C里面既有实例方法类方法类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method)。工厂方法的称谓明显一般意义上的工厂方法不同,从本质上来说,类方法可以独立...

    Objective-C里面既有实例方法也类方法。类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method)。工厂方法的称谓明显和一般意义上的工厂方法不同,从本质上来说,类方法可以独立于对象而执行,所以在其他的语言里面类方法有的时候被称为静态方法。
    注意点一:类方法
    1,类方法可以调用类方法。
    2,类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
    3,类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。
    4,类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思
    注意点二:类方法和实例方法
    1:实例方法是— 类开头是+ 实例方法是用实例对象访问,类方法的对象是类而不是实例,通常创建对象或者工具类。
    在实例方法里,根据继承原理发送消息给self和super其实都是发送给self
    在类方法里面self是其他的类的类方法,在类方法中给self发送消息只能发类方法self是类super也是
    什么时候用类方法,要创建一个实例时候获取一个共享实例,或者获取关于类的一些共有信息
    2:类方法(class method)和实例方法(instance method)。类方法被限定在类范围内,不能被类的实例调用(即脱离实例运行)。alloc就是一种类方法。实例方法 限定在对象实例的范围内(即实例化之前不能运行)。init就是一种实例方法,被alloc方法返回的对象实例调用。
    instance method 以减号 “-” 开头
    class method 以加号 “+” 开头,相当于static方法

     1 #import <Foundation/Foundation.h>
     2 /*
     3  对象方法
     4  1> 减号 - 开头
     5  2> 只能由对象来调用
     6  3> 对象方法中能访问当前对象的成员变量(实例变量)
     7  
     8  类方法
     9  1> 加号 + 开头
    10  2> 只能由类(名)来调用
    11  3> 类方法中不能访问成员变量(实例变量)
    12  
    13  
    14  类方法的好处和使用场合
    15  1> 不依赖于对象,执行效率高
    16  2> 能用类方法,尽量用类方法
    17  3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法
    18  
    19  可以允许类方法和对象方法同名
    20  */
    21 
    22 
    23 @interface Person : NSObject
    24 {
    25     int age;
    26 }
    27 
    28 // 类方法都是以+开头
    29 + (void)printClassName;
    30 
    31 - (void)test;
    32 + (void)test;
    33 
    34 @end
    35 
    36 @implementation Person
    37 
    38 + (void)printClassName
    39 {
    40     // error:instance variable 'age' accessed in class method
    41     // 实例变量age不能在类方法中访问
    42     //NSLog(@"这个类叫做Person-%d", age);
    43 }
    44 
    45 - (void)test
    46 {
    47     NSLog(@"111-%d", age);
    48     
    49     //[Person test];
    50 }
    51 
    52 + (void)test
    53 {
    54     // 会引发死循环
    55     //[Person test];
    56     
    57     NSLog(@"333");
    58     
    59     // 会引发死循环
    60 //    /[Person test];
    61 }
    62 
    63 @end
    64 
    65 int main()
    66 {
    67     //[Person printClassName];
    68     
    69     [Person test];
    70     
    71     //Person *p = [Person new];
    72     //[p test];
    73     
    74     /*
    75      -[Person printClassName]: unrecognized selector sent to instance 0x7fa520c0b370
    76      */
    77     // 系统会认为现在调用的printClassName是个对象方法
    78     //[p printClassName];
    79     
    80     return 0;
    81 }
    

    转载博客园 iOS_bowen.

    展开全文
  • java里类方法和实例方法区别 我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。 当类的字节码文件被加载到...

                                                                                                             

    java里类方法和实例方法区别

    我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。

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

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

    类方法在类的字节码加载到内存时就分配了入口地址,因此,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);      //非法。

        }

    }

     

    Java中的一个类怎么调用另一个类中的方法?

    java类有两种方法一种是类方法就是用static修饰的,一种是实例方法,就是没有static修饰的方法。类方法可以同时类名.方法名的方式调用。而实例方法必须先生存类的实例在通过实例.方法名的方式调用。例如:

     
    public  class  MethodCall
    {
         public  static  void  main(String[] args)
         {
             Test.sayStatic();//类名+方法名
                  
             Test test =  new  Test();//先生成类
             test.sayInstance();//再调用
         }
    }
    class  Test
    {
         public  static  void  sayStatic()
         {
             System.out.println( "这是一个静态方法。" );
         }
         public  void  sayInstance()
         {
             System.out.println( "这是一个实例方法。" );
         }
    }

     

     

     

    展开全文
  • python的类方法和实例方法有什么区别 实例方法只能被实例调用,类方法可以被类或实例调用 实例方法和类方法最主要的区别在于,定义类方法主要是要加一个装饰器,@classmethod 而实例方法没有这个装饰器。一般实例...

    python的类方法和实例方法有什么区别

    实例方法只能被实例调用,类方法可以被类或实例调用

    实例方法和类方法最主要的区别在于,定义类方法主要是要加一个装饰器,@classmethod

    而实例方法没有这个装饰器。一般实例方法至少有一个参数,通常用self,也可以用其他非关键字字符代替.

    展开全文
  • java里类方法和实例方法区别

    千次阅读 2017-12-24 12:55:02
    我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。 当类的字节码文件被加载到内存时,类的实例方法...
    我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。


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


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


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

    http://blog.csdn.net/sx5273/article/details/54342201

    1、调用方式上

    静态方法依赖于类,通过类.静态方法调用;实例方法依赖于类的对象,需要创建对象后,对象.实例方法使用

    2、使用上

    实例方法内部不能定义静态变量,会出现编译错误;实例方法可以直接调用静态方法;静态方法内部可以定义和使用实例变量,静态方法无法直接调用实例方法(因静态方法加载时类还没有实例化,实例方法依赖于类的对象)

    3、静态方法和实例方法的内存分配问题

    一般认为静态方法常驻内存,实例方法只有在使用时才分配内存。但事实上,是一样的,都是在类被加载时常驻内存。static方法和non-static方法在创建实例对象时,属性的值对各个对象各不相同(每个实例对象的所有字段在内存中有一个拷贝,用于区分操作哪个对象的字段),new一个实例时,会把实例属性放在GC Heap里面,同时new的对象放在堆栈上,堆栈指针指向刚才拷贝的的内存地址;而静态方法中的静态字段只有一份;对于static和non-static方法代码都是一样的,所以只需要一份代码,占用一份内存空间。调用速度上因实例方法需要实例化分配内存,静态方法则不用,故静态方法会快一点,但也可忽略不计

    4、区分静态方法和实例方法的原因

    早期结构化编程几乎所有方法都是静态方法,引入实例化方法的概念是在面向对象概念出现以后,区分静态方法和实例方法不能单单从性能上理解。创建c++、java、c#这样面向对象语言的大师引入实例化方法一定不是要解决什么性能、内存的问题,而是为了让开发更加模式化、面向对象化。这样说的话,静态方法和实例化方式的区分是为了解决模式的问题

    5、适用场景

    静态方法:一个方法与类的对象无关,如工具类等

    实例方法:一个方法依赖于类的对象;多线程场景下,如果静态方法中含有静态变量,如果对静态变量进行更改操作易造成线程安全问题

    6、静态方法与单例模式

    如果一个方法与对象的实例无关用静态方法,反之采用实例方法,但如果方法和对象的实例有关,又想维护一份实例时,需要用单例模式。如系统运行时,需要加载一些的配置和属性,是公共的,需要在整个生命周期存在,只需要一份就可以,但此时这些配置和属性又是通过面向对象的编码方式得到的,虽然用静态方法也能解决,但最好的方式是采用单例模式


    展开全文
  • iOS的类方法和实例方法区别与使用

    千次阅读 2017-02-16 22:37:06
    1.什么是类方法? 在OC类定义方法时以 + 开头的方法,又称为静态方法。如:+ (viod)方法名{ }. 作用:不用实例话就可以直接调用的方法,常用于一些common或者UtiKit等公共方法类中。 调用:[类名 方法名】 限制:...
  • java中类方法和实例方法区别

    千次阅读 2016-04-19 15:58:52
    我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。  当类的字节码文件被加载到内存时,类的实例方法不会...
  • Object-C中的类方法和实例方法区别

    千次阅读 2014-03-21 10:40:40
    Object-C中方法的概念Java一样,Object-c中有两种方法—实例方法(需要实例化才能调用的方法)和类方法(类方法也可以说是静态方法,参照Java中的静态方法)。  声明实例方法需要在减号字符作为前缀。声明类方法需要...
  • 1.什么是类方法? 在OC类定义方法时以 + 开头的方法,又称为静态方法。如:+ (viod)方法名{ }. 作用:不用实例话就可以直接调用的方法,一般是有返回值的,返回对应的实例(数组、字符串等),还有可能就是本身类...
  • 最近看一些面试题,看到类方法和实例方法,有点不太懂,经过查找资料之后才弄明白。  简单的说java类中的方法分为类方法(用static修饰,也叫静态方法)和实例方法(没有泳static修饰,也叫非静态方法)。通过查找...
  • 主要介绍了Ruby类实例变量、类实例方法和类变量、类方法区别,本文探讨一下他们的定义基本的使用场景,需要的朋友可以参考下
  • 一、类方法 类方法是静态方法,前面需要有static修饰符修饰。类方法内不能涉及有关变量的内容 1、不能调用类的对象方法 2、不能引用对象变量 3、类方法不能被重写(覆盖) 4、类方法不能使用super, this关键字 二、...
  • ios开发中类方法和实例方法self区别

    千次阅读 2016-06-07 14:25:41
    Objective-C里面既有实例方法类方法类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method)。工厂方法的称谓明显一般意义上的工厂方法不同,从本质上来说,类方法可以独立...
  • java类方法和实例方法区别

    千次阅读 2014-06-16 00:30:19
    方法根据是否有static修饰也可以分为类方法和对象方法(实例方法)。 访问时,类方法可以直接通过类名来引用,而实例方法必须通过对象名来访问,也就是说要想使用实例方法,就必须创建一个该类的对象。 例如:...
  • java 类方法和实例方法 调用关系

    万次阅读 多人点赞 2018-04-20 23:49:55
    java 类方法和实例方法 1. 类方法 也可称静态方法,使用static修饰的类中方法; 2.实例方法 非静态方法,没有用static修饰的方法。 3.测试案例 public class Test { private int a = 5; private ...
  • 类方法和实例方法

    2014-02-24 10:30:06
    实例方法和类方法 前面提到成员变量可分为实例变量类变量。同样,类中的方法也可分为实例方法和类方法。在方法前面加上static就成了类方法,例如: [java] view plaincopy public class Example { float...
  • python类的实例方法、静态方法方法区别及其应用场景 一、先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法。 ps.python中self,cls的区别 普通实例方法,第一个参数需要是self,它表示一...
  • 我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。 当类的字节码文件被加载到内存时,类的实例方法...
  • 一、变量和实例变量的区别 1.变量是属于是所有对象的,用static修饰,实例变量是属于某个对象的 2.变量也叫静态变量,不需要通过创建实例就可以调用。而实例变量需要通过对象来访问,即需要创建对象后才能...
  • java 类方法和实例方法

    万次阅读 多人点赞 2018-03-13 22:55:50
    类方法 用static修饰的方法。 由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容。 即类方法体有如下限制:...实例方法 当一个类创建了一个对象后,这个对象就可以调用该类的方法(...
  • 类方法的第一个参数是类实例,约定写为cls说明: 类(实例)对象(实例)都可以调用类方法 类方法不能访问实例变量静态方法:@staticmethod 静态方法是普通函数, 静态方法定义在类的内部,只能凭借该类或实例调用...
  • Java中类的方法分为类方法(用static修饰,也叫静态方法)和实例方法(没有用static修饰,也叫非静态方法),这两种方法之间有什么区别呢? 一. 实例方法 当类的字节码文件加载到内存中时,类的实例方法并没有被分配...
  • 在类中方法的定义,区分类方法和实例方法: 当这个类中的个别函数不需要共用参数或共享状态,仅仅是提供功能时,这些相关函数就可以体现为类方法。 当类中的函数需要共用参数或共享状态时,这些函数的体现就是实例...
  • 在Oc中,方法分为类方法和实例方法。 前置加号(+)的方法为类方法,这类方法是可以直接用类名来调用的,它的作用主要是创建一个实例。有人把它称为创建实例的工厂方法。 前置减号(-)的方法为实例方法,必须使用...
  • 中成员方法和实例方法

    千次阅读 多人点赞 2019-07-22 19:14:51
    变量与实例变量的区别变量: 使用static修饰符修饰; 变量是的所有对象共享的; 可以通过“类名.变量名”、“对象名.变量名”的方式访问 实例变量: 未使用static修饰符修饰, 实例变量是属于一个...
  • 类方法 用static修饰的方法。 由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容。 即类方法体有如下限制: 1. 类方法中不能引用对象变量; 2. 类方法中不能调用类的对象方法; 3. 在...
  • 静态方法在程序开始时生成内存,实例方法在程序运行中生成内存, 所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。 静态内存是连续的,因为是在程序开始时就生成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 741,382
精华内容 296,552
关键字:

类方法和实例方法区别