Thinking In Java有争议点,期待高手回答

问题描述

书本第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编出错了它就会提示你,你不用就完了。你只能是开发人员,却不能成长为研发人员

看这情形,我就是一辈子的码农了

时间: 2024-10-23 02:38:41

Thinking In Java有争议点,期待高手回答的相关文章

java socket 开发,请高手指点,谢谢。

问题描述 java socket 开发,请高手指点,谢谢. 1.需要实现跟服务器进行客户数据的同步! 2.报文编码:GBK 3.请求报文格式: [192.168.1.189][01][张三][18651870425][重庆][xxxxx].... 这些是我需要传过去的参数 4.返回报文格式 [10054][01][张三][18651870425][重庆][重庆市江湖区...]. 我在网上看了很多socket 列子,都是: Socket client = new Socket("127.0.0.1

owc画折线图的问题?期待高手 啊~~

问题描述 怎样才能把折线图做出的效果和Excel中画的折线图一样呢?要做出的效果是:如果数据库中的值为空的时候,则停止画该折线,当下一个数据出现的时候隔几个空的无值的坐标点重新开始画另外一条折线,我做出来的当值出现空的时候后面有值的点会覆盖原来没值的点,所以画出来的折线就变成了连贯的折线了...期待高手的帮助!!! 解决方案 解决方案二:你只有把缺少的补其,或者把相应的没有值的点去掉才可以!解决方案三:privatevoidDisplayChart(stringstr){stringFileNa

来咯-java难学吗请各位回答一下

问题描述 java难学吗请各位回答一下 监控哦哦魔女突然如泣如诉兔兔天助自助者兔兔喔喔喔喔喔喔喔哦 图我也在学习我摸摸我也在学习 解决方案 易学难精,书本上学的都是基础中的基础,只有在项目实战中才能学到真东西. 解决方案二: java很简单的啊 无非就是if else 类调来调去 解决方案三: 相对于其他语言,Java是很好学的.需要的就是大量的练习! 解决方案四: 入门简单,实践出真知 解决方案五: 很好学,建议你看视频学,有不会的也不要纠结,先把视频看完,然后做项目 解决方案六: 入门之后什

关于 java 正则表达式 零宽断言 求回答

问题描述 关于 java 正则表达式 零宽断言 求回答 String= >Symantec bbSEPM码.a>display>"itemcca> regex= (?<=>).*?a> 问:能匹配到什么? 我认为是:Symantec bbSEPM码.a> "itemcca> 但结果是:Symantec bbSEPM码.a> "display>"itemcca> 不能理解!求大神!

桌面下雪小程序-这个程序错在哪?求高手回答

问题描述 这个程序错在哪?求高手回答 #include #include #include #include #include "Snow.h" /* UpdateLayeredWindow declaration*/ typedef BOOL (WINAPI lpfnUpdateLayeredWindow)( HWND, HDC, POINT, SIZE*, HDC, POINT*,COLORREF, BLENDFUNCTION*, DWORD); /* global variabl

简单的Java程序,麻烦各位高手给个例子,谢谢

问题描述 某公司由6人组成,他们分别是:序号姓名地址电话职务社会安全号基本工资No.nameaddressphonetitlesocialSNpayRate1Sam123MainLine555-0469manager123-45-6789$2423.072Peter456OffLine555-0101employee987-65-4321$1246.153Mary789OffRocker555-0690employee010-20-3040$1169.234Cliff678FifthAve.55

用jbpm中报的java.lang.ClassCastException,求高手给个思路。。

问题描述 在做oa的时候遇到的问题,也可能是比较白的问题,但是就是找不到解决方法.求高手给个查错的方向..用断点查到的调用这边这个方法的时候报的异常.我和一个能正确运行的项目做过比较,甚至直接考过来把变量改成我得,还是报错.方法应该没错.//下一步的都有那些流向?publicListsearchNextTransitions(LongprocessInstanceId){JbpmContextcontext=this.getContext();//根据流程实例标识查找流程实例ProcessIns

可能java设计缺陷、希望高手指正错误

创建表语句 create table t_user( u_id varchar(255), u_name varchar(255), u_age Integer, u_price double(5,2), uc_id varchar(255), primary key(u_id) ); create table t_user_class( uc_id varchar(255), uc_classNo Integer, uc_funds double(5,2), uc_back varchar(2

Java中文问题详解(高手必读)

问题|详解|中文 我来说一下tomcat如何实现JSP的你就明白了.预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式 是使用字节流的. 因此Java要对这些字节流经行转化.char是unicode的,而byte是字节. Java中byte/char互转的函数在sun.io的包中间有.其中ByteToCharConverter类是中调度, 可以用来告诉你,你用的Convertor.其中两个很常用的静态函数是 publ