精华内容
下载资源
问答
  • Java中为什么static不能使用this关键字?
    2021-08-19 10:06:00

    Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。而this指代的是当前的对象

    在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.

    而且,更为重要的是this和super都无法出现在static 修饰的方法中,static
    修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象.如果使用的是类来调用而不是对象,

    > 则 this就无法指向合适的对象.所以static 修饰的方法中不能使用this.

    更多相关内容
  • Static方法是类方法,先于任何的实例(对象...也就是说你只能它来调用属于当前对象的方法,或者使用this处理方法中成员变量和局部变量重名的情况. 而且,更为重要的是this和super都无法出现在static修饰的方法中。...

    Static方法是类方法,先于任何的实例(对象)存在。

    Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。
    this指代的是当前的对象

    在方法中定义使用的this关键字,它的值是当前对象的引用。也就是说你只能用它来调用属于当前对象的方法,或者使用this处理方法中成员变量和局部变量重名的情况.

    而且,更为重要的是thissuper都无法出现在static修饰的方法中。

    static修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象。
    如果使用的是类来调用而不是对象,则this就无法指向合适的对象.所以static修饰的方法中不能使用this

    已知有下列Test类的说明,在该类的main方法内,则下列哪个语句是正确的?()

    public class Test
    {
    private float f = 1.0f;
    int m = 12;
    static int n = 1;
    public static void main (String args[])
    {
    Test t = new Test();
    }
    }
    

    t.f;
    this.n;
    Test.m
    Test.f

    答案:t.f;

    展开全文
  • Static方法是类方法,先于任何的实例(对象)存在...即在程序启动的时候,就会为static方法分配一块内存空间,没有static的其他方法,非静态方法,必须在类实例化时,才有内存空间,所以在类实例化之前是无法调用的...

    Static方法是类方法,先于任何的实例(对象)存在。

    即Static方法在类加载时就已经存在了(JAVA虚拟机初始化时),但是对象是在创建时才在内存中生成。

    而this指代的是当前的对象。

    static叫静态方法,也叫类方法。

    即在程序启动的时候,就会为static方法分配一块内存空间,没有static的其他方法,非静态方法,必须在类实例化时,才有内存空间,所以在类实例化之前是无法调用的jvm有类加载器,第一次加载类时执行类中的static域,jvm会专门划分一个内存区域给static程序块,可以成为静态区。

    this指针是指向类的对象,在实例化对象时jvm会在堆区分配内存给一个具体的对象,this指针指向这个对象。而类中的static域始终

    是在静态区分配内存,this指向堆区,所以不能调用。

    static是属于类的。this是对象指针。

    而 super代表子类对父类满参构造函数的初始化,也是需要产生对象才可以使用

    但是考虑到虚拟机加载顺序为先加载类,当被实例化才产生对象。

    所以如果并存则表示类和对象同时加载,显然是不合逻辑的。

    拙见,有何不足之处请指教,今天做项目的时候无意中发现了,实习生的一个错误,指正并且稳固

    展开全文
  • 使用static的变量或者方法的时候我经常注意,会产生一个警告。 The static field User.statid should be accessed in a static way 为何产生这个警告,如何解除这个警告呢,根据警告的提示,我将警告部分...

    当使用static的变量或者方法的时候我经常不注意,会产生一个警告。

    The static field User.statid should be accessed in a static way

    为何产生这个警告,如何解除这个警告呢,根据警告的提示,我将警告部分改成了下面这样,问题就好了:

    	public User(int userId,String name,int userNum,int statid) {
    		this.userId = userId;
    		this.uName = name;
    		this.userNum = userNum;
    		User.statid = statid;
    	}

    为什么会这样呢?

    首先,static叫静态方法,也叫类方法,它先于任何的对象出现。在程序最开始启动(JVM初始化)的时候,就会为static方法分配一块内存空间,成为静态区,属于这个类。而非static方法,必须在类实例化的时候,才会给分配内存空间,在实例化对象的时候JVM在堆区分配一个具体的对象,this指针指向这个对象。也就是说,this指针是指向堆区中的类的对象,而static域不属于this指向的范围所在,所以不能调用。

    同时,在static修饰的方法中,不能使用super(),道理其实与上面差不多。

    super代表子类对父类满参构造函数的初始化,也是需要产生对象才可以使用但是考虑到虚拟机加载顺序为先加载类,当被实例化才产生对象。所以如果并存则表示类和对象同时加载,显然是不合逻辑的。
     

    展开全文
  • java中类的方法池中都有一个...this 表示这个类的当前实例,而静态方法依赖于该类的任何实例,因此方法内不能引用 this。 (1) 非静态方法参数传递时,有一个隐式参数this,这个this就是调用该方法的对象本身...
  • Java中static关键字 修饰的方法内不能使用this关键字的原因 static 只在javac 编译的时候被初始化,类级变量。 static被称为静态方法,也叫类方法,就是在程序启动的时候,就会这个方法分配一块内存空间,...
  • 因为static方法和类的实例(对象)是两码事,它只在类装载的时候(即编译的时候或者javac命令的时候)初始化,被称作类级变量(属于类);而类的实例是在程序运行的时候(即Java命令的时候)初始化,被称作对象级变量...
  • 这是一个子类创建的时候初始化过程: 结论是: 父类static ->子类static->父类普通赋值语句->子类普通赋值语句->...显然static方法是没有this的(它初始化的时候还没有this对象)。...
  • Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了(JAVA虚拟机初始化时), 但是对象是在创建时才在内存中生成。而this指代的是当前的对象。   参考:...
  • static修饰的方法是类方法,先于任何实例存在。static修饰的方法在类加载的时候就已经存在了,实例是在创建时才在...在方法中定义使用this关键字,它的值是当前对象的引用.也就是说你只能它来调用属于当前对象的...
  • static不能使用this

    千次阅读 2017-09-14 13:44:43
    Static方法是类方法,先于任何的实例(对象)...也就是说你只能它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况. 而且,更为重要的是this和super都无法出现在static 修饰的方法中,st
  • 不能static context中使用this指针。 后来查询了下资料,才明白了其中的原理。 (这部分涉及一点JVM的内存分配,了解的可以看下另一篇https://blog.csdn.net/Assassin_creed/article/details/100122880...
  • 为什么this super不能用static方法中??2016年07月28日 20:54:29阅读数:2499[java] view plain copyclass Fu { int a; } class Zi extends Fu { int b; static void test(){ this.b; super.a...
  • 因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,属于对象,静态方法成功加载后,对象还一定存在 在问题之前先讲super的用法:1.super的用法跟this类似,this代表对本类对象的引用,指向本类已经...
  • 为什么this不能存在于static方法中

    千次阅读 2017-01-11 17:35:04
    我们可以从以下两点来进行分析: (1) 非静态方法参数传递时,有一个隐式参数this,这个this就是... //实际上是有参数传递的toString(Object this),且o==this 这样在非静态方法中就可以通过this来得到调用对象的其他
  • 静态变量为什么不能使用this关键字

    千次阅读 2018-08-28 15:01:16
    public class Student{ //定义一个静态变量,名a static int a; } 静态变量(static 所...而this关键字的意思是,当前对象的a,也就是说,必须要有对象才能用this。 而对象的产生,必须在程序运行时,通过n...
  • # 静态方法里不能使用$this标识调用静态方法静态方法是属于类的,被每个类的实例所共享。由于静态方法需要通过对象即可调用,所以伪变量 $this 在静态方法中可用。静态方法随着类的加载而加载,...
  • static 成员变量和函数属于整个类所以不能使用this指针 static成员函数也只能返回静态成员变量 static int func(){ //return this -> xxx//err // return a//err } int a;
  • 这个要从java的内存机制去分析,首先当你New 一个对象的时候,并是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆内存中创建对象...
  • 首先,Java中可以使用static声明属性或方法,如果现在希望一个属性被所有对象所共同拥有,则可以将其声明为static类型,  声明static类型的属性或方法之后此属性或方法也称为类方法,可以有类名称直接调用。而其中...
  • Static方法是类方法,先于任何的实例(对象)存在。...也就是说你只能它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况. 而且,更为重要的是this和super都无法出现在static 修饰的
  • 为什么静态方法中不能使用this

    千次阅读 2020-10-02 14:45:24
    为什么静态方法中不能使用this? 因为在静态方法的局部变量表中并存在this变量,所以在静态方法中不能使用。 而在构造方法和实例方法中,this变量会存放在局部变量表中 index为 0 的位置。 代码: public class ...
  • static修饰的方法是类方法,属于某个对象的,是属于整个类的。...而this和super都是指向对象,代表调用该方法的对象,但是现在static方法既然需要对象来调用,this和super自然就应该存在于静态方法的内部!
  • 表示在该函数体内不能修改成员的值,会在函数中添加一个隐式的参数const this*. static修饰的函数没有this指针,与const的用法冲突。 但可以使用static和const修饰成员。 例子如下: class Singleton { public...
  • java的static关键字 java中,static修饰的成员变量和成员方法叫静态变量和静态方法,依赖类特定的实例,被类的所有实例共享。 静态变量或类变量 和 实例变量,区别是: 静态变量在内存中只有一个拷贝(节省内存)...
  • this为什么不能在静态方法中使用

    千次阅读 2019-07-09 13:31:23
    静态方法是存放在方法区中的,此时使用this不能获取到当前类的地址 而在类的普通方法中使用this,就得到当前对象在堆中的地址
  • Java中static为什么不能修饰局部变量?

    千次阅读 2017-12-15 20:49:22
    Java中static为什么不能修饰局部变量? 与c/c++不同
  • 首先来了解下static 关键字 当一个方法和属性被static属性修饰时,这些方法和属性是优先于对象加载进入内存的,是随着类的加载而加载的 this关键字的理解this是当前对象的引用,super是指父类的引用 当静态方法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,622,862
精华内容 1,049,144
关键字:

为什么static不能用this