目录
一、方法参数
1.1 两种参数调用方式
(1)按值调用
按值调用表示方法接受的是调用者提供的值。
(2)按引用调用
方法接受的是调用者提供的变量的地址。
Java使用的是按值调用,方法中使用的是参数值的一个副本,即方法不能修改传递给它的任何参数变量的内容,因为方法操纵的是参数的副本。例如:在tripleValue方法中对x放大三倍,并不返回任何数据。执行这个方法后得到a 的值没有放大三倍。
public class test {
public static void tripleValue(double x) {
x=3*x;
}
public static void main(String[] args) {
double a = 10;
tripleValue(a);
System.out.println(a);
}
}
1.2 注意点:
如果方法传入的参数本身是一个对象的引用,那么这个参数的副本所指向的地址处的对象与原对象是同一对象(因为引用与引用的副本指向的地址相同),此时方法中对参数的修改会影响到原对象。例如:这里tripleSalary接受的参数是一个对象,输出结果中这个对象的salary加了1000。
public class test {
public static void tripleSalary(test t) {
t.salary+=1000;
}
public int salary = 1000;
public void addSalary() {
this.salary+=1000;
}
public static void main(String[] args) {
test t = new test();
tripleSalary(t);
System.out.println(t.salary);
}
}
1.3 总结
(1)方法不能修改基本数据类型的参数
(2)方法可以改变对象参数的状态
(3)方法不能让一个对象参数引用一个新的对象
二、对象构造
当类中不存在其他构造器时,Java会为类提供一个默认的无参构造器。如果在类中写了一个自定义的构造器,java就不会提供默认的构造器,要想允许这个类的用户能够用一下方式构造一个实例:
new ClassName()
我们就必须提供一个无参构造器。
public ClassName()
{
}
2.1 构造器的代码复用
如果构造器的第一个语句是形如this(...),这个构造器就会调用同一个类中的另一个构造器。(通过构造器方法的重载确定调用哪个构造器)。例如:
public Employee(double s)
{
//calls Employee(String, double)
this("EmployeeName",s);
nextId++;
}
通过这种方式,对于公共的构造器代码只需要编写一次即可,从而实现代码复用。