zoukankan      html  css  js  c++  java
  • python的方法VSjava方法

    java 类方法和实例方法

    类方法

    用static修饰的方法。
    
    由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容。
    即类方法体有如下限制:
        1.类方法中不能引用对象变量;
        2.类方法中不能调用类的对象方法;
        3.在类方法中不能调使用super,this关键字;
        4.类方法不能被覆盖。

    实例方法

    当一个类创建了一个对象后,这个对象就可以调用该类的方法(对象方法)。
    
      1.实例方法中可以引用对象变量,也可以引用类变量;
      2.实例方法中可以调用类方法;
      3.对象方法中可以使用super,this关键字。

    区别和注意事项

    区别:类方法可以通过类名调用,实例方法不能通过类名调用
        当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址
        当该类创建对象后,类中的实例方法才分配入口地址,
        从而实例方法可以被类创建的任何对象调用执行。
    
        类方法在该类被加载到内存时,就分配了相应的入口地址。
        从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。
        类方法的入口地址直到程序退出时才被取消。
    
    注意:
        当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址。
        也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。
    
        在Java语言中,类中的类方法不可以操作实例变量,也不可以调用实例方法,
        这是因为在类创建对象之前,实例成员变量还没有分配内存,而且实例方法也没有入口地址。

    在java中静态方法就是类方法

    import java.util.*;
    
    public class TestStatic {
        public static void main(String[]args){
            System.out.println(S.getStatic());//使用类名加前缀访问静态方法
            S s=new S();
            System.out.println(s.getStatic());//使用实例化对象名访问静态方法
            System.out.println(s.get());
        }
        public static class S
        {
            private static int a;
            private int t=0;
    
            //静态初始器:由static和{}组成,只在类装载的时候(第一次使用类的时候)执行一次,往往用来初始化静态变量。
            static{
                a=10;
            }
    
            //静态方法只能访问静态数据成员
            public static int getStatic()
            {
                return a;
            }
    
            public int getT()
            {
                return t;
            }
    
            //非静态方法可以访问静态方法和非静态方法
            public int get()
            {
                getT();
                getStatic();
                t=a;//非静态方法可以访问非静态数据成员和静态数据成员
                return t;
            }
        }
    }

    python 类方法 实例方法 静态方法

    在python用到两个装饰器 @classmethod和@staticmethod用来表示类方法和静态方法

    classmethod:它的用法是定义操作类,而不是操作实例的方法。classmethod改变了调用方法的方式,因此此类低一个参数是类本身(cls),而不是实例(self)。classmethod方法最常见的用途是定义定义备选的构造方法

    frombytes的return 使用参数cls构建了新实例 cls(*memv)。按照约定来类方法的第一个参数应该是cls但是python并不介意怎么命名

    staticmethod装饰器也会改变调用方式,但是第一个参数不是特殊的值。其实静态方法就是普通的函数,只是碰巧在类定义体内部,而不是定义在模块层。

    class Demo:
        @classmethod
        def klassmethod(cls):
            print("这是classmethod")
            pass
        @staticmethod
        def statmethod():
            print("这是statmethod")
            pass
        
    Demo.klassmethod()
    Demo.statmethod()

    这是classmethod
    这是statmethod

     

    class Demo:
        @classmethod
        def klassmethod(*args):
            return args
        @staticmethod
        def statmethod(*args):
            return args
        
    print(Demo.klassmethod())
    print(Demo.statmethod())
    
    # (<class '__main__.Demo'>,)
    # ()
    
    print(Demo.klassmethod(12))
    print(Demo.statmethod(12))
    # (<class '__main__.Demo'>, 12)
    # (12,)

  • 相关阅读:
    Apple Developer Program Roles Overview
    iOS 使用UIView的一种有效方法
    百度面试(转)
    iOS 冒泡排序
    iOS 面试题及答案
    iOS 开发进程与线程
    iOS 应用内跳转到appstore里下载
    iOS 使用封装的NSLog来打印调试信息
    iOS 并发编程指南
    苹果App Store审核指南中文翻译(2014.9.1更新)
  • 原文地址:https://www.cnblogs.com/wqbin/p/10389154.html
Copyright © 2011-2022 走看看