QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
190
查看: 167|回复: 11

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

[复制链接]
最佳答案
0 
累计签到:62 天
连续签到:62 天
月满霜华 发表于 2017-11-13 14:14:34 From FishC Mobile 16711 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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了
楼层
跳转到指定楼层
最佳答案
23 
累计签到:402 天
连续签到:150 天
alltolove 发表于 2017-11-13 15:05:01 | 显示全部楼层
有的时候他是把new封装到一个方法里了,其实最终还是要new的
最佳答案
0 
累计签到:62 天
连续签到:62 天
月满霜华  楼主| 发表于 2017-11-14 00:28:40 From FishC Mobile | 显示全部楼层
alltolove 发表于 2017-11-13 15:05
有的时候他是把new封装到一个方法里了,其实最终还是要new的

怎么说呢?什么叫最终还是要new,像String对象这样的,代码里并没有new它啊,还是说java虚拟机帮他自动完成了?如果是这样,又如何辨认哪些需要(显示地)用new,哪些是计算机来完成的呢?
最佳答案
0 
累计签到:5 天
连续签到:1 天
懒癌患者 发表于 2017-11-14 08:09:59 | 显示全部楼层
调用的话肯定要new出来,String是Java封装好了的
最佳答案
0 
累计签到:62 天
连续签到:62 天
月满霜华  楼主| 发表于 2017-11-14 08:45:12 From FishC Mobile | 显示全部楼层
懒癌患者 发表于 2017-11-14 08:09
调用的话肯定要new出来,String是Java封装好了的

jdk里面不都是封装好的吗?他们好多不都是要new吗?比如Scanner
最佳答案
0 
累计签到:5 天
连续签到:1 天
懒癌患者 发表于 2017-11-14 11:09:39 | 显示全部楼层
月满霜华 发表于 2017-11-14 08:45
jdk里面不都是封装好的吗?他们好多不都是要new吗?比如Scanner

话不不投机...  对象有很多..  
最佳答案
0 
累计签到:5 天
连续签到:1 天
懒癌患者 发表于 2017-11-14 11:11:47 | 显示全部楼层
楼主的这个问题瞬间无解{:10_250:  好像在说:“中国为什么也有说外语的?”
最佳答案
0 
累计签到:62 天
连续签到:62 天
月满霜华  楼主| 发表于 2017-11-14 12:17:21 From FishC Mobile | 显示全部楼层
懒癌患者 发表于 2017-11-14 11:11
楼主的这个问题瞬间无解{:10_250:  好像在说:“中国为什么也有说外语的?”

我只是想请教什么时候不需要在代码里手动写new...哪里话不投机了
最佳答案
7 
累计签到:119 天
连续签到:2 天
hacker.jin 发表于 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,而不会产生两个字符串
最佳答案
7 
累计签到:119 天
连续签到:2 天
hacker.jin 发表于 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了
最佳答案
0 
累计签到:62 天
连续签到:62 天
月满霜华  楼主| 发表于 5 天前 From FishC Mobile | 显示全部楼层
hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:

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

好深刻
最佳答案
0 
累计签到:62 天
连续签到:62 天
月满霜华  楼主| 发表于 5 天前 From FishC Mobile | 显示全部楼层
hacker.jin 发表于 2017-11-16 12:54
楼主菜鸟还爱钻牛角尖啊,答案:

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

多谢啦。

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-11-25 06:01

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