Java入门9——类和对象+this+构造方法
终于终于,我们开启了Java的大门!类和对象才是Java梦开始的地方,让我们一起来学习吧!
一、类和对象
通常来讲,一个Java文件里面写一个类,那么类是什么呢?
类,字面意思,就是一类东西,比如说狗就是一个大类,具体分到那么多品种~
那么接下来我们以狗举例子~
我们先写一个关于狗的类:
public class Dog {public String name;//一只狗有名字public int age;//一只狗有年龄public void action(){System.out.println("Dog Action");//一只狗还会有它的行为}
}
我们用图来分析一下这个类:

那么我们如何调用狗这个类里面的方法呢?
我们就要new一个对象了~
public class Dog {public String name;public int age;public void action(){System.out.println("Dog Action");}public static void main(String[] args) {Dog dog = new Dog();dog.age = 18;dog.name = "WANGWANG";System.out.println(dog.name);System.out.println(dog.age);dog.action();}}
其中 dog 就是你新建的一个对象,然后通过 对象.方法 就可以调用类里面的方法了,定义对象的名字,年龄也是同样适用的~
给大家看一下输出结果~
这就是我们所讲的类和对象
二、this关键字
讲了类和对象,那就一定要提到this关键字,我们依旧以狗举例子~
假设我们又定义了狗的出生年月日,我们要往里传参,不巧形参和实参同名,这个时候我们打印出来的结果又是怎样的呢?
public class Dog {public String name;public int age;public void action(){System.out.println("Dog Action");}public int year;public int month;public int day;public void birthday(int year, int month, int day) {year = year;month = month;day = day;}public void printDate(){System.out.println(year + "-" + month + "-" + day);}public static void main(String[] args) {Dog dog = new Dog();dog.age = 18;dog.name = "WANGWANG";System.out.println(dog.name);System.out.println(dog.age);dog.action();dog.birthday(1990, 1, 1);dog.printDate();}}
运行一下,我们发现结果如下:
我们发现狗的出生年月日竟然是0-0-0,我们不是传参1990,1,1吗?
原来这个时候,是因为形参和实参出了问题
这里的 year = year ;month = month;day = day;就相当于,形参自己给自己赋值了,所以输出结果是0-0-0,那么我们如何避免这个问题呢?很简单,我们只需要加上this~

我们再把改过之后的代码放出来
public class Dog {public String name;public int age;public void action(){System.out.println("Dog Action");}public int year;public int month;public int day;public void birthday(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}public void printDate(){System.out.println(year + "-" + month + "-" + day);}public static void main(String[] args) {Dog dog = new Dog();dog.age = 18;dog.name = "WANGWANG";System.out.println(dog.name);System.out.println(dog.age);dog.action();dog.birthday(1990, 1, 1);dog.printDate();}}
我们再来看一下运行结果:
这个时候就是正常的!
那么this有哪些用法呢?
我们先给大家总结出来,然后一条一条用代码验证~
this
1. 可以访问当前对象的成员变量
2.可以访问当前对象的成员方法
3.通过this调用当前对象的其他构造方法
PS: 静态方法当中不使用this(以后细说)
我们先学前两条用法!~还是以狗为例子,代码如下:
public class Dog {public String name;public int age;public void action(){System.out.println("Dog Action");}public int year;public int month;public int day;public void birthday(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}public void printDate(){System.out.println(year + "-" + month + "-" + day);}public void func(){this.age = 18;this.name = "wangwang";this.printDate();}public static void main(String[] args) {Dog dog = new Dog();dog.birthday(1990, 1, 1);dog.func();System.out.println(dog.name);System.out.println(dog.age);dog.action();}}

这就是this的前两条功能
那第三个用法是怎么样的呢?我们要先学一下构造方法~
三、构造方法
注意:构造方法和成员方法是不一样的!!!
1.我们为什么要学构造方法呢?
通常我们会用构造方法初始化成员变量
2.构造方法长啥样?
还是以狗为例子,我们又回到了起点,这次我们在狗的类里,只定义了名字和年龄
这个时候,我们把不带参数的构造方法写出来~
public class Dog1 {public String name;public int age;public Dog1() {}public static void main(String[] args) {Dog dog = new Dog();System.out.println(dog.name);System.out.println(dog.age);}}
当我们写一个类的时候,没写构造方法的时候,构造方法是默认有一个不带参数的构造方法的
3.构造方法初始化成员变量
构造方法可以重载,所以我们来试一试用构造方法初始化成员变量
public class Dog1 {public String name;public int age;public Dog1(String name, int age) {this.name = name;this.age = age;}public static void main(String[] args) {Dog1 dog = new Dog1("wang",12);System.out.println(dog.name);System.out.println(dog.age);}
}
我们发现此时是带两个参数的构造方法,而且我们都初始化了成员变量
那么,构造方法是什么时候调用的呢?看下面这张图就理解啦!

