构造方法
-
构造方法作用:完成对象的初始化
-
构造方法的使用规则:
a. 方法名与类名相同,参数列表保持一致
b. 没有返回值类型,也没有返回值
代码演示:有参构造器的作用
注意:代码中出现this关键字,后面会详解
这里的作用:区别当前对象的属性和局部变量
public class Demo {
public static void main(String[] args) {
Student student = new Student("smith",66); // 解析:完成对象的初始化
System.out.println(student.name); // 运行结果:smith
System.out.println(student.age); // 运行结果:66
}
}
class Student {
String name;
int age;
public Student(String name,int age) {
this.name = name; // 解析:this.name表示当前对象的属性
this.age = age;
}
}
构造器的基本应用
- jvm在默认情况下,系统自动生成一个“隐式”的无参构造方法,且方法中没有方法体
- 当创建对象时,会执行构造器中的内容
- 当自定义一个构造器时,会覆盖“隐式”的无参构造器
若有参无参构造器都被调用时,需手动添加一个“显式”的无参构造器
代码演示:证明当创建对象时,会执行构造器中的内容
public class Demo1 {
public static void main(String[] args) {
Student student = new Student(); // 运行结果:无参构造器被执行
}
}
class Student {
public Student() {
System.out.println("无参构造器被执行");
}
}
代码演示:有参无参构造器都被调用时,需手动添加一个显式无参构造器
public class Demo {
public static void main(String[] args) {
Student student1 = new Student(); // 解析:创建对象时,调用无参构造器
Student student2 = new Student(23); // 解析:创建对象时,调用有参构造器
}
}
class Student {
int age;
public Student() {
}
public Student(int age) {
System.out.println("有参构造器被执行");
}
}
构造器的流程分析
封装
private关键字
- 表示私有化
- 作用域:仅供本类进行调用
- 使用规则
a. 可修饰变量、方法
b. 不可修饰类(若将类进行私有化,那么其他类就无法创建该类的对象,这样就无意义)
封装的实现步骤
- 对属性进行private修饰
- set方法:用于对属性的判断并赋值
方法的类型是void,参数中的类型与成员变量保持一致 - get方法:用于获取属性值
没有参数列表,但方法的类型与返回值保持一致
特殊情况:设置方法中的赋值属性类型是boolean类型时,那么获取方法名更改为 isXxx(),其他与get方法使用方式相同
代码演示:set方法与get方法
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.name = "小明";
student.setAge(188);
System.out.println(student.name + " " + student.getAge());
/* 运行结果
年龄有误,默认18岁
小明 18
*/
}
}
class Student {
String name;
private int age;
public int getAge() {
if(age > 0 && age < 121) {
return age;
} else {
System.out.println("年龄有误,默认18岁");
return 18;
}
}
public void setAge(int age) {
this.age = age;
}
}
代码演示:构造器与与get方法
public class Test {
public static void main(String[] args) {
Student student = new Student("小明",188);
System.out.println(student.name + " " + student.getAge());
/* 运行结果
年龄有误,默认18岁
小明 18
*/
}
}
class Student {
String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
if(age > 0 && age < 121) {
return age;
} else {
System.out.println("年龄有误,默认18岁");
return 18;
}
}
}