黑马程序员技术交流社区
标题:
this关键字为什么不能出现在类方法中?
[打印本页]
作者:
唐僧踏歌
时间:
2014-4-15 17:15
标题:
this关键字为什么不能出现在类方法中?
本帖最后由 唐僧踏歌 于 2014-4-16 22:59 编辑
this关键字为什么不能出现在类方法中?
作者:
syusikoku
时间:
2014-4-15 17:21
它只是不能出现在静态方法中。
作者:
@文瑞
时间:
2014-4-15 19:27
静态中不能使用
作者:
环球信息中心
时间:
2014-4-15 19:41
你好,我来帮你解答。Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
作者:
Emperors
时间:
2014-4-15 19:53
楼主: 这个this一定是用在某个类的方法中吧?只是静态不能出现而已啊!
This :看上去,是用于区分局部变量和成员变量同名情况。
tist :就代表本类的对象,到底代表哪一个呢?
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
This的应用:当定义类中功能时(函数时),该函数内部类要用到该函数的对象时,
这是用this来表示这个对象。
但凡本类功能使用了使用了本类对象,都用this表示。
this语句:用于构造函数之间进行互相通用。
this语句只能定义在构造函数的第一行。因为初始化要先执行。
举个例子说:
public class persion{
private String name=null;
private int age;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
在这个类中setName方法中第一个变量用this是为了和本方法的参数this做区别,表示这个name指的是Person这个类的name属性,而不是name参数,如果去掉这个this,执行完这个方法后,Person类的name属性仍然为null
getName方法返回的Person类的name,之所以不用this是因为没有必要,因为编译器会知道这个name就指的是Person的name而不是其他的name(因为找个方法没有name变量和它混淆)。当然,这个方法你也可以显示的使用return this.name。恩,就这样!
作者:
Teemo_Mann
时间:
2014-4-15 21:23
1.因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在.所以在先存在的静态方法里调用未存在的对象是不对的.
2.静态方法是存放在内存中的数据段里,this调用的是堆空间里的应用对象,不能调用数据段区域里的数据,因此静态方法中不能用this和super关键字.
3.this是属于对象范畴的东西,而静态方法是属于类范畴的东西,所有的成员方法,都有一个默认的的参数this,只要是成员方法,编译器就会给你加上this这个参数如:
Class A中的
void print(){}; ----->其实是void print(A this);
而静态方法是和类相关的,它不是成员方法,所以不能引用this对象.
综上可得!
作者:
luoanjade
时间:
2014-4-15 22:29
this指的是当前对象
作者:
skyfly
时间:
2014-4-15 22:34
类方法是直接可以使用类引用,不需要实例化就可以使用的方法,是属于一个类的 是类的静态方法,一般在项目中类方法都是设置为工具类使用的.
this 指的是当前实例化的对象, 如果没有实例,this当然就用不了啦。类方法是类的静态方法。
作者:
Sniper_qiu
时间:
2014-4-15 23:18
1. 在静态方法中是不能使用this预定义对象引用的,即使其后边所操作的也是静态成员也不行. 因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在 2. 在问题之前先讲super的用法: 1.super的用法跟this类似,this代表对本类对象的引用,指向本类已经创建的对象;而super代表对父类对象的引用,指向父类对象; 2.静态优先于对象存在; 3.由上面的1.和2.知: 因为静态优先于对象存在,所以方法被静态修饰之后方法先存在,而方法里面要用到super指向的父类对象,但是所需的父类引用对象晚于该方法出现,也就是super所指向的对象没有,当然就会出错。 综上,静态方法中不可以出现super关键字。 3. 首先你要明白对象和类的区别。 this和super是属于对象范畴的东西,而静态方法是属于类范畴的东西 所有的成员方法,都有一个默认的的参数this(即使是无参的方法),只要是成员方法,编译器就会给你加上this这个参数如: Class A中 void method1(){}实际上是这样的--------> void method1(A this) void method2(int x){}实际上是这样的--------> void method2(A this, int x) 而静态方法与对象无关,根本不能把对象的引用传到方法中,所以不能用this 4. 在一个类中定义一个方法为static,则为静态方法,那就是说,无需本类的对象即可调用此方法,调用一个静态方法就是“类名.方法名” 既然"无需本类的对象即可调用静态方法",而this和super关键字都是用于本类对象的-----调用静态方法无需本类的对象这句话很清楚表明:静态方法中不能用this和super关键字 5. 静态方法是存放在内存中的数据段里,this和super调用的是堆空间里的应用对象不能调用数据段区域里的数据,因此静态方法中不能用this和super关键字 6. 静态方法和静态类不属于单个对象,而是类的所有对象共享使用 而this代表当前对象 7. 东西只属于类,不属于任何对象,所以不能用this和super
作者:
唐僧踏歌
时间:
2014-4-16 22:59
谢谢大家的回答,我再慢慢看,时间不够
作者:
张志成
时间:
2014-4-17 02:39
this所在的方法是谁调用的,this就代表谁,说明白的就是方法是对象调用的 ,而静态方法是随着类的加载而加载,是优先于对象的创建,该方法存在时对象也许还未创建完成
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2