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

Java SE:类与对象的认识

Java中的类与对象:构建程序世界的基石

在Java编程的世界里,类与对象是面向对象编程(OOP)的核心概念,它们就像构建大厦的砖瓦,支撑起整个程序的结构。理解类与对象,是掌握Java编程的关键一步。

类:对象的模板

类是对一类事物的抽象描述,它定义了这类事物所具有的属性和行为。比如说,我们可以定义一个“汽车”类,这个类就包含了汽车的属性,像颜色、品牌、型号等,还有汽车的行为,比如启动、加速、刹车等。

类的定义包含两个主要部分:成员变量(属性)和成员方法(行为)。成员变量用于描述对象的状态,成员方法用于描述对象的操作。例如,定义一个“Person”类:

public class Person {// 成员变量(属性)String name;int age;String gender;// 成员方法(行为)public void eat() {System.out.println(name + "在吃饭");}public void sleep() {System.out.println(name + "在睡觉");}
}

在这个“Person”类中,name、age、gender是成员变量,代表了人的姓名、年龄和性别这些属性;eat()和sleep()是成员方法,代表了人吃饭和睡觉这些行为。

对象:类的实例化

对象是类的具体实例,是根据类这个模板创建出来的具体事物。如果说类是“汽车设计图”,那么对象就是根据设计图制造出来的“具体汽车”。

在Java中,创建对象需要使用new关键字。例如,根据上面的“Person”类创建对象:

public class Main {public static void main(String[] args) {// 创建Person类的对象Person person1 = new Person();// 给对象的属性赋值person1.name = "张三";person1.age = 20;person1.gender = "男";// 调用对象的方法person1.eat();person1.sleep();Person person2 = new Person();person2.name = "李四";person2.age = 25;person2.gender = "女";person2.eat();person2.sleep();}
}

在这段代码中,person1和person2都是“Person”类的对象。我们通过“对象名.属性名”的方式给对象的属性赋值,通过“对象名.方法名()”的方式调用对象的方法。运行这段代码,会输出:

张三在吃饭
张三在睡觉
李四在吃饭
李四在睡觉

类与对象的关系

类和对象是相互依存的关系。类是对象的抽象,它规定了对象所具有的属性和行为;而对象是类的具体实现,一个类可以创建出多个不同的对象,这些对象都具有类中定义的属性和行为,但属性的值可能不同。

就像“Person”类可以创建出“张三”“李四”等多个不同的人对象,他们都有人的姓名、年龄等属性和吃饭、睡觉等行为,但具体的姓名、年龄等数值却各不相同。

补充知识:this关键字、构造函数与包

this关键字

在Java中,this关键字是一个非常重要的引用,它代表当前对象本身。主要有以下几种常见用法:

  1. 区分成员变量和局部变量:当方法中的局部变量与类的成员变量同名时,使用this可以明确表示是访问成员变量。例如:
public class Person {String name;public void setName(String name) {this.name = name; // this.name表示成员变量,name表示局部变量}
}
  1. 调用类中的其他方法:可以在一个成员方法中使用this调用本类的其他成员方法,通常可以省略this,但在某些情况下为了清晰表达会显式写出。例如:
public class Person {public void eat() {System.out.println("吃饭");}public void dinner() {this.eat(); // 调用本类的eat()方法}
}
  1. 调用类的构造函数:在构造函数中,可以使用this(参数列表)来调用本类的其他构造函数,且必须放在构造函数的第一行。

构造函数

构造函数是一种特殊的方法,它的名称与类名完全相同,且没有返回值类型(包括void也不能有)。构造函数的主要作用是在创建对象时初始化对象的属性。

