仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 457|回复: 10
打印 上一主题 下一主题

[学习教程] 发布一篇JAVA中的指针,援用及对象的clone

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。
Java言语的一个长处就是作废了指针的观点,但也招致了很多程序员在编程中经常疏忽了对象与援用的区分,本文会试图廓清这一观点。而且因为Java不克不及经由过程复杂的赋值来办理对象复制的成绩,在开辟过程当中,也经常要要使用clone()办法来复制对象。本文会让你懂得甚么是影子clone与深度clone,熟悉它们的区分、长处及弱点。
看到这个题目,是否是有点狐疑:Java言语明白申明作废了指针,由于指针常常是在带来便利的同时也是招致代码不平安的本源,同时也会使程序的变得十分庞大难以了解,滥用指针写成的代码不亚于利用早已臭名远扬的"GOTO"语句。Java保持指针的观点相对是极为明智的。但这只是在Java言语中没有明白的指针界说,本色上每个new语句前往的都是一个指针的援用,只不外在年夜多时分Java中不必体贴怎样操纵这个"指针",更不必象在操纵C++的指针那样人心惶惶。独一要多多体贴的是在给函数传送对象的时分。以下例程:
packagereference;
classObj{
  Stringstr="initvalue";
  publicStringtoString(){
    returnstr;
  }
}
publicclassObjRef{
  ObjaObj=newObj();
  intaInt=11;
  publicvoidchangeObj(ObjinObj){
    inObj.str="changedvalue";
  }
  publicvoidchangePri(intinInt){
    inInt=22;
  }
  publicstaticvoidmain(String[]args)
  {
    ObjRefoRef=newObjRef();
    
    System.out.println("BeforecallchangeObj()method:"+oRef.aObj);
    oRef.changeObj(oRef.aObj);
    System.out.println("AftercallchangeObj()method:"+oRef.aObj);
    System.out.println("==================PrintPrimtive=================");
    System.out.println("BeforecallchangePri()method:"+oRef.aInt);
    oRef.changePri(oRef.aInt);
    System.out.println("AftercallchangePri()method:"+oRef.aInt);
  }
}
/*RUNRESULT
BeforecallchangeObj()method:initvalue
AftercallchangeObj()method:changedvalue
==================PrintPrimtive=================
BeforecallchangePri()method:11
AftercallchangePri()method:11
*
*/
这段代码的次要部分挪用了两个很邻近的办法,changeObj()和changePri()。独一分歧的是它们一个把对象作为输出参数,另外一个把Java中的基础范例int作为输出参数。而且在这两个函数体外部都对输出的参数举行了修改。看似一样的办法,程序输入的了局却不太一样。changeObj()办法真实的把输出的参数改动了,而changePri()办法对输出的参数没有任何的改动。
从这个例子晓得Java对对象和基础的数据范例的处置是纷歧样的。和C言语一样,当把Java的基础数据范例(如int,char,double等)作为出口参数传给函数体的时分,传进的参数在函数体外部酿成下场部变量,这个部分变量是输出参数的一个拷贝,一切的函数体外部的操纵都是针对这个拷贝的操纵,函数实行停止后,这个部分变量也就完成了它的任务,它影响不到作为输出参数的变量。这类体例的参数传送被称为"值传送"。而在Java顶用对象的作为出口参数的传送则缺省为"援用传送",也就是说仅仅传送了对象的一个"援用",这个"援用"的观点同C言语中的指针援用是一样的。当函数体外部对输出变量改动时,本色上就是在对这个对象的间接操纵。
除在函数传值的时分是"援用传送",在任何用"="向对象变量赋值的时分都是"援用传送"。如:
packagereference;
classPassObj
{
  Stringstr="initvalue";
}
publicclassObjPassValue
{
  publicstaticvoidmain(String[]args)
  {
    PassObjobjA=newPassObj();
    PassObjobjB=objA;
    objA.str="changedinobjA";
    System.out.println("PrintobjB.strvalue:"+objB.str);
  }
}
/*RUNRESULT
PrintobjB.strvalue:changedinobjA
*/
<p>
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-20 22:22:31 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
变相怪杰 该用户已被删除
板凳
发表于 2015-1-25 10:47:30 | 只看该作者
是一种为 Internet发展的计算机语言
不帅 该用户已被删除
地板
发表于 2015-1-29 06:15:43 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
活着的死人 该用户已被删除
5#
发表于 2015-1-31 12:55:02 来自手机 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
谁可相欹 该用户已被删除
6#
发表于 2015-2-6 08:21:21 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
因胸联盟 该用户已被删除
7#
发表于 2015-2-16 00:22:15 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
蒙在股里 该用户已被删除
8#
发表于 2015-2-26 00:32:25 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
乐观 该用户已被删除
9#
发表于 2015-3-8 10:52:09 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
只想知道 该用户已被删除
10#
发表于 2015-3-15 22:00:39 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
小女巫 该用户已被删除
11#
发表于 2015-3-22 05:10:37 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 15:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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