原来是在 new 一个对象的时候就调用了构造方法,这就是我们一般用来初始化成员变量的方法~
今天内容就到这里啦~东西有点多,大家好好复习,反复搓代码,加油!!!
相关文章:
Java入门9——类和对象+this+构造方法
终于终于,我们开启了Java的大门!类和对象才是Java梦开始的地方,让我们一起来学习吧! 一、类和对象 通常来讲,一个Java文件里面写一个类,那么类是什么呢? 类,字面意思,就…...
Django目录结构最佳实践
Django项目目录结构 项目目录结构配置文件引用修改创建自定义子应用方法修改自定义注册目录从apps目录开始 项目目录结构 └── backend # 后端项目目录(项目名称)├── __init__.py├── logs # 项目日志目录├── manage.py #…...
npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
报错场景: 使用npm run dev命令启动项目,报错 PS D:\vuecode\ying-mei> npm run dev > ying-mei0.0.0 dev > vite vite 不是内部或外部命令,也不是可运行的程序 或批处理文件。 原因: 缺失依赖,因为新建的项…...
后端:Spring、Spring Boot-实例化Bean依赖注入(DI)
文章目录 1. 实例化Bean2. 使用FactoryBean3. 依赖注入(DI)3.1 AutoWired 属性注入(查找顺序:先类型,后名字)3.2 AutoWired 在构造函数&参数上的使用3.3 Inject和Resource 进行依赖注入3.4 Value 进行注入 1. 实例化Bean 默认使用无参构造函数&…...
C++ 数据结构 静态顺序表、动态顺序表。
静态顺序表(Static Array List)是一种线性数据结构,通常用数组实现。它具有固定的大小,并在编译时分配内存。以下是静态顺序表的一些基本概念和实现示例。 静态顺序表基本概念 固定大小:静态顺序表的大小在创建时定义…...
QML旋转选择器组件Tumbler
1. 介绍 Tumbler是一个用于创建旋转选择器的组件。它提供了一种直观的方式来让用户从一组选项中进行选择,类似于转盘式数字密码锁。网上找的类似网图如下: 在QML里,这种组件一共有两个版本,分别在QtQuick.Extras 1.4(旧)和QtQuic…...
在工作中常用到的 Linux 命令总结
引言 我之前找工作面试的时候。几乎每次面试几乎都会问到 Linux 常用命令,会问一些命令的应用场景。目的是考察我们是否在实际开发中经常用、用得熟练。今天我就来系统地总结一下开发过程中最常用的 Linux 命令,算是一个复习总结。 基本操作 文件管理…...
反射、枚举和lambda表达式
文章目录 一、反射1.1 什么是反射1.2 反射相关的类1.3 示例获取Class对象通过反射去创建对象调用带两个参数且私有的构造方法获取私有属性反射私有方法 二、枚举2.1 什么是枚举以及其优缺点2.2 如何使用枚举组织常量的基本方法枚举类的其他方法示例枚举能否通过反射拿到实例对象…...
Stable Diffusion Web UI 1.9.4常用插件扩展-WD14-tagger
Stable Diffusion Web UI 1.9.4 运行在 WSL 中的 Docker 容器中 tagger 插件的作用是,上传一张图片,反推这张图片可能的提示词。 使用场景就是,想要得到类似的图片内容时使用。 WD14-tagger 安装 Stable Diffusion WebUI WD14-tagger GitH…...
java 第19天 Lambda、jdk8.0新方法、Optional
一.Lambda表达式 前提是:参数是函数式接口才可以书写Lambda表达式 函数式接口条件: 1.接口 2.只有一个抽象方法 lambda表达式又称为匿名函数,允许匿名函数以参数的形式传入方法,简化代码 lambda表达式分为两部分()->{} …...
江协科技STM32学习- P31 I2C通信协议
🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝…...
6、liunx目录的功能
一、目录简介 Linux主要树结构目录包括:/、/root、/home、/usr、/bin、/tmp、/sbin、/proc、/boot 【Linux系统中常见目录功能如下】 / 根目录;/bin 存放必要的命令;(普通用户) /boot 存放内核以及启动所需的文件&…...
挑战Java面试题复习第5天,无人扶我青云志
挑战第 5 天 java反射List Set Map 区别Object 常用方法 java反射 定义: 运行时动态获取类信息和调用方法的特性。 应用场景: JDBC数据库连接。框架如Hibernate和Struts等。 实现方式: 通过四种方法获取Class对象: Class.fo…...
大规模语言模型:从理论到实践(1)
1、绪论 大规模语言模型(Large Language Models,LLM)是由包含数百亿以上参数的深度神经网络构建的语言模型,采用自监督学习方法通过大量无标注文本进行训练。自2018年以来,多个公司和研究机构相继发布了多种模型&#…...
C#如何锁定和解除鼠标及键盘BlockInput
在C#中,"BlockInput"通常指的是一个功能或方法,用于阻止或暂停用户输入一段时间。这在某些特定的应用场景下非常有用,比如在游戏中防止玩家连续快速点击导致游戏逻辑错误,或者在UI应用中防止用户在某个操作正在进行时进…...
Stable Diffusion 3.5发布:图像生成新纪元,多模态AI的突破!
在人工智能的图像生成领域,我们刚刚迎来了一位新的明星——Stable Diffusion 3.5。这是一款由多模态扩散Transformer(MMDiT)驱动的文本到图像模型,它在图像质量、字体处理、复杂提示理解以及资源效率方面都实现了显著提升。今天&a…...
MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题
1. limit 100000,10 和 limit 10区别 LIMIT 100000, 10: 这个语句的意思是,从查询结果中跳过前100000条记录,然后返回接下来的10条记录。这通常用于分页查询中,当你需要跳过大量的记录以获取后续的记录时。例如,如果你…...
RabbitMQ 实现消息队列负载均衡
在现代应用程序中,消息队列是一种重要的架构模式,用于解耦服务、处理异步任务和实现负载均衡。其中,RabbitMQ是一个广泛使用的开源消息代理,提供了高可用性、可靠性和灵活性。本文将展示如何使用Python及其pika库来实现RabbitMQ&a…...
嵌入式linux中HTTP协议原理基本分析
第一:HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维…...
thinkphp和vue基于Workerman搭建Websocket服务实现用户实时聊天,完整前后端源码demo及数据表sql
最近接了一个陪玩小程序,其中有一个实时聊天的项目,需要搭建Websocke服务,通过多方考虑选择了通过GatewayWorker框架(基于Workerman),将代码提取了出来,用到的框架封装到了vendor目录下,完整前后…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
