news 2026/7/11 22:24:18

Java面向对象入门:从零搞懂类与对象、封装、this、构造方法,一文掌握Javabean标准写法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java面向对象入门:从零搞懂类与对象、封装、this、构造方法,一文掌握Javabean标准写法

如果你问Java程序员:Java最重要的语法是什么?

十个人里有九个会告诉你:面向对象

没错,面向对象是Java语法的基石。如果这个章节不会,可以说整个Java就炸了——后面的集合、IO、多线程、框架全都学不下去。

很多初学者觉得面向对象很难,因为它太抽象了。但当你真正理解它的本质,会发现它其实很简单:就是把零散的数据组织成一个整体,就像把一堆散件装进一个盒子里。

今天这篇文章,我们就从零开始,彻底搞懂面向对象的核心概念:类与对象、数据安全、this关键字、构造方法,以及标准Javabean类的写法。

一、为什么需要面向对象?

想象一下,你要记录一只小狗的信息:名字、身高、体重、颜色、性别。

如果用最原始的方式,你需要定义5个变量:

String name = "小白"; int height = 30; int weight = 10; String color = "白色"; String gender = "公";

如果只有一只狗,还好。但如果有三只狗呢?

String name1 = "小白", name2 = "小黑", name3 = "小黄"; int height1 = 30, height2 = 35, height3 = 28; int weight1 = 10, weight2 = 12, weight3 = 9; // ... 变量越来越多,越来越乱

问题出在哪里?数据是零散的,变量之间没有关联。

解决问题的思路很简单:把零散的数据封装成一个整体。就像生活中,把散落的物品放进一个包里,以后只需要面对这个包。

在Java中,这个“包”就是对象。而面向对象编程,就是面向一个个完整的对象编程,不再处理零散的数据。

二、类与对象:先有类,后有对象

类的定义

类是对一类事物的统一描述。它规定了这类事物必须包含哪些属性。

public class Dog { String name; // 名字 int age; // 年龄 int weight; // 体重 String color; // 颜色 }

重要:类中只定义属性变量,不赋值。因为类只是描述,不代表具体的某一只狗。如果提前赋值,所有狗都会有这个默认值,不符合现实逻辑。

创建对象

有了类的描述,就可以创建具体的对象了:

// 创建对象语法 Dog d = new Dog(); // 给属性赋值 d.name = "小白"; d.age = 2; d.weight = 10; d.color = "白色";
  • new:Java关键字,开辟一块新内存,创建一个符合类定义的对象

  • d:对象的名字(引用变量)

  • .:调用对象内部的属性或方法

如果有多只狗,重复这个过程即可。

Javabean类和测试类

在Java中,有两种特殊的类:

Javabean类:描述一类事物,不需要main方法。比如Dog、Student、Phone等。

测试类:带有main方法,是程序入口,用于创建Javabean对象并测试功能。

类的行为

类不仅能定义属性,还能定义行为(方法):

public class Teacher { String name; int age; // 行为:授课 public void teach() { System.out.println("老师在授课"); } // 行为:吃饭 public void eat() { System.out.println("老师在吃饭"); } }

注意:Javabean类中的方法不加static关键字。

三、数据安全问题:private关键字

上面的代码有个严重问题:属性是公开的,外部可以直接修改。

Dog d = new Dog(); d.age = -200; // 语法正确,但逻辑错误!年龄不能为负

解决这个问题,需要把属性“藏起来”,只暴露受控的访问方式。这就是封装

private关键字

private是权限修饰符,被它修饰的成员只能在本类内部访问,外部无法直接访问。

public class Dog { private int age; // 私有化,外部不能直接访问 }

get/set方法

私有化后,外部怎么访问?提供公共的get和set方法:

public class Dog { private int age; // set方法:赋值,可以做数据校验 public void setAge(int age) { if (age > 0 && age < 30) { this.age = age; } else { System.out.println("年龄非法!"); } } // get方法:获取值 public int getAge() { return age; } }

测试类中使用:

Dog d = new Dog(); d.setAge(2); // 合法 d.setAge(-200); // 非法,被拦截

数据安全的标准步骤

  1. 所有成员变量都用private修饰

  2. 为每个私有属性提供对应的publicget和set方法

