精华内容
下载资源
问答
  • 静态方法的变量是静态的吗?

    千次阅读 2018-07-26 21:06:51
    静态方法里面的变量是静态的,这样的说法并不正确,只能说静态方法只能引用静态成员变量,它的内部可以定义非静态的变量  

    静态方法里面的变量都是静态的,这样的说法并不正确,只能说静态方法只能引用静态成员变量,它的内部可以定义非静态的变量

     

    展开全文
  • 内部类访问外部类的变量必须final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { class B { public void shout1() { Sy...

    内部类访问外部类的变量必须是final吗?

    如下:
    package com.java.concurrent;
    
    class A {
        int i = 3;
    
        public void shout() {
    
            class B {
                public void shout1() {
                    System.out.println(i);
                }
    
            }
            B b = new B();
            b.shout1();
        }
    
        public static void main(String[] args) {
            A a = new A();
            a.shout();
        }
    }

     


    可正常输出3,证明可以访问类的变量i,但改为下面的方式:
    class A {
        public void shout(int temp) {
            final int i = temp;
            class B {
                public void shout1() {
                    System.out.println(i);
                }
    
            }
            B b = new B();
            b.shout1();
        }
    
        public static void main(String[] args) {
            A a = new A();
            a.shout(3);
        }
    }

     

    此时i必须为final,怎么理解呢?收起
    最佳答案
     
      是的,因为生命周期的原因。方法中的局部变量,方法结束后这个变量就要释放掉,final保证这个变量始终指向一个对象。

      首先,内部类和外部类其实是处于同一个级别,内部类不会因为定义在方法中就会随着方法的执行完毕而跟随者被销毁。问题就来了,
      如果外部类的方法中的变量不定义final,那么当外部类方法执行完毕的时候,这个局部变量肯定也就被GC了,然而内部类的某个方法还没有执行完,
      这个时候他所引用的外部变量已经找不到了。如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,
      这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。


    java静态方法中不能引用非静态变量
    因为我们知道静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以编译器会在这种时候给各错误.  

    简单说来,静态方法可以不用创建对象就调用,非静态方法必须有了对象的实例才能调用.因此想在静态方法中引用非静态方法是不可能的,因为它究竟引用的是哪个对象的非静态方法呢?编译器不可能给出答案,因为没有对象啊,所以要报错

    class HelloWorld 


    int a1 = 6; 

    public static void main(String[] args) 

      
       System.out.print(a1);    
    /**   成员变量不能直接调用  ( 无法从静态上下文中引用非静态变量   a1  )             
       */ 

     

    静态方法中不能创建内部类的实例

     

    如上图所示,Outter是一个普通的类,Inner是Outter类里面的内,属于内部类。在main方法中试图创建Inner的实例,Eclipse会有报错提示,大意是:“没有Outter可以访问的实例,必须指定一个Outter类的实例(如:x.new A() 其中x就是一个Outter类的实例)”

     

    原因:

    内部类的特点是可以访问外部类的成员变量,而成员变量只能在创建了实例之后才能访问。

    那么main方法是个静态方法,即可以不创建Outter的实例就能访问这个方法,这时候如果Inner可以创建实例,那么inner的实例就有可能访问Outter对象的成员变量。

    但main方法是静态方法可以不创建对象就运行,Outter对象都没有创建,Inner就算能创建对象,也有可能访问不到Outter对象的成员变量。

    所以,是不能在静态方法中创建内部类的对象,防止该内部类对象在外部类对象创建前访问外部类的成员变量。

     

    转载于:https://www.cnblogs.com/wq3435/p/5958805.html

    展开全文
  • 由于内部实例化由外部类实例化之后加载,如果外部类还没有实例化,这时候调用内部的静态成员,此时内部类还没有被加载,却要开始创建静态成员,这矛盾,所以java中不能存在内部静态成员静态类。...

     

    如图:

     

    这个问题的答案是不可以

    由于内部类的实例化是由外部类实例化之后加载的,如果外部类还没有实例化,这时候调用内部类的静态成员,此时内部类还没有被加载,却要开始创建静态成员,这是矛盾的,所以java中不能存在内部有静态成员的非静态类。

    转载于:https://www.cnblogs.com/miracle-d/p/10775207.html

    展开全文
  • 换个角度来看这个问题,函数中的静态变量其实可以看做函数一个内部变量,而不是调用期间生成局部变量。所以这里介绍一种使用装饰器的方法给函数添加这样的内部变量。defstatic_vars(**kwarg...

    众所周知,Python语言并不支持静态变量,比如下面这样一个应用场景:

    void foo() {

    static int count = 0;

    count ++;

    }

    在Python中无法自然实现这个功能。换个角度来看这个问题,函数中的静态变量其实可以看做是函数的一个内部变量,而不是调用期间生成的局部变量。所以这里介绍一种使用装饰器的方法给函数添加这样的内部变量。

    def static_vars(**kwargs):

    def decorate(func):

    for k in kwargs:

    setattr(func, k, kwargs[k])

    return func

    return decorate

    这是一个Python装饰器,通过@语法调用,在一个函数外层再包裹一层,这里相当于给函数添加内部变量。可以这样来使用这个装饰器,比如我们想实现上面的想法,在foo函数中添加一个计数器,有

    @static_vars(counter = 0)

    def foo():

    foo.counter += 1

    其实如果一定要通过内部变量来实现静态的效果,可以直接定义类来达到,但是装饰器将很多细节略去,而且通过**kwargs可以添加任意类型,任意数目,实现起来相对简单。

    实例扩展:

    这里使用静态变量目的是在类中实现一个静态的队列,这里用数组实现,任何时候插入到队列中的数据不会和类的实例有直接关系

    __author__ = 'Administrator'

    class CaptchaImage:

    def queue(self,arr=list()):

    return arr

    def InsertCode(self,code):

    self.queue().append(code)

    if __name__=='__main__':

    c = CaptchaImage()

    c.InsertCode(1)

    b=CaptchaImage()

    b.InsertCode(2)

    print(b.queue())

    print(c.queue())

    代码执行输出结果为:

    [1, 2]

    [1, 2]

    到此这篇关于python如何设置静态变量的文章就介绍到这了,更多相关python设置静态变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    时间: 2020-09-05

    展开全文
  • 局部内部类(Local Inner Class):定义在方法当中,只能访问方法中声明的final类型的变量 但是:我下面的练习发现:它也可以访问非final类型的变量: 这为什么呢?还是Jdk7版本后新增加的特性? // 3.局部内部类...
  • 上次有朋友问我,java中类...我给他肯定回答是可以,在java中我们可以有静态实例变量、静态方法、静态块。当然类也可以是静态的,下面小编整理了些关于java中static class相关资料分享在脚本之家平台供大家参考
  • 类也可以是静态的。java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来类叫外部类。在java中,我们不能用static修饰顶级类(top level class)。只有内部类可以为static。静态...
  • 这篇写好...类也可以是静态的。 java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来类叫外部类。在java中,我们不能用static修饰顶
  • 我给他肯定回答是可以,在java中我们可以有静态实例变量、静态方法、静态块。当然类也可以是静态的,下面小编整理了些关于java中static class相关资料分享在脚本之家平台供大家参考 java中类可以是...
  • 1.之前我理解类为了节省时间演化来,因此里面的静态属性应该和模块中全局变量作用范围类似,那类中的静态属性应该在整个类中都能访问。但实际为代码段所示。 2. ``` 2.1 全局变量能被内部定义函数所...
  • java中的静态内部

    2016-01-14 16:28:21
    作者:kissazi2  ... 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任权利。 ...Java中类可以是static吗...类也可以是静态的。  jav
  • Static 静态内部

    2016-08-01 20:44:00
    类也可以是静态的。 java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来类叫外部类。在java中,我们不能用static修饰顶级类(top level class)。只有内部类可以为static...
  • 有关方法调用问题,就是java中均为值传递,调用方法时,形参只在方法内部起作用,那怎么修改能够修改对象属性呢?a.set(6);就可以修改某个属性值为6,这个怎样实现呢?set函数独有功能吗?(以后再回头...
  • java中类可以是static吗?...类也可以是静态的。 java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来类叫外部类。在java中,我们不能用static修饰顶级类(top lev...
  • 则需父类外部实例来初始化如果定义在非静态作用域内,会引用外部类实例只能捕获外部作用域内final变量创建时只有单一方法的接口可以用Lambda转换a.匿名内部名字表面上没有引用名,但其实有用于定位...
  • 1. 非静态内部如何引用外部类this对象 Java内部类分为静态内部类和非静态内部类。它们有一个比较大区别在于,非静态内部类拥有外部类this对象引用,从而使得非静态内部类可以访问外部类成员函数,...
  • 内部类定义位置不同可以分为成员内部类、静态内部类、方法内部类、匿名内部类。相对于内部类,包含内部类类被称为外部类。1 内部类意义内部类从字面上非常容易理解,无非就是在类内部定义类。那么为...
  • 要点 匿名类概念和用法 语言规范以及语言横向对比等 内存泄漏切入点 总结 没有人类认知意义上...创建时只有单一方法的接口可以用Lambda转换 a.匿名内部名字 表面上没有引用名, 但其实有...
  • field信息、方法信息、各种类类信息、静态变量、即时编译器代码缓存、类加载器 A.field信息:[常被称作域,字段,属性,变量] B.方法信息: void也一种返回类型,记得voidClass吗 C.non-final类变量 注:...
  • 前言static关键字摆在刚入行编程语言小白们面前一道难题,为什么要用static...一、什么static关键字static表示静态,常用来修饰成员变量、成员方法、代码块和内部类,存放在方法区,作用在于创建独立于对象...
  • 前言static关键字摆在刚入行编程语言小白们面前一道难题,为什么要用static?...一、什么static关键字static表示静态,常用来修饰成员变量、成员方法、代码块和内部类,存放在方法区,作用在于创建...
  • Java静态

    2017-04-24 18:21:08
    类也可以是静态的。 Java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来类叫外部类。 在java中,我们不能用static修饰顶级类(top level class),只有内部类可以为...
  • 不过要注意的是,当成员内部类拥有和外部类同名成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部成员。如果要访问外部类同名成员,需要以下面形式进行访问: 外部类.this.成员变量 外部...
  • 类也可以是静态的。  java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来类叫外部类。在java中,我们不能用static修饰顶级类(top level class)。只有内部类可以...
  • 两者都是非静态类可以互相访问,内部类访问外部类没有疑问,就像一个方法(这里只内部类)访问类中的变量一样;但是,外部类的成员也可以访问内部类的内容,但是亲测必须实例了这个内部类才可以使用(具体原因去...
  • java中普通顶级类是不能使用static关键字修饰。只有内部类可以使用static...类也可以是静态的。 java允许我们在一个类里面定义静态类。比如内部类(nested class)。把nested class封闭起来类叫外部类。在jav...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 174
精华内容 69
关键字:

方法内部的变量是静态变量吗