精华内容
下载资源
问答
  • java中类的方法池中都有一个...this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,因此方法内不能引用 this。 (1) 非静态方法参数传递时,有一个隐式参数this,这个this就是调用该方法的对象本身...

    java中类的方法池中都有一个隐含的参数this,他表示本对象的引用,但是static方法是没有这个隐含参数的,因为static方法和类的实例无关,它只在类装载的时候初始化,很多书都把静态变量称作类级变量。

    this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,因此方法内不能引用 this。

    (1) 非静态方法参数传递时,有一个隐式参数this,这个this就是调用该方法的对象本身。
        比如,   Object o=new Object();
                o.toString(); //实际上是有参数传递的toString(Object this),且o==this
        这样在非静态方法中就可以通过this来得到调用对象的其他域和方法,私有域的也行。

    (2) 静态方法是属于类的,而并不属于某个对象。所以没有隐式参数this,自然也就不能通过this调用对象本身了。
        但这并不意味这不能调用非静态域。我们可以通过显示参数传递来做到这一点:

    static叫静态方法,也叫类方法,就是在程序启动的时候,就会为这个方法分配一块内存空间,所以什么时候都可以调用这个方法。
    没有static的其他方法,非静态方法,必须在类实例化时,才有内存空间,所以在类实例化之前是无法调用的。
    所以,静态方法里不能调用非静态方法,除非你先实例化那个类。

    jvm有类加载器,第一次加载类时执行类中的static域,jvm会专门划分一个内存区域给static程序块,可以成为静态区。属于这个类。
    this指针是指向类的对象,在实例化对象时jvm会在堆区分配内存给一个具体的对象,this指针指向这个对象。而类中的static域始终是在静态区分配内存,this指向堆区,所以不能调用。
    static是属于类的。this是对象指针。

    展开全文
  • 为什么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不能用在static方法中??

    [java] view plain copy
    1. class Fu  
    2. {  
    3.     int a;  
    4. }  
    5. class Zi extends Fu  
    6. {  
    7.     int b;  
    8.     static void test(){  
    9.         this.b;  
    10.         super.a;  
    11.     }  
    12. }  

    编译报错:Cannot use this in a static context  Cannot use super in a static context

    解释:

    因为static方法和类的实例(对象)是两码事,它只在类装载的时候(即编译的时候或者javac命令的时候)初始化,被称作类级变量(属于类);而类的实例是在程序运行的时候(即Java命令的时候)初始化,被称作对象级变量(属于对象);

    this表示这个类的当前实例,super表示父类的当前实例,static是属于类的,this是类的一个对象,当然调用了不了他,static太牛了,只有类名可以调用它,static叫静态方法,也叫类方法,就是在程序启动的时候,就会为这个方法分配一块内存空间,所以什么时候都可以调用这个方法。所以,静态方法里不能调用非静态方法,除非你先实例化那个类。如果在static修饰的方法中使用this关键字,而这个关键字就无法指向合适的对象;所以我们也说,静态成员不能直接访问非静态成员;jvm有类加载器,第一次加载类时执行类中的static域,jvm会专门划分一个内存区域给static程序块,可以成为静态区,属于这个类。this指针是指向类的对象,在实例化对象时jvm会在堆区分配内存给一个具体的对象,this指针指向这个对象。而类中的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;

    展开全文
  • 因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,属于对象,静态方法成功加载后,对象还一定存在 在问题之前先讲super的用法:1.super的用法跟this类似,this代表对本类对象的引用,指向本类已经...
    因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在 
    在问题之前先讲super的用法:1.super的用法跟this类似,this代表对本类对象的引用,指向本类已经创建的对象;而super代表对父类对象的引用,指向父类对象;2.静态优先于对象存在;3.由上面的1.和2.知:因为静态优先于对象存在,所以方法被静态修饰之后方法先存在,而方法里面要用到super指向的父类对象,但是所需的父类引用对象晚于该方法出现,也就是super所指向的对象没有,当然就会出错。综上,静态方法中不可以出现super关键字。 
    首先要明白对象和类的区别。 this和super是属于对象范畴的东西,而静态方法是属于类范畴的东西所有的成员方法,都有一个默认的的参数this(即使是无参的方法),只要是成员方法,编译器就会给你加上this这个参数如:
    Class A中 void method1(){}实际上是这样的--------> void method1(A this)
    void method2(int x){}实际上是这样的--------> void method2(A this, int x)
    而静态方法与对象无关,根本不能把对象的引用传到方法中,所以不能用this
    在一个类中定义一个方法为static,则为静态方法,那就是说,无需本类的对象即可调用此方法,调用一个静态方法就是“类名.方法名”

    转自百度百科

    展开全文
  • Static方法是类方法,先于任何的实例(对象)存在。...也就是说你只能它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况. 而且,更为重要的是this和super都无法出现在static 修饰的
  • 这里参考了一下这个文章,大家感觉可以再阅读一下 ... 类的主动引用(一定会发生类的初始化 遇到 new,getstatic,putstatic,invokestatic这4条字节码指令时,假如类还没进行初始化,则马上对其进行初始化工作。... .
  • 表示在该函数体内不能修改成员的值,会在函数中添加一个隐式的参数const this*. static修饰的函数没有this指针,与const的用法冲突。 但可以使用static和const修饰成员。 例子如下: class Singleton { public...
  • Abstract 和Interface 方法是否能用Static修饰,为什么? interface中不能含有Static方法,属性,成员变量。...Static 修饰的方法是不能用this进行访问 原因:Static静态方法属于类,不属于任何成员。...
  • 1.子类继承父类后,可以直接调用父类的变量和方法,那为什么super调用呢? 原因:如果子类对父类的变量和方法进行了重写,你又想再使用父类的方法,这是就需要super来调用,否则默认调用你在子类中重写的变量和...
  • 这是C++的规则const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall而类中的static函数本质上是全局函数,调用规约是__cdecl或__stdcall,不能用const来修饰...
  • Cannot use this in a static context
  • 也就是说,它不能用this指针来访问,因为this指针指向的是每一个对象和实例。 对于virtual虚函数,它的调用恰恰使用this指针。在有虚函数的类实例中,this指针调用vptr指针,指向的是vtable(虚函数列表),通过虚...
  • 原因如下: 1. 静态static成员函数不同于非静态函数,它只属于类本身,而属于每一个对象实例。...2. 在访问非静态变量的时候,的是this指针;而static静态函数没有this指针,所以静态函数也确实...
  • C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是...
  • 静态变量为什么不能使用this关键字

    千次阅读 2018-08-28 15:01:16
    public class Student{ //定义一个静态变量,名a static int a; } 静态变量(static 所...而this关键字的意思是,当前对象的a,也就是说,必须要有对象才能用this。 而对象的产生,必须在程序运行时,通过n...
  • 想要弄清为什么提取jdbc工具类时要用static 首先要认清static关键字 staticstatic方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过...
  • 问题:为什么static 会比程序入口先执行? 先来说static static是静态标志,包括静态代码块,静态成员变量,静态方法 在static 方法前没有创建任何对象,static是最先进行初始化的 ,所以有: 1. 静态...
  • 本篇文章主要内容this什么this使用在实例方法中this使用在构造方法中学习目标理解this什么this能用在哪里,不能用在哪里,this什么时候可以省略,什么时候不能省略,以及怎么通过构造方法调用当前类中其它的...
  • public static void main(String arg[]) { new RecJFrame(); } } class RecNCanvas extends Canvas { private Color color; public void setColor(Color color) { this.color=color; } public void paint...
  • private static final long serialVersionUID = 1L; public InputStream getDownloadFile() throws Exception { // 获得ServletContext对象 ServletContext servletContext = ServletActionContext ....
  • 回答这个问题就要理解static关键字了: static表示“全局”或者“静态”的意思,用来修饰成员变量和成员...因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变
  • 问题我经常发现在调试程序时,在...我可能会在Java中尝试这样的东西....class Test {public static void main(String args[]) {System.out.println("hello world");return;System.out.println("i think this line ...
  • 也就是说,它不能用this指针来访问,因为this指针指向的是每一个对象和实例。 对于virtual虚函数,它的调用恰恰使用this指针。在有虚函数的类实例中,this指针调用vptr指针,指向的是vtable(虚函数列表),通过虚函数...
  • import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; ...import java.awt.event.ActionListener... public static void main(String[] args){ new Calculate(); } }
  •  不能用const的原因: 这是C++的规则,const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而类中的static函数本质上是全局函数,调用规约是
  • 使用反射设置好了私有属性,在不使用setAccessible(true)时候,为什么不能使用demo.getName()方法获取属性? ``` public class Test{ public static void main(String [] args) { Class clazz = Class.for...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 241
精华内容 96
关键字:

为什么static不能用this