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目录下,完整前后…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
