精华内容
下载资源
问答
  • 根据成员内部定义: 首先生成外部的实例对象 然后生成绑定到外部实例对象的成员内部实例对象 外部实例对象的生成一定要先于成员内部实例对象的生成 public class InnerClassDemo{ //对于final修饰...

    根据成员内部类的定义:

    1. 首先生成外部类的实例对象
    2. 然后生成绑定到外部类实例对象的成员内部类实例对象

    外部类实例对象的生成一定要先于成员内部类实例对象的生成

    public class InnerClassDemo{
         //对于final修饰的成员变量,说明该变量是只读变量,只能进行一次赋值操作,只能存在以下两种赋值情况,在这两个地方我们必须给它们赋初值。
         //1)声明该成员变量时赋值:
         //  a)如果表达式的值是常量表达式(返回基本类型数据),则编译器编译时就计算出该表达式的值,知道该值,那么编译器就可能会在编译时期优化程序
         //  b)如果不是常量表达式(返回引用类型数据),则编译器编译时,就不知道该值。
         //2)在构造方法中赋值,运行时赋值,则编译器编译时,就不知道该值
    
         //实例成员被默认初始化为0
         int x;
    
         //static final修饰的变量必须被显示初始化,要么在声明时赋值初始化,要么在静态块中初始化。
         //否则,语法错误
         static final int i;
         static int y;//可以不用初始化,系统会默认赋值0
         static final int j=2;
         //静态块,当类被JVM加载到内存时,静态块的静态代码执行。
         static{
              i=1;
              System.out.println("i="+i);
              System.out.println("j="+j);
          }
    
          public static void main(String[] args){
              InnerClassDemo innerclassdemo=new InnerClassDemo();
              InnerClass innerClass=innerclassdemo.new InnerClass();
              System.out.println("innerclassdemo中x和y的默认值分别是是:"+innerclassdemo.x+y);
              System.out.println("innerClass中i="+innerClass.i);
      System.out.println("innerClass中str="+innerClass.str);
              System.out.println("Welcome!");
          }
    
    class InnerClass{
          //1.在成员内部类中,只有编译器在编译的时候赋值号右边是常量表达式(编译时,可以计算出表达式的基本类型值),
          //左边是只读静态常量的情况才可以存在静态只读常量
          //然后编译器把它当做编译器常量来使用,其实说白了就是和这个外部类的实例无关。
          static final int i=50;
          static final String str='s';
    
         //2.以下均不可以
         //2.1虽然static final为只读静态变量,但是是在构造方法中运行时赋值,编译时不知道其值。
         //static final int i;
         //static final String str
         //2.2虽然static final为只读静态变量,但是赋值号右边不是常量表达式(返回引用类型数据),编译时并不知道其引用的实例值。
         //static final String str=new String("");
    
         //3.没有外部类实例,此内部类不需要外部类实例就初始化了变量,与成员内部类的定义相悖。
         //static InnerClass innerClass=new InnerClass();
    
        //4.静态方法中,但是没有外部类实例
        //static void method(){
        //     InnerClass innerClass=new InnerClass();
        //    }
    
     

    综上,其实内部类并不是完全不能出现static这样的修饰的,只要符合第一种情况的就是可以的。

    编译器其实无法区分第二种,第三种情况的,第三种的情况肯定是不行的与内部成员类的定义相驳,所以第二种情况在语法上也被禁止了。

    第三种情况,根据初始化的流程我们知道,在类加载的时候,static变量就必须被显式初始化,那么我们InnerClass成员内部类的实例对象在没InnerClassDemo外部类的实例对象的时候便生成了。这样这个成员内部类就脱离了外部类的掌控,不需要外部类的对象就可以生成内部类的对象,这与成员内部类的定义就相驳了,因为我们知道成员内部类的对象必须是先有外部类的对象才能创建,成员内部类的对象 脱离了其外部类的对象 就不会存在,并且是绑定在一起的,所以成员内部类不可以定义静态变量。

    第四种情况与第三种情况相同原因。

    程序运行结果:
    在这里插入图片描述

    展开全文
  • 第7.17节 Python类中静态方法装饰器staticmethod 定义静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问属性但是需要具有的一些能力可以静态方法提供。 一、 静态方法定义 1. 语法 @ ...

    第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析

    静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供。
    一、    静态方法定义
    1.    语法
    @ staticmethod 
    def 方法名(参数):
    方法体
    2.    定义说明:
    1)    上述语法定义中,@ staticmethod 称为静态方法装饰器,凡是静态方法定义都必须有该装饰器。
    2)    静态方法与实例方法和类方法不同的是,没有类似self和cls这样的参数。某种程度上说,静态方法与一个类外面的函数类似。

    二、    静态方法的使用
    静态方法一般用在与实例和类的数据无关的场景,它提供的是一种类内的公共能力,也可以说是类内的一个与类和实例数据无关的一个类空间内的函数,静态方法实现的能力通过普通函数一样可以实现。
    在某些方面,静态方法和类方法是相同的,之所以用静态方法或类方法,而不用实例方法,是因为实例方法需要进行实例化后才能使用,而静态方法和类方法不需类实例化就可以使用,这样不会因为静态方法和类方法调用就需要执行实例化去消耗CPU和内存资源。
    那为什么不直接用函数呢?老猿认为,这是因为函数是在全局名称空间中创建的,如果多个成员的团队合作时,这种全局空间的函数可能会导致开发团队成员之间命名的冲突,而封装在类内就可以避免这种冲突,同时也更符合OOP的理念。
    静态方法具体使用的方式如下:
    1.    静态方法可以在所有类的方法中通过“类名.方法名”方式调用;
    2.    静态方法可以在类方法中通过“cls.方法名”方式调用;
    3.    静态方法可以在实例方法中通过“类名.方法名”方式调用;
    4.    静态方法可以在实例方法中通过“self.方法名”或“self.__class__.方法名”方式调用;
    1)    这种方式当类名可能修改时比直接用类名调用方便;
    2)    该访问方式可以用在构造方法等实例方法中,”self.方法名”可以用在重写的__new__方法中,但“self.__class__.方法名”不能用在重写的__new__方法中。
    a)    关于__ new__方法,相关内容在此不仔细介绍,大家可以到网上查一下资料,需要说明的是这也是一个实例定义时执行的方法,它在构造方法之前执行,一般不要重写该方法;
    b)    “self.__class__.方法名”不能用在重写的__new__方法中是因为此时实例还没创建完成,不能正确的获取到self.__class__的值(此时self.__class__的值为<class 'type'>),而静态方法与实例无关,因此“self.方法名”可以访问;
    c)    “self.__class__.方法名”是一种画蛇添足的方法,不如直接使用“self.方法名”,不推荐大家使用。
    5.    静态方法可以在类定义外的调用方代码中通过“类名.方法名”方式调用;
    6.    静态方法可以在类定义外的调用方代码中通过“实例名.方法名”方式调用;
    7.    静态方法可以在类定义外的调用方代码中通过“实例名. __class__.方法名”方式调用,这种方式有点画蛇添足,只是在此说明一种访问方法,并不推荐使用。

    从上面的使用情况介绍来说,静态方法的使用范围和类方法的使用范围是一样的,二者在这方面几乎没有差别。
    本节详细介绍了类中静态方法的定义和使用方法,可以看出类方法和静态方法共性特点比较多,与类方法的主要差别在于二者装饰器不同,方法对形参的要求不同,方法与类的关联程度不同,但是方法的定义、使用基本类似。下节将结合详细的案例演示相关内容。
    老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
    欢迎大家批评指正,谢谢大家关注!

    展开全文
  • Python属性、类方法静态方法

    千次阅读 多人点赞 2019-06-05 15:12:54
    Python属性、类方法静态方法 Python,一切皆对象。通过创建出来的对象是实例对象,本身也是对象,称为对象。 一、属性 对象都有属性,我们常说的对象属性是实例对象拥有的属性,又称为实例属性。...

    Python类属性、类方法和静态方法

    在Python中,一切皆对象。通过类创建出来的对象是实例对象,类本身也是对象,称为类对象。

    一、类属性

    对象都有属性,我们常说的对象属性是实例对象拥有的属性,又称为实例属性。

    类对象所拥有的属性叫类属性,它被该类的所有实例对象所共有。类属性可以使用类对象或实例对象访问。

    class House(object):
    
        price = 'high'
    
    
    print(House.price)
    h = House()
    print(h.price)
    
    House.price = 'too high'
    print(House.price)
    print(h.price)
    
    print('-' * 20)
    h.price = 'high'
    print(House.price)
    print(h.price)

    运行结果:

    high
    high
    too high
    too high
    --------------------
    too high
    high

    类属性的定义方法是直接在类中定义一个属性,这样定义的属性就是类属性。

    不管是通过实例对象还是通过类对象,获取到的类属性都是一样的。所以,当类的实例对象所记录的某项数据始终保持一致时,则可以将该属性定义成类属性。

    可以通过类对象来修改类属性,但是不可以通过实例对象来修改类属性。用实例对象来修改类属性时不会报错,因为这时候其实是给类的实例对象定义了一个与类属性同名的实例属性。

    在使用过程中,我们要尽量避免类属性和实例属性同名。如果有同名实例属性,实例对象会优先访问实例属性。

    补充:

    1.类属性也可以设置为私有,前边添加两个下划线。

    2.实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所共有 ,仅占用一份内存,更加节省内存空间。

    二、类方法

    与类属性类似,类对象所拥有的方法叫类方法。

    类方法一般和类属性配合使用,当方法中需要使用类对象(如访问私有类属性等)时,定义类方法。

    class House(object):
    
        __price = 'high'
    
        @classmethod
        def get_price(cls):
            return cls.__price
    
    
    print(House.get_price())
    
    h = House()
    print(h.get_price())

    运行结果:

    high
    high

    定义类方法,需要用装饰器@classmethod来标识其为类方法,并且类方法的第一个参数必须是类对象,一般以cls作为第一个参数。否则,类方法就没有定义成功,无法通过类对象来使用该方法。

    三、静态方法

    在Python中,静态方法是既不需要传递类对象也不需要传递实例对象的方法。形参里没有self/cls,不会自动传递实例对象和类对象。

    class House(object):
    
        __price = 'high'
    
        @classmethod
        def get_price(cls):
            return cls.__price
    
        @staticmethod
        def description():
            return 'No money, no house'
    
    
    print(House.description())
    
    h = House()
    print(h.description())

    运行结果:

    No money, no house
    No money, no house

    与定义类方法的方式相同,定义静态方法需要通过装饰器@staticmethod来进行修饰。

    实例对象和类对象都可以访问静态方法。

    当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象 (如类属性、类方法、创建实例等)时,可以将方法定义成静态方法。

    补充:

    1.静态方法取消了不需要的参数传递,有利于减少不必要的内存占用和性能消耗。

    2.类中定义了同名的对象方法、类方法、静态方法时,调用方法会优先执行最后定义的方法。

     

     

     

    展开全文
  • c#如何在类中定义静态变量

    千次阅读 2011-02-16 16:23:00
    c#如何在类中定义静态变量

    如题。

    用户登录后,一些变量可能在整个系统中都用到,保存方法大概有以下方式:

     

    1、Session存储。

     

    2、Cookie存储。

     

    3、类中定义静态变量。c#里没有全局变量,只有静态变量,也就相当于全局了。

     

    今天要讲的是第三种方法。

     

    在某个类中定义静态变量。在登录后赋值给该变量,然后各个页面调用即可。例如
    public   class   MyClass
    {
          public   static   string    StrName;
     }

      

    展开全文
  • 抽象一定有抽象方法吗?我来说说吧,静态是属于字节码的;一个抽象可以没有抽象方法,只是为了不让别人来实例化它; 以上两点可以说明,...总结就是:抽象类中可以定义静态方法,只是抽象自己不能实例化,所...
  • 首先要明确一点: static修饰方法、成员变量是属于自己的。并不属于特定的某个对象。...所以还有这么一说,不能在静态方法内使用非静态的成员变量,因为这个成员变量不是自己的,而是某一个对象的...
  • 转自:https://www.cnblogs.com/zksh2016/p/5813857.html1、Java抽象类中不能有静态的抽象方法。 抽象是不能实例化的,即不能...所以抽象类中不能有静态的抽象方法。 定义抽象方法的目的是重写此方法,但如果定...
  • 类中静态成员的定义

    千次阅读 2019-07-13 11:56:00
    静态成员在类中仅仅是声明,需要在类外部定义。类似于普通静态变量的定义,应当把它放在全局作用域。 class Account { public: Account() { record(); } static int num; private: void record(); }; ...
  • static类型的属性和方法在类加载的时候就会存在于内存。 要想使用某个的static属性和方法,那么这个必须要加载到JAVA虚拟机。 非静态内部并不随外部一起加载,只有实例化外部之后才会...
  • Python 实例方法类方法静态方法

    万次阅读 多人点赞 2018-03-30 20:17:19
    Python ,实例方法(instance method),类方法(class method)与静态方法(static method)经常容易混淆。本文通过代码例子来说明它们的区别。 实例方法 Python 的实例方法用得最多,也最常见。我们先来...
  • 一、先看语法,python 语法有三种方法,实例方法静态方法类方法。 ps.pythonself,cls的区别 普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。 如果用了staticmethod,那么就可以无视...
  • ES6新增class类中静态方法如何在类内部被调用
  • C++类中静态变量和静态方法的使用

    千次阅读 2018-08-20 10:24:27
    静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。... 在类中静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则...
  • 可能从理解上来说确实有点想不通,但是对比C++仔细分析,是有道理的。...那么静态成员方法中为什么不能定义静态变量呢? 全局变量上面说过,程序的任何地方都能访问,我们为什么要把一个全局变量定义...
  • 非静态中为什不能定义静态方法

    千次阅读 2016-06-20 21:19:05
    需要先创建它的实例以后才能调用它的方法,当你创建了外部以后,它的内部是不存在的,所以你不能那个对象没有之前就调用它的,就好想,是一个实际存在的东西和一个虚拟存在的东西一样,实际存在的 东西是不能...
  • C++类中静态变量和静态方法使用介绍

    万次阅读 多人点赞 2018-08-14 10:45:26
    刷剑指offer第64题涉及到静态成员与方法的知识,有点模糊,找了两篇博客整理一下。 转自:https://www.cnblogs.com/sixue/p/3997324.html  最近一直看c++相关的项目,但总是会被c++类中静态成员变量与...
  • 某个窗口下的编码使用了以下扩展方法FindControl,以求根据字符串的值去操作控件(本文的控件为Label控件)的属性。 public static Control FindControl(this Control parentControl, string findCtrlName)...
  • js的类中,可分为三种方法,constructor构造方法静态方法与普通方法。 一、constructor构造方法 1.概念 的作用在于构建对象,而constructor构造方法就是用于构建对象实例。 2.使用方法 使用new...
  • 详解Java中静态方法

    万次阅读 多人点赞 2019-05-20 17:01:40
    定义在类中使用static修饰的静态方法会随着定义而被分配和装载入内存;而非静态方法属于对象的具体实例,只有在类的对象创建时对象的内存才有这个方法的代码段。 注意: 非静态方法既可以访问静态数据...
  • 类方法静态方法的区别

    千次阅读 2018-11-11 22:22:59
    类方法静态方法 类方法 第一个形参是对象的方法 需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是对象,一般以cls作为第一个参数。 class Dog(object): __type = "狗" ...
  • JAVA—jdk1.8之后的接口(接口中定义默认方法静态方法) 从jdk1.8开始,接口里允许定义默认方法 格式:public default 返回值类型 方法名(参数列表){ 方法体 } public interface Demo1 { public default void ...
  • 为什么不能在方法定义静态变量

    千次阅读 2019-03-21 10:33:54
    1.由于JAVA规定,方法内定义的都是局部临时变量,且由于内存分配,会创建一个栈帧保存局部变量表、操作数栈,动态链栈等,在方法结束后,栈帧会出栈并释放掉所有局部变量。这个时候定义一个静态变量那会不会造成内存...
  • 当我使用接口类型定义PrintMember的时候就会出现问题 问题如下: ![图片说明](https://img-ask.csdn.net/upload/201609/27/1474943372_518214.png) 下面是主函数的定义 static void Main(string[] args) { User ...
  • Python进阶之路 静态方法类方法

    万次阅读 多人点赞 2019-06-18 18:57:00
    静态方法类方法 Python包含三种方法:实例方法静态方法类方法。其中,实例方法在前面的章节已经多次使用了。...类方法的调用方式与静态方法完全一样,所不同的是,类方法与实例方法定义方式相同,都需要一...
  • 1.由于JAVA规定,方法内定义的都是局部临时变量,且由于内存分配,会创建一个栈帧保存局部变量表、操作数栈,动态链栈等,在方法结束后,栈帧会出栈并释放掉所有局部变量。这个时候定义一个静态变量那会不会造成内存...
  • python3:类方法静态方法和实例方法以及应用场景

    千次阅读 多人点赞 2018-10-20 13:29:52
    编程里经常用的是实例方法,直接用实例去调用, 只要 方法里有self 就可以断定是实例方法, 如 def method_name(self,*argc). 先看下边代码如下: class Date: def __init__(self,year,month,day): self....
  • python中类方法静态方法和实例方法的作用和区别

    千次阅读 多人点赞 2019-02-18 15:08:00
    class A(object): # 构造函数 def __init__(self, title1): self.title = title1 print(self.title) # 实例函数 def foo(self, title2): print(title2) # 静态函数 @staticme...
  • 2、必须要定义静态变量,否则该变量没有内存空间(类中只是申明) 3、本身可以直接调用静态变量 4、静态变量依旧符合public、private、protect特性 二 静态方法 1、静态方法可以被直接调用,但是同静态变量...
  • 首先,抽象可以有构造器、静态方法,抽象不一定要被其他继承,可直接不实例化就使用 抽象可以有构造器、静态方法。...如果想拿抽象直接使用,类中就得定义静态方法 abstract class ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,316,447
精华内容 526,578
关键字:

在类中定义静态方法