【一步一步了解Java系列】:类与对象的联系

看到这句话的时候证明:此刻你我都在努力
加油陌生人
微信图片编辑_20240229212205.png
个人主页:Gu Gu Study
专栏:一步一步了解Java

喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹


喜欢的话可以点个赞谢谢了。
作者:小闭


对象

Java中的对象是什么呢?显然不是我们现实生活中的对象。
emmm,在Java中有这么一句话,Java中任何东西皆可为对象,猫,狗,人,猴,洗衣机,手机,电脑,键盘等等。
Java中是一个面向对象的语言,对比C语言有什么不同呢?
我们举一个简单的例子,现在我们要用代码写出一个求阶乘的方法,C语言中叫函数,Java叫方法.。
C语言:C语言中会直接写出一个函数这个函数就是求阶乘的代码作为一个函数。
Java:首先他会先找一个对象,比如上方中是谁要求阶乘,比如要求阶乘的是学生,那么我们就要创建一个学生的对象,然后这个对象要干嘛,他要求阶乘,那么我们这时候就要给这个对象创建方法。这个方法就叫做:成员方法。
上面是一个简单的例子来简单展现C语言与Java的不同,当然可能有人就会问那我该怎么创建对象呢?
那么接下来登场的就是Java中的类。

类是用来描述一个对象的,对象是一个真正存在的实体。想要运用好类这个语法。我们就需要完成这么几个步骤:

  1. 根据事件找到对象。
  2. 对象存在着什么变量。
  3. 变量要完成什么事件。
  4. 根据这些创建成员变量和成员方法。

注意:我们一般建议一个文件建一个类。

那么接下来就通过举例来让大家更好的理解上面的知识点。

public class Dog {int age;String name;public static void eat(){System.out.println("吃狗粮");}public static void speak(){System.out.println("狗叫");
}
}

如上就是我定义的一个类,这个类是用来描述一只狗的。这里面的成员变量有,age年龄,还有名字name,然后还有两个成员变量,当然这个 对象还未进行实例化。那么什么叫实例化呢?

对象的实例化

对象的实例化就是由类生成对象的过程叫做实例化。那么具体的代码实现是怎么样的呢?

public class Dog {int age;String name;public static void eat(){System.out.println("吃狗粮");}public static void speak(){System.out.println("狗叫");}public static void main(String[] args) {Dog dog=new Dog();dog.age=2;dog.name="旺财";dog.speak();dog.eat();System.out.println(dog.age);System.out.println(dog.name);}
}

image.png
在上面的代码中 Dog dog=new Dog(); //对象的实例化,这条代码就是对象实例化的代码。这就是我们常说的new一个对象。
对象实例化后我们就可以通过”.“,操作符对,对象中的成员变量和成员方法进行赋值或调用方法。

当然大家可能就会好奇,如果我不给对象的成员变量进行赋值那么他会输出什么?其实如果不进行赋值那么它会默认给各种类型的数据的对应的”0值“,什么叫做各自的0值呢?那么我们就可以看下图了。image.png
注意:局部变量在使用前必须要初始化,而成员变量可以不初始化。


this关键字

为了更好的理解this关键字,我们先抛出一段代码。

public class Student {String name;public void setName(String a) {name = a;}public static void main(String[] args) {Student stu1=new Student();Student stu2=new Student();Student stu3=new Student();stu1.setName("小明");        stu2.setName("小李");        stu3.setName("小刚");        }
}

在上方代码中我们定义了一个Student类,然后里面的成员变量有名字,那么我们还定义了一个成员方法setName,然后我们在main方法中实例化了3个对象,然后我们调用了setName方法,给每个对象起个名字。
我们先看一下结果image.png
结果也是我们所期盼的结果了。可是我们想象一下,在setName中我们里面的赋值语句中有这么一条语句name=a;那么编译器在三个对象调用方法时是如何分辨出给对应的name赋值呢?其实这就说明每个对象调用方法就会给其成员变量给赋值。那么如果我们把setName设置成这样呢?name=name;

public class Student {String name;public void setName(String name) {name = name;}public static void main(String[] args) {Student stu1=new Student();Student stu2=new Student();Student stu3=new Student();stu1.setName("小明");stu2.setName("小李");stu3.setName("小刚");System.out.println(stu1.name);System.out.println(stu2.name);System.out.println(stu3.name);}
}

我们看一下结果image.png
很显然此时setName里并未给成员变量name赋到值,打印出null是因为String对应的0值为null。那我们如果要解决这个问题,我们就需要用到this关键字。

public void setName(String name) {this.name = name;
}

