不可变对象和类,变量的作用域
2016-03-11 19:42
197 查看
可变对象和不可变对象
1、可变对象是一种创建后能修改的对象,他能直接或间接的引用数据域,能为类中的变量赋予新的值
2、不可变对象是一种创建后内容就不能改变的对象,例如String类就是一种不可变对象;
如果一个类的所有数据域都是是私有的,也没有修改起方法,但他有指向引用可变域方法的访问器方法时,他就不是一个不可变对象;
而要设置一个不可变对象,首先要把数据域设置为私有的,其次是不能设置修改器方法,然后还不要设置能指向引用可变域数据的访问方法eg:
类的数据域是私有的,也没有修改器方法,但对象却不是不可变对象,因为他有能指向引用可变域数据的访问方法,
变量作用域:
实际变量和静态变量是作用域整个类的,所以不管在那个位置申明变量效果都是相同的;
一个变量如果是在类中的方法中定义的,那他的作用域就是这个方法中,而不能用于其他方法,这种变量就称为局部变量
如果一个类变量和一个局部变量名称相同,哪里局部变量优先,类变量则隐藏;eg:
第一个方法显示的是: x = 15
第二个方法显示的是: x = 45
在fx()方法中显示了局部变量,而局部变量x只能作用于fx()方法,在方法fz()中显示的就是类变量x的值;
而如果想要在fx()方法中使用类变量x, 就要是用this引用隐藏数据域,eg:
在编程中我们为了程序的可读性和便于修改,一般都不要将同一个类中的变量设置为相同的变量名
1、可变对象是一种创建后能修改的对象,他能直接或间接的引用数据域,能为类中的变量赋予新的值
2、不可变对象是一种创建后内容就不能改变的对象,例如String类就是一种不可变对象;
如果一个类的所有数据域都是是私有的,也没有修改起方法,但他有指向引用可变域方法的访问器方法时,他就不是一个不可变对象;
而要设置一个不可变对象,首先要把数据域设置为私有的,其次是不能设置修改器方法,然后还不要设置能指向引用可变域数据的访问方法eg:
<span style="font-size:14px;"><span style="font-size:14px;">package newpackage2; public class Object { private int number; private java.util.Date tame; public Object(int Newnumber){ number = Newnumber; tame = new java.util.Date(); } public int get(){ return number; } public java.util.Date gettame(){ return tame; } }</span></span>(代码基于《java语言程序设计》)
类的数据域是私有的,也没有修改器方法,但对象却不是不可变对象,因为他有能指向引用可变域数据的访问方法,
<span style="font-size:14px;"><span style="font-size:14px;">Object case2 = new Object(45); java.util.Date tame = case2.gettame(); tame.setTime(46446);</span></span>gettame()方法是对Date类对象的引用,而通过这个引用就能改变tame的值。
变量作用域:
实际变量和静态变量是作用域整个类的,所以不管在那个位置申明变量效果都是相同的;
一个变量如果是在类中的方法中定义的,那他的作用域就是这个方法中,而不能用于其他方法,这种变量就称为局部变量
如果一个类变量和一个局部变量名称相同,哪里局部变量优先,类变量则隐藏;eg:
<span style="font-size:14px;"><span style="font-size:14px;">private int x = 45; public void fx(){ int x = 15; System.out.println("x = " + x); }</span></span>
<span style="font-size:14px;"><span style="font-size:14px;">public void fz(){ System.out.println(" x = " + x); }</span></span>
第一个方法显示的是: x = 15
第二个方法显示的是: x = 45
在fx()方法中显示了局部变量,而局部变量x只能作用于fx()方法,在方法fz()中显示的就是类变量x的值;
而如果想要在fx()方法中使用类变量x, 就要是用this引用隐藏数据域,eg:
<span style="font-size:14px;">public void fx(){ int x = 15; System.out.println("x = " + x); this.x = x; }</span>类变量的值就变为了15。
在编程中我们为了程序的可读性和便于修改,一般都不要将同一个类中的变量设置为相同的变量名
相关文章推荐
- C++ Primer Plus学习:第十三章
- Sicily 1013 Going Home
- 2015年大二上-数据结构-查找-2-(3)-B-树的基本操作
- CSS书写规范
- 通过docker-machine和etcd部署docker swarm集群
- SPFA 算法详解( 强大图解,不会都难!)
- ListView与ArrayAdapter
- html代码书写规范
- 侯捷对进入IT行业的年轻人的建议
- Java垃圾回收机制
- LinkedHashMap 的实现原理
- 数据库锁和数据库隔离级别
- Ubuntu14.10+cuda7.0+caffe配置
- [GDKOI2016]不稳定的传送门
- POJ-3083-Children of the Candy Corn
- 【网络流24题】最小路径覆盖问题
- 3.9号高项第三章信息系统集成专业技术知识作业
- 网页制作插入新的元素,并且为插入的元素添加事件
- win7 64位环境下配置visual studio2013 的opencv 3.0环境
- C++ Primer Plus学习:第十一章