  1. 默认构造函数:如果一个类中没有显式定义任何构造函数,Java编译器会自动为该类生成一个无参的默认构造函数。例如:
public class Person {// 没有显式定义构造函数,编译器会生成默认无参构造函数
}
  1. 自定义构造函数:我们可以根据需求自定义构造函数,实现对象属性的初始化。例如:
public class Person {String name;int age;// 无参构造函数public Person() {}// 有参构造函数,初始化name属性public Person(String name) {this.name = name;}// 有参构造函数,初始化name和age属性public Person(String name, int age) {this.name = name;this.age = age;}
}

当创建对象时,会根据传入的参数自动调用对应的构造函数:

Person person1 = new Person(); // 调用无参构造函数
Person person2 = new Person("张三"); // 调用单参构造函数
Person person3 = new Person("李四", 25); // 调用双参构造函数

包(Package)是Java中用于组织类和接口的一种机制,它的主要作用是避免类名冲突,同时便于对类进行分类管理。

  1. 包的声明:在Java源文件的第一行,使用package关键字声明该类所在的包,格式为package 包名;。包名通常采用小写字母,一般按照公司域名的反写来命名,例如com.example.demo

  2. 导入包中的类:当需要使用其他包中的类时,需要使用import关键字导入该类。例如,要使用java.util包中的ArrayList类,可以这样导入:

import java.util.ArrayList;

如果需要导入一个包中的所有类,可以使用*通配符,例如import java.util.*;

  1. 包的访问权限:类中的成员(成员变量和成员方法)的访问权限会受到包的影响。被default(默认,即不写访问修饰符)修饰的成员,只能被同一个包中的类访问。

总结

类与对象是Java面向对象编程的基础,类定义了对象的蓝图,对象是类的具体体现。而this关键字、构造函数和包则是在类与对象的基础上,为Java编程提供了更灵活、更规范的实现方式。通过类与对象的封装,以及这些补充知识的运用,我们可以将数据和操作数据的方法结合在一起,提高代码的复用性和可维护性。

在实际的Java编程中,我们会大量使用类与对象来构建程序,理解并熟练运用它们以及相关知识,是成为一名优秀Java程序员的必经之路。

http://www.dtcms.com/a/294397.html

相关文章:

  • 【kubernetes】-3 pod基础和yaml文件
  • 记录一本设计模式的书
  • vue3与ue5通信-工具类
  • [C/C++内存安全]_[中级]_[安全处理字符串]
  • ctfshow pwn40
  • 保护板测试仪:守护电池安全的“幕后卫士”
  • 关于SPring基础和Vue的学习
  • Docker 容器中的 HEAD 请求缺失 header?从 Content-MD5 缺失聊起
  • 超声原始数据重构成B扫成像的MATLAB实现
  • 【AI News | 20250722】每日AI进展
  • now能减少mysql的压力吗
  • 【Android】用 ViewPager2 + Fragment + TabLayout 实现标签页切换
  • linux性能调整和故障排查
  • LeetCode热题100--24. 两两交换链表中的节点--中等
  • Linux文件——Ext2文件系统(3)_软硬链接
  • Ubuntu 1804 编译ffmpeg qsv MediaSDK libva 遇到的问题记录
  • #Linux内存管理# 详细介绍madvise函数的工作原理
  • Elasticsearch(ES)安装
  • 分布式电商系统:缓存策略、负载均衡与容灾方案
  • 解决 Electron 中 window.open 打开新窗口的各种“坑”
  • Python 程序设计讲义(6):Python 的基本用法——运算符与表达式
  • API 汇总:ONLYOFFICE 文档最近更新
  • 背包DP之0/1背包
  • 11-1 浅层神经网络及计算前向传播
  • 局部重要性注意力LIA,通过区域重要性图与门控机制实现高阶信息交互,自适应增强有用特征、抑制冗余信息,平衡模型性能与效率。
  • VR-Doh: 革新3D建模的虚拟现实体验
  • DPVR亮相青岛品牌日,崂山科创力量引领AI眼镜新浪潮
  • 基于PLC的轨检小车控制器设计
  • .NET-键控服务依赖注入
  • 【实战】Dify从0到100进阶--文档解读(13)API前端再开发