只要加上this后代码就会知道this.name指的是对象的name,单单一个name就是成员变量的name,这样就可以正确的赋值方法。那this的本质是什么呢?
其实这个this就是你所调用的对象。用代码表示的话就是:

public void setName(Student this,String name) {this.name = name;
}

这里的形参就会多加一个this。那么肯定就会有人问了,我也没给setName里传对象,没有实参的1传入啊?
其实这个传参编译器已经会自动帮我们传参,只不过都会省略掉了而已。


构造方法

在Java中,构造方法是一种特殊的方法,它用于在创建对象时初始化对象的状态。构造方法具有以下特点:

  1. 名称与类名相同:构造方法的名称必须与类名完全相同,包括大小写。
  2. 没有返回类型:构造方法没有返回值,即使是void也没有。
  3. 自动调用:当使用new关键字创建对象时,构造方法会自动被调用,用于初始化对象。
  4. 可以有多个:一个类可以有多个构造方法,只要它们的参数列表不同(参数的数量或类型不同)。
  5. 不能被继承:构造方法不会被继承,即子类不会继承父类的构造方法。
  6. 不能直接调用:不能通过对象调用构造方法,它们是在对象创建时自动调用的。
  7. 如果我们没有自己定义构造方法则Java中会自动给我们构造一个空的构造方法。这个构造方法会省略掉我们是看不见的,但是他确实存在。

下面是一个简单的Java类示例,其中包含了一个构造方法:

public class Person {private String name;private int age;// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 其他方法public void displayInfo() {System.out.println("Name: " + name + ", Age: " + age);}
}// 使用构造方法创建对象
Person person = new Person("Alice", 30);
person.displayInfo();

在这个例子中,Person类有两个私有属性name和age。Person类有一个构造方法Person(String name, int age),它接受两个参数来初始化对象的状态。当创建一个新的Person对象时,必须提供这两个参数,并且构造方法会被自动调用来设置对象的初始状态。

this关键字可以在一个构造方法中调用其它构造方法,例如:

public class Dog {String name;public Dog(){System.out.println("调用了无参的构造的方法");}public Dog(String name){this();this.name=name;System.out.println("调用了有参的构造的方法");}public static void main(String[] args) {Dog dog=new Dog("旺财");}}

image.png
如上:我们在调用有参的构造方法时,也会自动调用无参的构造方法,但要注意this()必须在当前构造方法的第一个语句,否则就会报错。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真实故障分享,H3C ER3208G3-X路由器-双绞线一闪一停

六类非屏蔽双绞线 网线钳 如上图所示,2号线接到h3c路由器出现网线一闪一停,用对线器测试一到8芯能一一对应,无法上网。2号线接到h3c交换机能正常上网,难道是网线对568A 568B有要求? 解决方式:通过两端568…

一文讲清楚:如何做好建设工程项目管理?

在房地产开发中,作为项目负责人我目前的状况成了一个大管家,还要管理工程质量。上至各部门领导的关系维护,下到工人的吃喝拉撒都要我操心,还要没完没了的处理四邻纠纷和拆迁户的纠纷,每天都搞得很疲惫,如何…

elementUI type=“selection“多选框选中 删除 回显 赋值问题 回显数组改变选中状态未改变

业务需求&#xff1a; 点击查询弹列表框 勾选列表选项保存 可删除可重新查询列表添加 遇到的问题&#xff1a;删除之后查询列表selection回显问题 解决&#xff1a;row-click配合:reserve-selection"true"使用 <el-tableref"refPlanTable":data"…

vue3 + ts 实现IP地址及Mac地址输入框功能

1、组件完成代码 <template><div class"ip-input"><div v-for"(item, index) in ipArr" :key"index" class"ip-input__item-wrap"><input ref"ipInput" v-model"ipArr[index]" type"t…

【Python Cookbook】S01E01 将长度为N的序列分解为N个单独的变量

目录 问题解决方案讨论 问题 将一个包含 N N N 个元素的元组或者序列&#xff0c;现在想将其分解为 N N N 个单独的变量。 解决方案 任何序列都可以通过简单的赋值操作分解为单独的变量&#xff1a; p (4, 5) x, y p print("x", x) print("y", y)唯…

现在怎么做抖店才能赚钱?这四个重要建议,你千万不能忽略!

大家好&#xff0c;我是电商花花。 现在目前看抖音小店前景和红利依然有很大的市场空间&#xff0c;抖音小店平台流量大&#xff0c;商家入驻门槛低&#xff0c;抖店的运营技术也不像其它传统电商平台那么高。 所以&#xff0c;当下抖音小店仍然是流量大&#xff0c;机遇多。…

