当前位置: 首页 > news >正文

九、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)

构造器是类中一种特殊的方法,作用是创建对象时初始化对象给属性赋值)。

特点:

  1. 构造器名称必须和类名完全相同
  2. 没有返回值(连void都不能写)
  3. 创建对象时自动调用(通过`new`关键字)

分类:

  1. 默认构造器:如果类中没有定义构造器,Java会自动生成一个无参数的默认构造器
  2. 自定义构造器:可以根据需求定义带参数的构造器

示例:

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种用法:

  1. 区分成员变量和局部变量(当两者名称相同时)
  2. 调用当前类的其他构造器(必须放在构造器的第一行)
  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)

封装是面向对象的三大特性之一,核心思想是"隐藏内部细节,提供公共访问方式"目的是保护数据安全性。

实现步骤:

  1. `private`修饰属性(私有属性,只能在本类中访问
  2. 提供`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是一种符合特定规范的类,通常用于封装数据(比如存储数据库查询结果)。

规范:

  1. 必须是`public`
  2. 属性必须是`private`
  3. 必须提供无参数的构造器
  4. 必须为每个属性提供`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. 静态属性(类变量)

  1. static修饰,属于类
  2. 被所有对象共享,只有一份内存空间
  3. 可以通过`类名.静态变量名`直接访问(无需创建对象)
  4. 在自己类中的类变量,可以省略类名不写(在某个类中访问其他类的类变量时,必须带类名访问)

2. 实例变量(对象变量)

  • static修饰,属于每个对象
  • '对象名.实例变量名'访问

3. 静态方法(类方法)

  1. 属于类,可通过`类名.静态方法名`直接调用
  2. 静态方法中不能直接访问非静态成员(因为非静态成员属于对象,而静态方法调用时可能没有对象)
  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成员属于类,优先于对象存在,适合定义"所有对象共享的数据"
    • 应用场景:做工具类,提高代码复用率,调用方便(建议在用的时候进行私有化)。

    总结

    1. 是模板,对象是类的具体实例
    2. 构造器用于初始化对象,名称与类名相同
    3. this代表当前对象,用于区分变量、调用构造器等
    4. 封装通过privategetter/setter保护数据
    5. JavaBean是符合规范的封装类,用于存储数据
    6. static修饰的成员属于类,所有对象共享,可直接通过类名访问
    http://www.lryc.cn/news/626416.html

    相关文章:

  • rsync 工具
  • Linux 文本处理三剑客:awk、grep、sed 完全指南
  • Redis 安装教程
  • Linux的i节点(inode) 和 数据块(Block)相关操作详解
  • 中小型企业是否需要使用高防服务器
  • 服务器硬件电路设计之 SPI 问答(三):SPI 信号完整性守护与时钟频率的硬件设计羁绊
  • 阿里云ECS服务器的公网IP地址
  • 服务器硬件电路设计之 SPI 问答(一):解密 SPI—— 从定义到核心特性
  • 对称加密算法
  • TDengine IDMP 运维指南(数据导入导出)
  • AI大模型×政务热线:数造科技打造企业动态画像的“实时监测引擎”
  • 【自记】Power BI 中 DISTINCT 和 ALLNOBLANKROW 的区别说明
  • Java:将视频上传到腾讯云并通过腾讯云点播播放
  • 通过uniapp将vite vue3项目打包为android系统的.apk包,并实现可自动升级功能
  • 【考研408数据结构-04】 栈与队列:受限的线性表
  • CentOS7.9中安装Harbor以及配置https
  • 【Linux】系统部分——磁盘存储结构与文件系统
  • 初试Docker Desktop工具
  • 如何能成功在centos7下安装nodejs18+以上版本
  • TDengine IDMP 运维指南(5. 使用 Helm 部署)
  • 不止效率工具:AI 在创意领域的 “叛逆生长”—— 从文案生成到艺术创作的突围
  • 关于AKShare接口数据,快速查询命令大全
  • 从基础到本质:文件 IO 操作全解析
  • Deepresearch Agents:下一代自动研究智能体的架构革命与产业实践
  • 源码编译部署 LAMP 架构详细步骤说明
  • 中金所股指期货交易规则
  • 微算法科技(NASDAQ: MLGO)引入高级区块链DSR算法:重塑区块链网络安全新范式
  • 从零开始的云计算生活——第四十七天,细水长流,kubernetes模块之ingress资源对象
  • day075-MySQL数据库服务安装部署与基础服务管理命令
  • ROADS案例实践:制造业的设备物联网与预测性维护