一、构造方法
1、方法名称必须与类名一致;
2、Java默认提供一个没有参数的构造方法,会将参数自动赋值为0;
3、只有在创建对象的时候才能调用构造方法,作用:给对象的属性初始化;
4、当类中有了带参数的构造方法后,无参的构造方法就失效了;
格式:
public void 类名(参数类型 参数名,....){
方法体
}
int age;
//无参构造方法
public People() {
System.out.println("对象创建了...");
}
//有参数的构造方法
public People(int age) {
this.age = age;
}
tips:
可以在eclipse中 右键->source->Generate Constructor using fields 一次性生成构造方法。

二、传值和传引用
基本类型:int float double long short boolean char byte 存储的是具体的值
引用类型:类、接口、数组 存储的是能找到对象的引用
首先,来看一下Java中的值传递。
People.java
public class People {
int age;
public People(int age) {
this.age = age;
}
public static void main(String[] args) {
People p = new People(10);
Change c = new Change();
System.out.println(p.age);
c.changeAge(p.age);
System.out.println(p.age);
}
}
Change.java
public class Change {
public void changeAge(int age) {
age = 20;
}
public void changePeople(People p) {
p.age = 30;
}
}
Pepole类里面有个属性age,创建一个People对象时,将age赋为10,接着调用Change类中的changeAge()方法来修改p.age的值。
猜一下最终运行的结果是什么?
p.age的值是10还是30?
没错,p.age的值还是10,没有发生改变,这是为什么呢,我们刚刚不是调用了changeAge()方法修改了p.age的值吗?
来看一下刚刚这个过程发生了什么:
首先 p.age = 10;
接着将p.age的值赋值给了age
age = p.age = 10;
此时这里
public void changeAge(int age) {
age = 20;
}
修改的是age的值,
p.age = 10;
age = 20;
所以打印更改前后p.age的值都是10没有发生改变。

接着,来看一下Java中的引用传递
public class People {
int age;
public People(int age) {
this.age = age;
}
public static void main(String[] args) {
People p = new People(10);
Change c = new Change();
System.out.println(p.age);
c.changePeople(p);
System.out.println(p.age);
}
}
public class Change {
public void changeAge(int age) {
age = 20;
}
public void changePeople(People p1) {
p1.age = 30;
}
}
上面说过,引用类型,存储的是能找到对象的引用



对象p创建时,存储了一个引用值指向age,
在changePeople()方法中,p的值赋值给了p1
即p1获得了与p相同的引用值,也指向了age=10;
接着,该方法对p.age进行了修改,变成了30
