当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

java别名问题[Java编程]

赞助商链接



  本文“java别名问题[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
“别名”意味着多个句柄都试图指向同一个对象,就象前面的例子展示的那样.若有人向那个对象里写入一点什么东西,就会产生别名问题.若其他句柄的全部者不但愿那个对象改变,恐怕就要绝望了.这可用下面这个简单的例子阐明:
//: Alias1.java
// Aliasing two handles to one object

public class Alias1 {
  int i;
  Alias1(int ii) { i = ii; }
  public static void main(String[] args) {
    Alias1 x = new Alias1(7);
    Alias1 y = x; // Assign the handle
    System.out.println("x: " + x.i);
    System.out.println("y: " + y.i);
    System.out.println("Incrementing x");
    x.i++;
    System.out.println("x: " + x.i);
    System.out.println("y: " + y.i);
  }
} ///:~
对下面这行:
Alias1 y = x; // Assign the handle
它会新建一个Alias1句柄,但不是把它分配给由new成立的一个新颖对象,而是分配给一个现有的句柄.所以句柄x的内容——即对象x指向的地址——被分配给y,所以无论x还是y都与相同的对象衔接起来.这样一来,一旦x的i在下述语句中增值:
x.i++;
y的i值也必定遭到影响.从终究的输出便可以看出:
x: 7
y: 7
Incrementing x
x: 8
y: 8
此时最直接的一个办理办法就是干脆不这样做:不要有意将多个句柄指向同一个作用域内的同一个对象.这样做可以使代码更易理解和调试.但是,一旦预备将句柄作为一个自变量或参数传送——这是Java假想的正常办法——别名问题就会自动呈现,因为成立的本地句柄大概改正“外部对象”(在办法作用域之外成立的对象).下面是一个例子:
//: Alias2.java
// Method calls implicitly alias their
// arguments.

public class Alias2 {
  int i;
  Alias2(int ii) { i = ii; }
  static void f(Alias2 handle) {
    handle.i++;
  }
  public static void main(String[] args) {
    Alias2 x = new Alias2(7);
    System.out.println("x: " + x.i);
    System.out.println("Calling f(x)");
    f(x);
    System.out.println("x: " + x.i);
  }
} ///:~
输出以下:
x: 7
Calling f(x)
x: 8

办法改变了自己的参数——外部对象.一旦碰到这种情形,必须判断它能否公道,用户能否乐意这样,以及是不是会造成问题.
普通,我们调用一个办法是为了产生返回值,大概用它改变成其调用办法的那个对象的状况(办法其实就是我们向那个对象“发一条消息”的方法).很少需求调用一个办法来处理它的参数;这叫作操纵办法的“副作用”(Side Effect).所以假使成立一个会改正自己参数的办法,必须向用户明确地指出这一情形,并告诫利用那个办法大概会有的后果以及它的潜在威胁.由于存在这些混合和缺陷,所以应当尽大概避免改变参数.
若需在一个办法调用期间改正一个参数,且不打算改正外部参数,就应在自己的办法内部制作一个副本,从而保护那个参数.本章的大大都内容都是环绕这个问题展开的.
  以上是“java别名问题[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .