黑马程序员技术交流社区
标题:
关于this和静态static的问题求解!
[打印本页]
作者:
逝去的记忆ヽ
时间:
2012-6-8 18:07
标题:
关于this和静态static的问题求解!
在老毕的讲堂上,说静态函数中,不存在this,看了好几遍还是不能理解,为什么不能在静态中存在this呢。
还有静态函数在什么时候使用?有时候老师讲讲就说这里用静态就解决了。是通过什么方式想到的啊?
求哪位大侠帮助帮助。。。
作者:
杨天皓
时间:
2012-6-8 18:19
静态方法是跟实例无关的方法,只跟类有关,在类没有实例的时候就可以使用其静态方法。静态方法不能操作非静态变量也不能调用非静态方法。
说简单点,就是静态方法可以被类名直接调用。
而this关键字,是因为this是表示被实例化的某类实例本身,只要我上面说的你明白了,你就知道不能在静态方法体里面使用this关键字了。
作者:
黑马张扬
时间:
2012-6-8 18:34
什么时候定义静态变量
当对象中出现共享数据时,这个数据应该被静态修饰
什么时候定义静态函数
当功能内部没有访问到非静态数据时 该功能可定义为静态。
静态是随着类加载存在的 是优先于对象存在的 this是代表当前对象的 所以不能用
作者:
胡卿
时间:
2012-6-8 23:15
本帖最后由 胡卿 于 2012-6-8 23:22 编辑
静态优先于对象的存在,this代表对象,但静态方法建立时没有实例存在,也就不能定义this了
具体说就是:
静态方法会随着类的建立而建立,而实例是随着对象的建立而建立,在类之后,类建立了,静态成员也就存在了,但实例变量并不存在,而this代表的就是实例对象,既然实例都没有
建立,当然不能定义this了
作者:
杨海波
时间:
2012-6-8 23:35
static修饰的成员随着类的加载存在与方法区中,此时还不存在该类的对象。this指向的调用该成员的对象的引用,也就是说有了对象才有this。所以静态函数中不能使用this关键字。如果楼主还是不太理解。可以去看Java语言规范,哪一章忘记了。。。里面讲的很具体。
在工具类中,常常会用到静态方法。例如Arrays类。另外,我们不希望别人能直接创建类的实例而是使用我们提供的对象,这个时候就可以使用静态方法啊。单例设计模式不就用到了静态方法吗?
作者:
廖超超
时间:
2012-6-9 22:47
静态函数和静态成员变量随类的加载而加载,他的内存执行顺序高于你创建实例(对象),静态方法和函数存储在方法区,可以直接用类名调用,他将随着类而存在,生命周期高于对象。this关键字是指向当前对象,在你创建对象之后可以使用。当对象变量名语函数变量名相同时可以用this作为指引,指向当前对象。静态函数只可以访问静态函数和成员变量。
作者:
陌花╮有意、
时间:
2012-6-10 00:23
静态不与任何实例有关,直接通过类名调用
一般把共享数据用static修饰
作者:
吴小东
时间:
2012-6-10 11:56
谈谈我对静态的一点理解吧:首先楼主说的this 关键字是代表该类的一个实例对象。比如定义一个 private int a ;在类内部使用的话就是this.a,在内外部就要new class().a
如果说的有错也请指点 就是要使用非静态的成员的话就必须创建一个实例对象。
对静态成员的访问不需要创建对象的实例,直接用类名.成员的方式来访问。
在内存中的表现形式:
非静态的成员都存放在堆内存中,必须要创建对象的引用才能对非静态成员进行访问。
而对于用static修饰的静态成员,是在编译Class文件过程中就已经存在于方法区中。
对于什么时候使用 static 修饰成员
1.静态变量:当数据是共享数据时定义为静态,比如毕老师视讲的售票系统中票的数量 TicketNum。
多个售票窗口(也即是多个实例对象)对同一个TicketNum进行操作,这个TicketNum就作为共享数据存在
如果是非静态的话,那么每一个实例对象都会创建一个自己的 TicketNum 变量。那么就不能达到对同一个数据进行操作。
2.静态常量:对一些固定不变的特有数据应该用静态修饰,比如PI 圆周率。而且要用 public static final 来修饰
3.静态函数:当功能内部没有访问到非静态数据时 该功能可定义为静态。这里涉及到对非静态数据的理解,就是你定义的静态方法中
不会涉及到对【该类】对象(也即是this)的引用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2