走进Java:类和对象的初步理解

ops/2025/3/14 17:47:20/

一、类和对象的引出

对于Java初学者来说,类和对象是一个有些不太好理解的知识点,在学习类和对象之前,会接触到Java中的八大基本数据类型。

数据类型分类数据类型名称关键字占用字节数取值范围
整数类型字节型byte1 字节-128 到 127
短整型short2 字节-32768 到 32767
整型int4 字节-2147483648 到 2147483647
长整型long8 字节-9223372036854775808 到 9223372036854775807
浮点类型单精度浮点型float4 字节
双精度浮点型double8 字节
字符类型字符型char2 字节0 到 65535
布尔类型布尔型boolean没有明确的字节规定,通常认为是 1 位true 或 false

在之前的学习过程中,更多的情况是接触以上一些数据类型,比如我们在定义一个年龄的时候,就会这样去写。 就会使用熟悉的int变量。

java">        int age = 18

如果要定义一个身高,就会这样去定义。

java">        double height = 180.5

以上就是一些基本类型变量的定义方式,在没有学习类和对象之前,所有的变量定义像是一种临时的,没有归属的,只知道要定义一个年龄,要定义一个身高,所以还要区分是谁的身高,是谁的年龄。可以这样去考虑,要区分谁的身高谁的年龄还不简单,直接定义张三的身高和年龄,然后定义李四的身高和年龄,就像下边的代码。

java">        // 定义一个age 值为18int zhangsan_age = 18;// 定义身高 值为180.5double zhangsan_height = 180.5;int lisi_age = 18;double lisi_height = 179.2;            

嗯,挺聪明的,这确实是一种解决问题的方式,好了,现在一共有十个人,他们是同一个省,同一个市,同一个县,同一个村的人,分别定义他们的姓名,省份,城市,县区和村镇,来尝试一下。

java">        String name = "喜羊羊";String first_province = "动画省";String first_city = "喜羊羊与灰太狼市";String first_conty = "青青草原区";String first_village = "羊村";String second_name = "美羊羊";String second_province = "动画省";String second_city = "喜羊羊与灰太狼市";String second_conty = "青青草原区";String second_village = "羊村";/*·····························*/    

还可以,除了有点累,其他的没什么,还是一样可以写出来的。现在有这样的两个问题。

  1. 在代码当中,这样子去定义这么多人是不是有点繁琐
  2. 这么多人,很多信息是一样的,这样子去定义是不是太冗余

这么多的信息,我们是不是不需要去定义呢?我们是不是可以直接默认所有人的地区信息是一样的呢?当然是可以的,这种情况下就要使用到类和对象了。

二、类和对象

类是一个模板,对象是模板创建出来的变量,就像之前定义年龄的时候使用int,定义对象可以通过类。类和对象就可以解决之前提出的两个问题。

为什么说类是模板?看如下代码。

java">public class Person {public String name;public String province = "动画省";public String city = "喜羊羊与灰太狼市";public String county = "青青草原区";public String village = "羊村";
}

在上边的代码当中,Person作为类,类中定义了一些变量,这些变量部分有自己的默认值,也就是所有人的地区信息,不难发现除了name没有赋值外,其他的属性已经全部赋值了。

两个问题的解决

当定义出Person类的时候,在创建十个人的信息,代码就会变成下方的样子。有没有发现代码量减少了很多,没有之前那么繁琐。并且我们这样的代码并没有之前那样冗余,没有在去写所有人的地址信息。

java">public static void main(String[] args) {Person p1 = new Person();p1.name = "喜羊羊";Person p2 = new Person();p2.name = "沸羊羊";Person p3 = new Person();p3.name = "美羊羊";/*······················*/}

那么类和对象到底该如何理解呢?一定要记住这句话:类是模板,对象是由模板创造出的。

在上方的Person模板中,有姓名和地区信息,地区是有默认值的,名字是没有默认值的,p1,p2,p3在创建的时候已经有了模板中的属性,对于地区信息直接使用默认值就可以,姓名需要在重新定义。

 现在可以大概了解,什么是类和对象了。

对象的创建是通过new关键字来创建的,一般是这种方式。

java">类名 对象名 = new 类名();

三、属性和行为

了解完类和对象就要了解类和对象中的属性和行为。

  • 属性:属性是类中包含的一些信息,如同人员中的姓名和地区信息,也就是这个对象通过类这个模板创建出来的时候包含那些信息。
  • 行为:行为就是对象可以完成的动作或者一个过程。

举个例子,美羊羊最后选择了和喜羊羊在一起,沸羊羊就会很伤心,他向羊村居委会提交了自己的迁移申请,他要自己出去住,去一个没有美羊羊的世界。那么沸羊羊就不在是羊村的人了,他选择加入老虎一族,去到了虎村。沸羊羊这个对象会通过行为修改自己的属性。

java">public class Person {public String name;public String province = "动画省";public String city = "喜羊羊与灰太狼市";public String county = "青青草原区";public String village = "羊村";// 修改村地址的行为public void changeVillage(String village){this.village = village;}
}

这个动作是沸羊羊完成的。

