问题描述
书本第146页最下面的批注:构造器也是static方法,尽管static关键字并没有显示地写出来。不知道哪位高手对于这句话有没有其他资料来支持,java的老爸也没有这么说。。。
解决方案
解决方案二:
这里是错的。static方法里不能使用this,构造方法用一下this就ok了。
解决方案三:
瞎扯。自己运行javap-cjava.lang.String|grepinitjavap-cjava.lang.String|grepstatic就可以验证了。
解决方案四:
jvmspec4.6节,有这么一句话Aspecificinstanceinitializationmethod(§3.9)mayhaveatmostoneofitsACC_PRIVATE,ACC_PROTECTED,andACC_PUBLICflagssetandmayalsohaveitsACC_STRICTflagset,butmaynothaveanyoftheotherflagsinTable4.5set.但是在介绍invokespecial指令的时候,你会感觉它又像是static的
解决方案五:
非static成员跟对象有关,在构造器里,对象都还没初始完成;所以构造器应该是static的。可以用this只是个表面现象,是语言设计者提供的一种访问途径,跟其他非static成员中的this的实现不一样。
解决方案六:
饿thinkinjava一直没看,都说经典,但我觉得最经典的是实践不是搞理论。不知道你学到这个在实践中有什么用吗?用ide编出错了它就会提示你,你不用就完了。
解决方案七:
引用1楼zangxt的回复:
这里是错的。static方法里不能使用this,构造方法用一下this就ok了。
恩
解决方案八:
在非static成员方法运行时,表示对象地址的this会被压入局部变量区,作为局部变量区的第一个元素,这样在成员方法内部就可以访问对象的状态。java中的类在编译成class文件后,每个构造器都生成对应的<init>方法,估计对于每个<init>方法也会像非static方法一样将对象的地址压入局部变量区。
解决方案九:
看不懂,看不懂,继续学习
解决方案十:
该回复于2011-01-12 16:35:38被版主删除
解决方案十一:
引用5楼py330316117的回复:
饿thinkinjava一直没看,都说经典,但我觉得最经典的是实践不是搞理论。不知道你学到这个在实践中有什么用吗?用ide编出错了它就会提示你,你不用就完了。
你只能是开发人员,却不能成长为研发人员
解决方案十二:
可是,TIJ4里多处提到构造器是static的,我想作者不可能一直没意识到这个问题吧。至于JVM里是怎么实现的,就不知道了。。。
解决方案十三:
该回复于2011-01-13 09:06:04被版主删除
解决方案十四:
as
解决方案十五:
fdafsd
解决方案:
引用7楼chosen0ne的回复:
在非static成员方法运行时,表示对象地址的this会被压入局部变量区,作为局部变量区的第一个元素,这样在成员方法内部就可以访问对象的状态。java中的类在编译成class文件后,每个构造器都生成对应的<init>方法,估计对于每个<init>方法也会像非static方法一样将对象的地址压入局部变量区。
学习了
解决方案:
这是从概念上的一种说法吧,从技术上未必成立。构造函数不是普通函数,用普通的函数修饰符来对它分类没有意义。
解决方案:
引用10楼syau09514528的回复:
引用5楼py330316117的回复:饿thinkinjava一直没看,都说经典,但我觉得最经典的是实践不是搞理论。不知道你学到这个在实践中有什么用吗?用ide编出错了它就会提示你,你不用就完了。你只能是开发人员,却不能成长为研发人员
嗯~!我见过不少实践高手,动手能力的确强,但也仅仅局限于能够快速写个程序而已了。曾经和一个所谓的有长期数据库实践工作的家伙合作,那厮居然连表和表之间的引用约束都不知道,还煞有介事跟我争论了一整天。
解决方案:
这个说法有点扯蛋
解决方案:
不懂不过我认为当你new的时候应该就可以看出来了
解决方案:
首先说下我对以下几个基本概念的理解:1.new关键字用来分配内存2.构造函数,用来初始化变量,只是附初值,并不包括分配内存;3.this关键字,指向对象内存的一个指针;4.static关键字,可以理解为是一个标识,没有static的变量,方法,实例对象可以引用到,如果加了的话只能通过类引用。对于Classa=newa(),这样的语句,实际执行的是就是开辟一段内存空间,然后对空间的变量附一个初值,new后面的a指明开辟内存的大小,内存中变量的类型,后面的括号指明对变量的初值是什么,然后将this指向这块内存。ps:对于this(a,b)这样类似指针函数的功能,上面说明无法解释,希望高手来说明一下。
解决方案:
引用20楼mtv0199的回复:
首先说下我对以下几个基本概念的理解:1.new关键字用来分配内存2.构造函数,用来初始化变量,只是附初值,并不包括分配内存;3.this关键字,指向对象内存的一个指针;4.static关键字,可以理解为是一个标识,没有static的变量,方法,实例对象可以引用到,如果加了的话只能通过类引用。对于Classa=newa(),这样的语句,实际执行的是就是……
1.new分配内存+对象初始化。3.看上下文。非static方法和构造器中,用this访问成员时,可以这样理解。this()调用其他构造器例外,语法而已。4.static的也可以通过实例引用。Classa=newA();看字节码的话是0:new#2;//classA3:dup4:invokespecial#3;//Method"<init>":()V7:astore_1new指令分配内存,得到的引用在栈顶,dup一份,栈顶上的引用作为构造器变体<init>方法的第一个参数this。<init>负责初始化。这里的new指令可以认为是static的,但说构造方法是static就扯了。当然指令new并不同于语法中的new。如果学过C++,理解operatornew的话就容易理解了,语言的new操作符导致operatornew的调用,然后调用构造函数。而operatornew是可重载的,是static的。
解决方案:
你看的那个书,应该是中文版的吧,肯定是翻译错误。不要纠结这种问题,还要讨论毛?static有什么特性,构造方法有吗?构造方法有的特性static有对应的吗?斑竹结贴吧。
解决方案:
我倒是感觉构造方法是static的。首先static方法成员是属于类的,非static方法成员是对象的。而构造函数是用于创建对象的,创建对象的方法成员会是属于对象自己的?而且可以想象,在对象被创建之前,构造方法肯定已经被加载到内存当中,这时候都没有对象的啊还有,你能想象一个对象拥有一份自己的构造方法么?而且一个对象被创建了,他还拥有构造函数干嘛呢?所以构造函数肯定是属于类的。但至于属于类的函数是不是就是static的这个我到不是很清楚
解决方案:
引用21楼zangxt的回复:
引用20楼mtv0199的回复:首先说下我对以下几个基本概念的理解:1.new关键字用来分配内存2.构造函数,用来初始化变量,只是附初值,并不包括分配内存;3.this关键字,指向对象内存的一个指针;4.static关键字,可以理解为是一个标识,没有static的变量,方法,实例对象可以引用到,如果加了的话只能通过类引用。对于Classa……
这就说得通了,学习了
解决方案:
引用22楼ysj300的回复:
你看的那个书,应该是中文版的吧,肯定是翻译错误。不要纠结这种问题,还要讨论毛?static有什么特性,构造方法有吗?构造方法有的特性static有对应的吗?斑竹结贴吧。
跟翻译无关,原书作者的问题。
解决方案:
这本书很深,不适合初学者看,得到一定水平才能看
解决方案:
看了一下1楼的回答是对的
解决方案:
什么是静态方法?只有加了static才是静态方法吗?静态方法的本意是类方法,是类层次上的东西,跟对象无关,只要调用静态方法,就会加载class,产生Class这种类对象,(当然,前提是还没有加载)调用static限定的静态方法和构造方法都会加载class,构造方法多了一个附属产品(产生了对象)。static限定的方法跟构造方法是两种不同类型的静态方法,所以说,使用上会有区别,但本质是相同的。
解决方案:
自学了半年java,拿这本书看懂了一小半,剩下的确实看不懂了。。。
解决方案:
引用28楼wwblgpp的回复:
什么是静态方法?只有加了static才是静态方法吗?静态方法的本意是类方法,是类层次上的东西,跟对象无关,只要调用静态方法,就会加载class,产生Class这种类对象,(当然,前提是还没有加载)调用static限定的静态方法和构造方法都会加载class,构造方法多了一个附属产品(产生了对象)。static限定的方法跟构造方法是两种不同类型的静态方法,所以说,使用上会有区别,但本质是……
起码在java语言定义的范畴内,静态方法有起自己的定义。当然,你重写了定义,可以引伸出和java定义不同的结论来。
解决方案:
看来我有必要来看看这本书
解决方案:
引用30楼zangxt的回复:
引用28楼wwblgpp的回复:什么是静态方法?只有加了static才是静态方法吗?静态方法的本意是类方法,是类层次上的东西,跟对象无关,只要调用静态方法,就会加载class,产生Class这种类对象,(当然,前提是还没有加载)调用static限定的静态方法和构造方法都会加载class,构造方法多了一个附属产品(产生了对象)。static限定的方法跟构造方法是两种不同类……
Amethodthatisdeclaredstaticiscalledaclassmethod.Aclassmethodisalwaysinvokedwithoutreferencetoaparticularobject.我翻译这两句的意思是:被声明为static的方法称为类方法。类方法不涉及特定的对象。我觉得这里仅仅指明了static方法(静态方法)是一种类方法,当然,我说的“静态方法的本意是类方法”说法是错误的,(我不是要来为我的观点辩护。)但是,从类方法这个层次上讲,static方法与构造方法应该是一样的。(它们都是类方法,是类层次上的东西,跟对象无关,我觉的THKJ的作者也应该是这个意思)。还有,我觉得上面两段英文好像没有给声明为static的方法下一个定义,它只是说static方法是一种类方法。
解决方案:
你们都是高手哈,那我就不看了..
解决方案:
引用5楼py330316117的回复:
饿thinkinjava一直没看,都说经典,但我觉得最经典的是实践不是搞理论。不知道你学到这个在实践中有什么用吗?用ide编出错了它就会提示你,你不用就完了。
那你永远是那个拿砖头砌墙的人了
解决方案:
引用5楼py330316117的回复:
饿thinkinjava一直没看,都说经典,但我觉得最经典的是实践不是搞理论。不知道你学到这个在实践中有什么用吗?用ide编出错了它就会提示你,你不用就完了。
境界没到,还夜郎自大。
解决方案:
引用32楼wwblgpp的回复:
引用30楼zangxt的回复:引用28楼wwblgpp的回复:什么是静态方法?只有加了static才是静态方法吗?静态方法的本意是类方法,是类层次上的东西,跟对象无关,只要调用静态方法,就会加载class,产生Class这种类对象,(当然,前提是还没有加载)调用static限定的静态方法和构造方法都会加载class,构造方法多了一个附属产品(产生了对象)。s……
我觉得说的很有道理如果从可以脱离对象而使用的角度来看的话是属于类级别的方法但是静态方法==类级别的方法么?
解决方案:
引用36楼maydie1989的回复:
引用32楼wwblgpp的回复:引用30楼zangxt的回复:引用28楼wwblgpp的回复:什么是静态方法?只有加了static才是静态方法吗?静态方法的本意是类方法,是类层次上的东西,跟对象无关,只要调用静态方法,就会加载class,产生Class这种类对象,(当然,前提是还没有加载)调用static限定的静态方法和构造方法都会加载class,构……
我觉得应该是一种从属关系,静态方法是一种类方法,但是类方法不止有静态方法。
解决方案:
好像书里面有提过关于构造方法为什么是static.楼主再仔细看看,这边书好好好,就是厚.嗯!相对于我的小脑袋而言.大头什么的就当我没说[哈哈]
解决方案:
java底层是C,如果java他老爸解释不了,就查查看C语言的设计。。。
解决方案:
引用10楼syau09514528的回复:
引用5楼py330316117的回复:饿thinkinjava一直没看,都说经典,但我觉得最经典的是实践不是搞理论。不知道你学到这个在实践中有什么用吗?用ide编出错了它就会提示你,你不用就完了。你只能是开发人员,却不能成长为研发人员
看这情形,我就是一辈子的码农了