函数的调用:
在java中,传参数时都是以值传递方式经行的。基本数据类型都是传递的数据拷贝,引用类型传递的都是引用的拷贝。看看下面这个输出的什么呢?
class StringTest
{
public static void change(int x,int y)
{
x=x+y;
y=x-y;
x=x-y;
}
public static void main(String[] args)
{
int x= 3;
int y= 4;
change(3,4);
System.out.println("x= "+x+" ; y= "+y);
}
}输出结果为x= 3; y= 4 原因就是传递给change(3,4)中的值只是一个拷贝,而并非x和y。所以x和y的值就并没有交换咯。
下面是引用类型值传递:
class StringTest
{
public static void change(int x,int y)
{
x=x+y;
y=x-y;
x=x-y;
}
public static void change(Point pt)
{
pt.x=pt.x+pt.y;
pt.y=pt.x-pt.y;
pt.x=pt.x-pt.y;
}
public static void main(String[] args)
{
Point pt=new Point();
pt.x=3;
pt.y=4;
change(pt);
System.out.println("pt.x= "+pt.x+" ; y= "+pt.y);
}
}
class Point
{
int x;
int y;
} //输出结果是pt.x=4 pt.y=3哦
这时就出现了一个问题,有时候我们需要改变一下某个对象中的变量值,但是又不需要影响对象中值的改变,这时怎么办,你说复制一个对象???可行么?复制一个的话,其实复制的是对象的引用,所以当你更改变量值时原始对象变量值也改变了。这时就需要用到java中的对象克隆clone了。
对象的克隆(clone):
1为了获取对象的一份拷贝,我们可以使用Objeact对象中的clone()方法
2 但是注意在派生类中要覆盖基类中的clone()方法,并申明为public
3 在派生类clone()方法中需要调用super.clone()方法
4 同时需要在派生类中实现Cloneable接口
例如,
class Student
{
String name;
int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}
}
要实现Student类可以复制应该像下面这样:
class Student implements Cloneable //实现Cloneable接口
{
String name;
int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}
//实现clone方法,注意要定义成public哦
public Object clone()
{
Object o=null;
try
{
o.super.clone; //实现super.clone()调用并捕捉异常
}
catch(CloneNotSupportedException e)
{
System.out.println(e.toString());
}
return o;
}
数组的相关操作:
1 java中所有数组都有个默认的属性就是length
2 数组的复制:System.arrrayCopy()方法实现
3 数组的排序:Arrays.sort() 注意:Arrays类在util包中
4 在已排序的数组中查找某个元素:Arrays.binarySearch()
当然,如果你使用System.arrayCopy()复制了一个数组,然后对复制的数组进行更改,原来那个数组相应值也会改变的哦。又回到以前的内容了哈,原因是数组是引用类型,所以复制只是复制的对象引用而已。
在使用Arrays.sort()方法对对象类型排序的时候,该对象类要实现comparable接口,并实现其中的conparayTo()方法。例子请看第四课h。
封装类:第四课h 12853
Class类 第四课I 7186
newInstance()调用类中缺省的构造方法