java">    public static void main(String[] args) {Person p1 = new Person();p1.name = "喜羊羊";Person p2 = new Person();p2.name = "沸羊羊";Person p3 = new Person();p3.name = "美羊羊";System.out.println("喜羊羊的村地址是:" + p1.village);System.out.println("沸羊羊的村地址是:" + p2.village);System.out.println("美羊羊的村地址是:" + p3.village);System.out.println("喜羊羊和美羊羊在一起了,沸羊羊搬了出去······");System.out.println("沸羊羊去了虎村");p2.changeVillage("虎村");System.out.println("沸羊羊的村地址是:" + p2.village);/*······················*/}

 这就是对象的一种行为,对象可以通过行为获取和修改类中的属性。

对象可以通过行为获取属性,在哪里体现?在上方的代码中是通过.来获取的属性,这得益于我们在类中定义这些属性的时候,使用的是public类型的变量,如果修改为private后,就不可以在通过.的方式来获取对象属性的值了,public和private的知识这里先不讲。

我们可以这样修改上方的代码。

java">public class Person {public String name;public String province = "动画省";public String city = "喜羊羊与灰太狼市";public String county = "青青草原区";public String village = "羊村";// 修改村地址的行为public void changeVillage(String village){this.village = village;}public String getVillage(){return this.village;}
}
java">public static void main(String[] args) {Person p1 = new Person();p1.name = "喜羊羊";Person p2 = new Person();p2.name = "沸羊羊";Person p3 = new Person();p3.name = "美羊羊";System.out.println("喜羊羊的村地址是:" + p1.getVillage());System.out.println("沸羊羊的村地址是:" + p2.getVillage());System.out.println("美羊羊的村地址是:" + p3.getVillage());System.out.println("喜羊羊和美羊羊在一起了,沸羊羊搬了出去······");System.out.println("沸羊羊去了虎村");p2.changeVillage("虎村");System.out.println("沸羊羊的村地址是:" + p2.getVillage());/*······················*/}

结果还是一样的。

对象的属性和行为都是通过  .  来访问的。

行为不止可以修改对象属性,行为可以完成一些很复杂的事情。沸羊羊不仅可以更换村落,还可以找喜羊羊单挑,夺回美羊羊。至于在夺回美羊羊之前做了什么,我们就并不知道了,行为也可以理解为是对一件事情的封装,看下边的过程。我们只知道沸羊羊夺回了美羊羊,但我们看不到沸羊羊的努力,就像你的舍友期末说只看了一点点,但是最后考的90分那样子。舍友的行为是可见的,但是完成行为的过程是不可见的。


http://www.ppmy.cn/ops/165724.html

相关文章

若依-导出后端解析

针对若依框架微服务版本学习 若依导入导出功能的具体使用详见:后台手册 | RuoYi 1.导出逻辑: 导出文件的逻辑是先创建一个临时文件,等待前端请求下载结束后马上删除这个临时文件。但是有些下载插件,例如迅雷(他们是二…

奥威BI多数据源融合分析

在当今数字化时代,企业数据如同宝藏,而如何有效挖掘并利用这些宝藏,则成为了每个企业都必须面对的挑战。BI(商业智能)数据可视化分析正是解决这一挑战的关键技术之一。在众多BI数据可视化工具中,奥威BI以其…

Python 数据可视化

Python 提供了多种强大的库用于数据可视化,常用的库包括 Matplotlib、Seaborn、Plotly、Pandas 和 Bokeh 等。以下是这些库的简介和一些常见的数据可视化示例。 1. Matplotlib Matplotlib 是 Python 中最常用的绘图库,提供了类似 MATLAB 的绘图接口。 …

Centos 7 在线磁盘扩容

lsblk df -Th 查看磁盘信息 df -Th 1 查看物理卷 pvs 或者 pvdisplay 或者 pvscan [rootoracledb Thu Mar 13 13:53:44 /]# pvs PV VG Fmt Attr PSize PFree /dev/sda3 centos lvm2 a-- <237.28g 0 /dev/sdb1 centos lvm2 a-- <1…

小米路由器SSH下安装DDNS-GO

文章目录 前言一、下载&#xff06;安装DDNS-GO二、配置ddns-go设置开机启动 前言 什么是DDNS&#xff1f; DDNS&#xff08;Dynamic Domain Name Server&#xff09;是动态域名服务的缩写。 目前路由器拨号上网获得的多半都是动态IP&#xff0c;DDNS可以将路由器变化的外网I…

双周报Vol.67: 模式匹配支持守卫、LLVM 后端发布、支持 Attribute 语法...多项核心技术更新!

2025-03-10 语言更新 模式匹配支持守卫&#xff08;Pattern Guard&#xff09; 模式守卫可以通过在模式后追加 if ... 的语法结构来指定。有模式守卫的分支只有在被模式匹配的值满足对应模式&#xff0c;并且模式守卫为真的情况下才会执行。如果模式守卫为假&#xff0c;则会…

自动同步多服务器下SQL脚本3.0

由于上一版发现数据库【MySQL】不支持DML事务回滚&#xff0c;该迭代主要是去兼容这种问题。 数据表新增一个completed字段&#xff0c;用来表示当前版本下同步成功的个数。 数据表 CREATE TABLE auto_sql_version (id int NOT NULL AUTO_INCREMENT,version varchar(20) CH…

⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具

简介&#xff1a;一个能够通过JSON配置&#xff08;特定的语法&#xff09;来处理复杂数据转换的工具。 比如将API响应转换为内部系统所需的格式&#xff0c;或者处理来自不同来源的数据结构差异。例如&#xff0c;将嵌套的JSON结构扁平化&#xff0c;或者重命名字段&#xff0…