|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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)与这些框架混在了一起。 |
|