  3. 在set方法中做数据校验

四、this关键字:区分同名变量

在set方法中,我们希望参数名和属性名一致,这样更直观。但问题来了:参数和属性重名了怎么办?

public void setAge(int age) { age = age; // 这是把参数自己赋值给自己,没给属性赋值! }

就近原则

Java在方法中使用变量时,遵循就近原则:优先找方法内的局部变量,找不到才找成员变量。

上面的代码中,两个age都是局部参数,所以age = age毫无意义。

this的作用

this代表当前对象的成员变量。加上this.前缀,就明确指定要访问的是成员变量。

public void setAge(int age) { this.age = age; // 把参数赋值给当前对象的成员变量 }

练习:看代码说结果

public class Student { private int age; public void setAge() { int age = 10; System.out.println(age); // 10(局部变量) System.out.println(this.age); // 0(成员变量,没赋值默认0) } }

五、构造方法:创建对象时直接赋值

用set方法赋值需要多行代码,如果属性很多就很麻烦:

Student s = new Student(); s.setName("张三"); s.setAge(23); s.setHeight(175); s.setWeight(65);

有没有办法在创建对象的同时就把值赋好?

构造方法的定义

构造方法是一种特殊的方法,在创建对象时自动调用,用于给属性初始化。

格式

public 类名(参数列表) { // 赋值逻辑 }

三大特点

  1. 方法名必须和类名完全相同(大小写也要一致)

  2. 没有返回值类型,连void都不能写

  3. 不能使用return返回数据

示例:完整的学生类

public class Student { private String name; private int age; // 无参构造 public Student() { } // 带全部参数的构造 public Student(String name, int age) { this.name = name; this.age = age; } // get/set方法(省略) }

使用:

// 调用无参构造 Student s1 = new Student(); // 调用带参构造,创建对象的同时完成赋值 Student s2 = new Student("张三", 23);

构造方法注意事项

  • 如果没有手动定义任何构造方法,Java虚拟机会自动提供一个默认的无参构造

  • 如果手动定义了任意构造方法,虚拟机就不再提供默认的无参构造

  • 多个构造方法可以构成方法重载(方法名相同,参数列表不同)

开发规范:无论是否用到,都要手动写出无参构造和带全部参数的构造。

六、标准Javabean书写规范

一个完整的标准Javabean必须包含以下5个部分:

  1. 类名见名知意

  2. 所有成员变量都用private修饰

  3. 为每个成员变量提供对应的get和set方法

  4. 手动编写无参构造和带全部参数的构造

  5. 根据需求添加成员方法(不加static)

完整示例:

public class Student { // 1. 属性私有化 private String name; private int age; // 2. 构造方法(无参 + 全参) public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } // 3. get/set方法 public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { if (age > 0 && age < 150) { this.age = age; } } public int getAge() { return age; } // 4. 行为方法(不加static) public void study() { System.out.println(name + "正在学习"); } }

七、总结:面向对象核心要点

概念作用关键点
描述一类事物只定义属性,不赋值
对象具体的事物实例new创建,通过.属性访问
private数据安全成员变量私有化,外部不能直接访问
get/set安全访问set中做数据校验
this区分同名变量代表当前对象的成员变量
构造方法创建对象时赋值方法名同类名,无返回值
Javabean规范标准写法私有属性 + get/set + 无参/全参构造

写在最后

面向对象是Java的灵魂。掌握了今天的内容,你就拿到了面向对象的第一把钥匙。

记住:类是对事物的描述,对象是具体的实例。就像“狗”是一个概念,“小白”才是一只真实的狗。

现在,打开IDEA,按照标准Javabean规范,自己动手写一个学生类吧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/23 13:04:51

Office帮助与学习资料

Word学习资料&#xff1a; 官方帮助 1. Word 2016 微软官方使用文档&#xff1a;Word 帮助和学习。 2. Word 2016 快捷键微软官方&#xff1a;Word 中的键盘快捷方式 - Microsoft 支持 3. Word 2016 自定义快捷键微软官方&#xff1a;自定义键盘快捷键 - Microsoft 支持。 Ex…

作者头像 李华
网站建设 2026/5/22 16:28:17

点云补全模型选型指南:基于Transformer还是图卷积?7种方法对比

点云补全技术选型全景指南&#xff1a;7类核心算法深度解析与实战决策框架 引言&#xff1a;当不完整的点云遇见AI重构艺术 在自动驾驶汽车感知前方障碍物轮廓时&#xff0c;在工业机器人抓取残缺零件时&#xff0c;在AR/VR设备重建真实场景时——点云补全技术正在悄然解决这些…

作者头像 李华
网站建设 2026/3/23 13:03:57

WPF RichTextBox实战:如何打造一个简易的Markdown编辑器(附完整代码)

WPF RichTextBox实战&#xff1a;构建轻量级Markdown编辑器的完整指南 在当今快节奏的开发环境中&#xff0c;Markdown已成为技术文档编写和日常笔记记录的首选标记语言。对于WPF开发者而言&#xff0c;利用RichTextBox控件打造一个专属的Markdown编辑器不仅能提升工作效率&…

作者头像 李华
网站建设 2026/3/23 13:01:34

Origin多因子柱状图:数据可视化中的高效呈现技巧

1. 多因子柱状图的核心价值与应用场景 当你需要同时对比多个变量在不同分组下的表现时&#xff0c;多因子柱状图就是你的最佳选择。这种图表特别适合呈现实验数据中的多维度对比&#xff0c;比如不同药物浓度对细胞存活率的影响&#xff0c;或者不同工艺参数对产品质量的改善效…

作者头像 李华
网站建设 2026/3/23 13:00:23

Clawdbot效果展示:Qwen3-32B支持的多模态代理(图文混合)能力预览

Clawdbot效果展示&#xff1a;Qwen3-32B支持的多模态代理&#xff08;图文混合&#xff09;能力预览 1. 平台概览&#xff1a;统一的AI代理管理体验 Clawdbot是一个专门为开发者设计的AI代理网关与管理平台&#xff0c;它让构建、部署和监控自主AI代理变得前所未有的简单。通…

作者头像 李华
网站建设 2026/3/23 12:59:34

一张图看懂企业私有化AI应用的整体架构

在生成式AI快速落地的今天&#xff0c;越来越多的企业开始思考一个问题&#xff1a; 大模型到底如何变成真正可用、可部署、可交付的业务系统&#xff1f; 很多人看到的是“ChatGPT式对话”&#xff0c;但在企业级场景中&#xff0c;真正支撑智能应用运行的&#xff0c;是一整…

作者头像 李华