近屿OJAC带你解读:什么是API?

API的定义 API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节。 是…

【Linux】网络高级IO

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;Linux 目录 &#x1f449;&#x1f3fb;五种IO模型&#x1f449;&#x1f3fb;消息通信的同步异步与进程线程的同步异步有什么不同&#xff1f;&#x1f449…

远程工作利器:高效指南教你如何在Linux服务器上部署Jupyter Notebook并实现安全远程访问

远程工作利器&#xff1a;高效指南教你如何在Linux服务器上部署Jupyter Notebook并实现安全远程访问 1.安装 Anaconda和python 你可以在终端中运行以下命令来检查是否已安装&#xff1a; python --version python3 --version安装 pip pip 是 Python 的包管理工具&#xff0c…

长方形边框 上方中间有缺口 css

<div class"text_6">大234234师掌4234柜</div><div class"text-wrapper_1"><span class"paragraph_1">四川慧创云戈科技有限公司推出的“大师掌柜”&#xff0c;是一个以餐饮外卖为切入口&#xff0c;专注实体小店新零售…

一款即支持3v3单片机又支持5v单片机的485收发芯片

原理图参考 H7-TOOL 特此记录 anlog 2024年5月21日

蓝桥杯嵌入式 第六届国赛 更新中……

题目 配置 注意事项 复制LCD的工程&#xff0c;先配置资源 --- 勾选完选项一定要再看一眼&#xff0c;可能选择错误 ADC&#xff1a;配置ADC2_IN15&#xff0c;对应PB15引脚 EEROM&#xff0c;配置PB6和PB7 按键 输入模式PB0、PB1、PB2、PA0 LED 一定要使能PD2 PWM互补输出&…

jquery---ajax方法示例

ajax方法 $.ajax({name:value, name:value, ... }) ajax方法有一个参数&#xff0c;一定长度的对象&#xff0c;内部指定了ajax的请求地址和格式&#xff0c;方式等等&#xff0c;它可以有以下的属性和值 示例 这里展示了一个简单的get请求图片url的实例 let data; let url…

【Spring】认识 Spring AOP

认识 Spring AOP 1.什么是 AOP2.AOP 中的概念3.用 AOP 方式管理日志3.1 编写 AOP 日志注解类3.2 编写控制器用于测试 1.什么是 AOP AOP&#xff08;Aspect Oriented Program&#xff0c;面向切面编程&#xff09;把业务功能分为核心、非核心两部分。 核心业务功能&#xff1a…

ssm校园疫情防控管理系统-计算机毕业设计源码30796

目 录 摘要 1 绪论 1.1目的及意义 1.2开发现状 1.3ssm框架介绍 1.3论文结构与章节安排 2 校园疫情防控管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分…

真实测评:9款电脑加密软件最新排名

2024年已经过半&#xff0c;电脑加密软件市场发生了很多变化&#xff0c;根据资料汇总&#xff0c;一些电脑加密软件排名也发生了变化&#xff0c;下面是最近的排名。 1、安企神&#xff1a; 可以试试7天的免费试用&#xff0c;用过之后就回不去了 试用版https://work.weix…

【数据分析面试】56.数据格式转换(Python:melt函数)

题目 给定一个df&#xff0c;包含ABCDE多个列。请编写一个 Python 程序&#xff0c;将列 ‘D’ 和 ‘E’ 转换为长格式&#xff0c;并使用 ‘A’、‘B’ 和 ‘C’ 作为标识符。 换句话说&#xff0c;将数据中的D、E两列转换为行&#xff0c;使数据从宽变长。 示例&#xff1…

The First项目报告:一场由社区驱动的去中心化加密冒险—Turbo

2023年3月14日&#xff0c;由OpenAI公司开发自回归语言模型GPT-4发布上线&#xff0c;一时之间引发AI智能领域的轩然大波&#xff0c;同时受到影响的还有加密行业&#xff0c;一众AI代币纷纷出现大幅度拉升。与此同时&#xff0c;一款名为Turbo的Meme代币出现在市场中&#xff…

AI大模型探索之路-实战篇10:数据预处理的艺术:构建Agent智能数据分析平台的基础

系列篇章&#x1f4a5; AI大模型探索之路-实战篇4&#xff1a;深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5&#xff1a;探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6&#xff1a;掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…

redis常用数据结构及命令

Redis数据结构简介 Redis可以存储键与5种不同数据结构类型之间的映射&#xff0c;这五种数据结构分别为String(字符串)、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、和Zset&#xff08;有序集合&#xff09;。 …