您的位置:首页 > 其它

不可变对象和类,变量的作用域

2016-03-11 19:42 197 查看
可变对象和不可变对象

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。

在编程中我们为了程序的可读性和便于修改,一般都不要将同一个类中的变量设置为相同的变量名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: