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

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目录下,完整前后…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...