电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java返回可變引用對象問題整理

瀏覽:91日期:2022-09-02 11:50:40

1.問題

/** * 輸出: Mon Apr 26 10:54:10 CST 2010 * Mon Apr 26 10:54:10 CST 2010 */public static void main(String[] args){ Example test = new Example(new Date()); Date d = test.getDate(); double tenYearsInMillisSeconds = 10 * 365.25 * 24 * 3600 * 1000; d.setTime((long) (d.getTime() - tenYearsInMillisSeconds)); System.out.println(d); System.out.println(test.getDate());}public class Example { private Date date; public Example(Date date){ this.date = date; } public Date getDate() { return date; }}

Date類破壞了Example的封裝,導致修改實例 d時影響了 test 的值,原因是Date類生成的對象是可變的。

2.對象與對象變量

Date birthday = new Date();Date deadline = birthday;

這兩個變量引用同一個對象(請參見圖 4-4 )。

Java返回可變引用對象問題整理

但一個對象變量并沒有實際包含一個對象,而僅僅引用一個對象。

在 Java 中,任何對象變量的值都是對存儲在另外一個地方的一個對象的引用。new 操作符的返回值也是一個引用。

Date birthday = new Date();可以理解為new Date() 構造了一個 Date 類型的對象, 并且它的值是對新創建對象的引用。這個引用存儲在變量 birthday中。

Java 對象變量與 C++ 的引用并不同

可以將 Java 的對象變量看作 C++ 的對象指針。例如,

Date birthday; // Java

實際上,等同于

Date* birthday; // C++

所有的 Java 對象都存儲在堆中。 當一個對象包含另一個對象變量時, 這個變量依然

包含著指向另一個堆對象的指針。

3.更改器方法與訪問器方法

上文還是沒有解釋清楚為什么Date類的對象是可變對象,原因在這。

假設在上文中Example類中使用Java中與Date類相近的LocalDate類便不會出現上述情況,測試可以自己去嘗試。

原因在于假設使用LocalDate類中的plusDays 方法來修改對象變量,它會生成一個新的LocalDate對象,然后把這個新對象賦值給調用者,原來的對象不做任何改動。

此類只訪問對象而不修改對象的方法有時稱為訪問器方法(accessor method)

而像Date類中的setTime方法會使得原對象的狀態發生改變,此類稱為更改器方法(mutator method)

4.解決方法

如果需要返回一個可變數據域的拷貝,就應該使用 clone。這樣會創建一個當前對象的副本,而不會對當前對象造成影響。

public class Example { private Date date; public Example(Date date){ this.date = date; } public Date getDate() {return (Date) date.clone(); }}

5.不可變類

5.1什么是不可變類

不可變類指當類被實例化后,該類的成員變量均不可被改變。

如JDK內部自帶的很多不可變類Interger、Long、 Boolean和String等。

5.2優缺點 優點:

1.線程安全

2.易于構造、使用和測試

3.可以被自由地共享缺點:對于每一個不同的值都需要對應一個單獨的對象 5.3如何實現不可變類 Class需要用final修飾,保證類不能被繼承所有成員變量需要private修飾,保證成員變量不能直接被訪問類中不允許提供setter方法,保證成員變量不會被改變在getter方法中不能返回對象本身,返回對象的拷貝

到此這篇關于Java返回可變引用對象問題整理的文章就介紹到這了,更多相關Java返回可變引用對象問題內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 西安中国国际旅行社(西安国旅) | 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | 方源木业官网-四川木门-全国木门专业品牌 | 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | 桨叶搅拌机_螺旋挤压/方盒旋切造粒机厂家-无锡市鸿诚输送机械有限公司 | 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 钢结构厂房造价_钢结构厂房预算_轻钢结构厂房_山东三维钢结构公司 | AR开发公司_AR增强现实_AR工业_AR巡检|上海集英科技 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 浙江上沪阀门有限公司| 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 山东氧化铁红,山东铁红-淄博科瑞化工有限公司 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 大连海岛旅游网>>大连旅游,大连海岛游,旅游景点攻略,海岛旅游官网 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 破碎机锤头_耐磨锤头_合金锤头-鼎成机械一站式耐磨铸件定制服务 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 谷梁科技| 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 啤酒设备-小型啤酒设备-啤酒厂设备-济南中酿机械设备有限公司 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) |