1.方法参数
方法参数有两种类型:基本数据类型(数字、布尔值),对象引用。
将参数传递给方法有两种方式:
按值调用:方法接收的是调用者提供的值。
按引用调用:方法接收的是调用者提供的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
Java程序设计语言总是按值调用。方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容。举例:
//方法参数的类型是基本数据类型
public static void tripleValue(double x) {
x = 3 * x;
}
double percent = 10;
tripleValue(percent);
//percent的值还是为10
//方法参数的类型是对象引用
public static void raiseSalary(Employee x) {
x.salary += 200;
}
harry = new Employee(...);
raiseSalary(harry);
//harry对象的薪水提升了200元
有人认为Java对对象采用的是引用调用,其实是不对的。举例:
public static void swap(Employee x, Employee y) {
Employee temp = x;
x = y;
y = temp;
}
Employee a = new Employee("Alice", ...);
Employee b = new Employee("Bob", ...);
swap(a, b);
//最终a和b仍然引用之前所引用的对象。
如果Java对对象采用的是按引用调用,那么这个方法就应该能够实现交换数据的效果。事实上,并没有实现这个效果。
总结----Java中方法参数的使用情况:
- 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
- 一个方法可以改变一个对象参数的状态。(修改对象的属性)。
- 一个方法不能让对象参数引用一个新的对象。
- Java中基本数据类型参数传递是值传递,对象和数组传递的是地址。
2.对象构造
重载:多个方法有相同的名字、不同的参数,便产生了重载。
返回类型不是方法签名的一部分。也就是说,不能有两个名字相同、参数类型也相同却返回不同类型值的方法。
关键字this:如果构造器的第一个语句形如this(...),那么将调用同一个类的另一个构造器。
public Employee(double s) {
this("Employee #" + nextId, s);
}
初始化块:在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。(static域时常使用)
无论使用哪个构造器构造对象,首先运行代码块,然后才运行构造器的主体部分。
对象回收:Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。
某些对象,使用了内存之外的其他资源,当资源不再需要时,将其回收和再利用将显得十分重要。
可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。(不要依赖于使用finalize方法回收任何短缺的资源)。
如果某个资源需要在使用完毕后立刻被关闭,那么就需要由人工来管理。对象用完时,可以应用一个close方法来完成相应的清理操作。
网友评论