鱼C论坛

 找回密码
 立即注册
查看: 3193|回复: 11

[已解决]关于用new创建对象

[复制链接]
发表于 2017-11-13 14:14:34 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为啥有的时候创建对象需要new有的时候不需要比如String类
最佳答案
2017-11-16 12:55:20
本帖最后由 hacker.jin 于 2017-11-16 12:59 编辑
hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:

静态类不需要new,就这么简单,


其实你可以理解为,静态的东西,在jvm启动时就已经"""new"""出来了,后面用的时候只要活得他的引用就可以了

还有main方法必须是静态的,也是这个原因,另外,关于new,你先搞清楚什么是面向对象,类是可以比喻成人类,注意是人类,不是人,人类是一个概念,一个统称,表示了所有人,而new就是你和你老婆XXOO生出一个新的人,这个XXOO的过程就是new,如果还不懂,你别学java了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-13 15:05:01 | 显示全部楼层
有的时候他是把new封装到一个方法里了,其实最终还是要new的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-11-14 00:28:40 From FishC Mobile | 显示全部楼层
alltolove 发表于 2017-11-13 15:05
有的时候他是把new封装到一个方法里了,其实最终还是要new的

怎么说呢?什么叫最终还是要new,像String对象这样的,代码里并没有new它啊,还是说java虚拟机帮他自动完成了?如果是这样,又如何辨认哪些需要(显示地)用new,哪些是计算机来完成的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-14 08:09:59 | 显示全部楼层
调用的话肯定要new出来,String是Java封装好了的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-14 08:45:12 From FishC Mobile | 显示全部楼层
懒癌患者 发表于 2017-11-14 08:09
调用的话肯定要new出来,String是Java封装好了的

jdk里面不都是封装好的吗?他们好多不都是要new吗?比如Scanner
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-14 11:09:39 | 显示全部楼层
月满霜华 发表于 2017-11-14 08:45
jdk里面不都是封装好的吗?他们好多不都是要new吗?比如Scanner

话不不投机...  对象有很多..  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-14 11:11:47 | 显示全部楼层
楼主的这个问题瞬间无解{:10_250:  好像在说:“中国为什么也有说外语的?”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-14 12:17:21 From FishC Mobile | 显示全部楼层
懒癌患者 发表于 2017-11-14 11:11
楼主的这个问题瞬间无解{:10_250:  好像在说:“中国为什么也有说外语的?”

我只是想请教什么时候不需要在代码里手动写new...哪里话不投机了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-16 12:54:08 | 显示全部楼层
楼主菜鸟还爱钻牛角尖啊,答案:

静态类不需要new,就这么简单,

终于你说的字符串不需要new,呵呵

String str = "Hello";你说的是这样吗?

我来解释下这个过程吧,首先,这个"hello"叫做字面量

编译器在编译的时候,生成的实际上是一个静态常量

jre运行时会把它加载到常量池里面(可以理解为一个静态常量,注意是静态)

当运行到String str = "Hello"这里时,实际上是把这个静态常量的引用给str这个String变量

如果String str = "Hello" + i;那么会在堆空间创建一个字符串,然后从常量池中取得Hello这个字符串,放到这个新的字符串中,再把i放到这个新的字符串中,再把这个新的字符串的引用给str

所以,没事别瞎拼字符串,耗内存

最后,如果字面量是"Hello"+"World",那么编译后常量池的值是HelloWorld,而不会产生两个字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-16 12:55:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hacker.jin 于 2017-11-16 12:59 编辑
hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:

静态类不需要new,就这么简单,


其实你可以理解为,静态的东西,在jvm启动时就已经"""new"""出来了,后面用的时候只要活得他的引用就可以了

还有main方法必须是静态的,也是这个原因,另外,关于new,你先搞清楚什么是面向对象,类是可以比喻成人类,注意是人类,不是人,人类是一个概念,一个统称,表示了所有人,而new就是你和你老婆XXOO生出一个新的人,这个XXOO的过程就是new,如果还不懂,你别学java了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-20 01:38:06 From FishC Mobile | 显示全部楼层
hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:

静态类不需要new,就这么简单,

好深刻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-20 01:38:53 From FishC Mobile | 显示全部楼层
hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:

静态类不需要new,就这么简单,

多谢啦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 07:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表