九、Java类核心语法:构造器、this、封装与static详解
Java中类的基础语法:构造器、this关键字、封装、JavaBean和static关键字。
目录
一、类的基础语法
二、构造器(Constructor)
三、this关键字
四、封装(Encapsulation)
五、JavaBean
六、static关键字
总结
一、类的基础语法
类是Java中最基本的组成单位,可以理解为"模板",用来描述一类事物的共同特征(属性)和行为(方法)。
基本结构:
// 类的定义:class 类名 { ... }
public class 类名 {// 1. 属性(成员变量):描述事物的特征数据类型 属性名1;数据类型 属性名2;// 2. 方法:描述事物的行为方法返回值类型 方法名(参数列表) {// 方法体}
}
示例:定义一个"学生"类
// 学生类(模板)
public class Student {// 属性(特征):姓名、年龄、学号String name; // 姓名int age; // 年龄String id; // 学号// 方法(行为):学习、吃饭public void study() {System.out.println(name + "在学习");}public void eat() {System.out.println(name + "在吃饭");}// 主方法(程序入口)public static void main(String[] args) {// 创建对象(用类模板实例化一个具体的学生)Student stu = new Student();// 给对象的属性赋值stu.name = "小明";stu.age = 18;stu.id = "2023001";// 调用对象的方法stu.study(); // 输出:小明在学习stu.eat(); // 输出:小明在吃饭}
}
二、构造器(Constructor)
构造器是类中一种特殊的方法,作用是创建对象时初始化对象(给属性赋值)。
特点:
- 构造器名称必须和类名完全相同
- 没有返回值(连void都不能写)
- 创建对象时自动调用(通过`new`关键字)
分类:
- 默认构造器:如果类中没有定义构造器,Java会自动生成一个无参数的默认构造器
- 自定义构造器:可以根据需求定义带参数的构造器
示例:
public class Student {String name;int age;// 1. 无参数构造器(默认构造器的自定义形式)public Student() {System.out.println("无参构造器被调用了");}// 2. 带参数的构造器(初始化name和age)public Student(String n, int a) {name = n; // 给属性赋值age = a;System.out.println("带参构造器被调用了");}public static void main(String[] args) {// 调用无参构造器创建对象Student stu1 = new Student(); // 输出:无参构造器被调用了// 调用带参构造器创建对象(同时完成初始化)Student stu2 = new Student("小红", 17); // 输出:带参构造器被调用了System.out.println(stu2.name); // 输出:小红}
}
注意:
- 如果定义了自定义构造器,Java就不会再生成默认构造器了,如需使用无参构造器需手动定义。
- 有参/无参构造器建议:要么全写,要么全不写。
小窍门:
快速生成有参/无参构造器:(快捷键Alt+Enter:快速生成方法)
1)右击鼠标->生成
2)点击构造函数
3)选中你所要构造的函数->确定即可
三、this关键字
`this`代表当前对象(当前正在操作的对象)
主要有3种用法:
- 区分成员变量和局部变量(当两者名称相同时)
- 调用当前类的其他构造器(必须放在构造器的第一行)
- 作为方法的返回值(返回当前对象)
示例:
public class Student {String name;int age;// 构造器中使用this区分成员变量和参数(局部变量)public Student(String name, int age) {this.name = name; // this.name指成员变量,name指参数(局部变量)this.age = age;}// 无参构造器调用带参构造器(this())public Student() {this("默认姓名", 0); // 调用上面的带参构造器,必须放第一行}// 方法中返回当前对象public Student setAge(int age) {this.age = age;return this; // 返回当前对象}public static void main(String[] args) {Student stu = new Student();System.out.println(stu.name); // 输出:默认姓名Student stu2 = new Student("小李", 20);stu2.setAge(21); // 调用方法后返回对象本身System.out.println(stu2.age); // 输出:21}
}
四、封装(Encapsulation)
封装是面向对象的三大特性之一,核心思想是"隐藏内部细节,提供公共访问方式",目的是保护数据安全性。
实现步骤:
- 用`private`修饰属性(私有属性,只能在本类中访问)
- 提供`public`的`getter`方法(获取属性值)和`setter`方法(修改属性值)
示例:
public class Student {// 1. 私有属性(外部不能直接访问)private String name; // private:私有private int age;// 2. getter方法(获取name的值)public String getName() {return name;}// 3. setter方法(设置name的值,可添加验证逻辑)public void setName(String name) {// 比如:姓名不能为null或空字符串if (name != null && !name.isEmpty()) {this.name = name;} else {System.out.println("姓名输入无效");}}// age的getter和setterpublic int getAge() {return age;}public void setAge(int age) {// 比如:年龄必须在0-150之间if (age >= 0 && age <= 150) {this.age = age;} else {System.out.println("年龄输入无效");}}public static void main(String[] args) {Student stu = new Student();// stu.name = "小刚"; // 错误!private属性不能直接访问stu.setName("小刚"); // 通过setter设置值stu.setAge(200); // 输出:年龄输入无效(验证生效)System.out.println(stu.getName()); // 通过getter获取值:小刚}
}
好处:可以在setter中添加验证逻辑,防止不合理的数据存入,保证数据安全。
五、JavaBean
JavaBean是一种符合特定规范的类,通常用于封装数据(比如存储数据库查询结果)。
规范:
- 类必须是`public`的
- 属性必须是`private`的
- 必须提供无参数的构造器
- 必须为每个属性提供`public`的`getter`和`setter`方法
示例:一个标准的JavaBean
// 学生信息JavaBean
public class StudentBean {// 1. 私有属性private String name;private int age;private String id;// 2. 无参数构造器(必须有)public StudentBean() {}// 3. 全参数构造器(可选,方便初始化)public StudentBean(String name, int age, String id) {this.name = name;this.age = age;this.id = id;}// 4. 所有属性的getter和setterpublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}
}
小窍门:
快速生成`getter`和`setter`方法:
1)右击鼠标->生成
2)点击“Getter和Setter”
3)选中所要生成的字段->确定即可
JavaBean在实际开发中非常常用,比如前后端数据传输、存储数据库记录等。
六、static关键字
`static`(静态)可以修饰属性、方法、代码块等,被static修饰的成员属于类,而不属于某个对象(所有对象共享)。
1. 静态属性(类变量)
- 有static修饰,属于类
- 被所有对象共享,只有一份内存空间
- 可以通过`类名.静态变量名`直接访问(无需创建对象)
- 在自己类中的类变量,可以省略类名不写(在某个类中访问其他类的类变量时,必须带类名访问)
2. 实例变量(对象变量)
- 无static修饰,属于每个对象
- 用'对象名.实例变量名'访问
3. 静态方法(类方法)
- 属于类,可通过`类名.静态方法名`直接调用
- 静态方法中不能直接访问非静态成员(因为非静态成员属于对象,而静态方法调用时可能没有对象)
- 静态方法中不能使用this关键字(this代表对象,静态方法属于类)
4. 实例方法(对象方法)
- 通过'对象名.实例方法名'调用
注意事项:
示例:
public class Student {String name; // 非静态属性(每个对象单独拥有)static String school; // 静态属性(所有对象共享,属于类)// 静态方法public static void showSchool() {// System.out.println(name); // 错误!静态方法不能直接访问非静态属性System.out.println("学校:" + school); // 可以访问静态属性}// 非静态方法public void showName() {System.out.println("姓名:" + name);System.out.println("学校:" + school); // 非静态方法可以访问静态属性}public static void main(String[] args) {// 访问静态属性:类名.属性名Student.school = "阳光中学";Student stu1 = new Student();stu1.name = "小张";Student stu2 = new Student();stu2.name = "小王";// 两个对象共享同一个schoolstu1.showName(); // 姓名:小张;学校:阳光中学stu2.showName(); // 姓名:小王;学校:阳光中学// 调用静态方法:类名.方法名Student.showSchool(); // 学校:阳光中学}
}
static修饰成员变量的执行原理:
- static成员属于类,优先于对象存在,适合定义"所有对象共享的数据"。
- 应用场景:做工具类,提高代码复用率,调用方便(建议在用的时候进行私有化)。
总结
- 类是模板,对象是类的具体实例
- 构造器用于初始化对象,名称与类名相同
- this代表当前对象,用于区分变量、调用构造器等
- 封装通过private和getter/setter保护数据
- JavaBean是符合规范的封装类,用于存储数据
- static修饰的成员属于类,所有对象共享,可直接通过类名访问