构造方法:构造函数、构造器、构建器------------复用给成员变量赋值的代码
作用:给成员变量赋初值
规则:
- 与类同名,没有返回值类型(连void都没有)
- 在创建(new)对象时被自动调用
- 若自己不写构造方法,则编译器默认提供一个无参构造方法, 若自己写了构造方法,则不再默认提供
- 否需要参数,是看这个数据是否可以写死,如果不可以,则需要带参
- 构造方法可以重载
this:指代当前对象,哪个对象调用方法它指的就是哪个对象
只能用在方法中
方法中访问成员变量之前默认有个this.
this的用法:
- this.成员变量名--------访问成员变量 --------当成员变量与局部变量同名时,访问成员变量时this不能省略
- this.方法名()----------调用方法(一般不用)
- this()-----------------调用构造方法(一般很少用)
成员变量和局部变量是可以同名的,同名时访问成员变量时this不能省略
使用的时候默认采取的是就近原则
package object_exercise;
public class Student {
String name;
int age;
String address;
//有参的构造方法,给成员变量赋初值,没有返回值,与类同名,有参
Student(String name,int age,String address){
this.name=name;
this.address=address;
this.age=age;
System.out.println("我的家庭住址在"+address+",我今年"+age+"我叫"+name);
}
//构造方法的重写,没有参数
Student(){
System.out.println("我的家庭住址在"+address+",我今年"+age+"我叫"+name);
}
public static void main(String[] args) {
//调用的是有参的构造方法
Student zs=new Student("zs",18,"bj");//此时this指zs
Student ls=new Student("ls",18,"sh");//此时this指ls
//调用的是重写的无参的构造方法,引用的默认值是null,基本类型的默认值是0;
Student ww=new Student();
}
}
上面我们是将代码写在了一个类中,这样做的目的是方便大家去看
正常来讲,代码都要写在两个类中,那么下面我们看一下,分开写是什么样的
首先我们先创建一个Stu类,包含Stu含参的构造方法
package object_exercise;
public class Stu {
String name;
int age;
String address;
Stu(String name,int age,String address){
this.name=name;
this.address=address;
this.age=age;
}
void sayHi(){
System.out.println("我叫"+name+"今年"+age+"家住"+address);
}
}
然后我们在创建一个包含main的Student类,来实例化(new对象)对象,调用Stu的方法
public class Student {
public static void main(String[] args) {
Stu zs=new Stu("zs",18,"bj");//此时this指zs
Stu ls=new Stu("ls",18,"sh");//此时this指ls
zs.sayHi();
ls.sayHi();
}
}
上面两个类实现的效果和在一个类中实现的效果是一样的。
局部变量:属于方法的一般都是局部变量
成员变量:属于类的一半都是成员变量