类和对象(一)

article/2025/6/29 8:48:26

一、面向对象

(OOP是面向对象的语言的简称)

Java是⼀⻔纯⾯向对象的语⾔,在⾯向对象的世界⾥,⼀切皆 为对象。⾯向对象是解决问题的⼀种思想,主要依靠对象之间的交互完成⼀件事情。

面向对象——>不关注过程,更关注开始结束(如洗衣服,不关注洗衣机工作过程)

(对象=现实生活中的实体)

面向过程——>关注过程,各个环节缺一不可

二、类

1.认识类

类是⽤来对⼀个实体(对象)来进⾏描述的,主要描述该实体(对象)具有哪些属性(外观尺⼨等),哪些功 能(⽤来⼲啥),描述完成后计算机就可以识别了。

2.类的定义格式

 // 创建类 
class ClassName{  field;        // 字段(属性)或者成员变量method;       // ⾏为 或者 成员⽅法
}

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。

属性(字段)-->用来描述类-->类的成员属性或者类成员变量

方法(行为)-->说明类具体有哪些功能-->类的成员⽅法

class WashMachine{
public String type;    // 型号
public String brand;   // 品牌 
public double weight;  // 重量 
public double length;  // ⻓ 
public double width;  // 宽 
public double height;  // ⾼ 
public String color;   // 颜⾊ public void washClothes(){   // 洗⾐服System.out.println("洗⾐功能");}public void dryClothes(){    // 脱⽔System.out.println("脱⽔功能");}public void setTime(){       // 定时System.out.println("定时功能");}}

#注:

1.类名注意采⽤⼤驼峰定义(每个单词首字母大写)

2.public修饰的类必须要和⽂件名相同

3.不要轻易去修改public修饰的类的名称,如果要修改,通过开发⼯具修改

三、类的实例化

1.什么是实例化

定义了⼀个类,就相当于在计算机中定义了⼀种新的类型,⽤类类型创建对象的过程,称为类的实例化,在java中采⽤new关键字,配合类名来实例化对象。

 public class Main{public static void main(String[] args) {PetDog dogh = new PetDog();      //通过new实例化对象PetDog dogs = new PetDog();}}

完成了对象的实例化之后,我们就要去访问对象当中的成员

 class PetDog {public String name;//名字public String color;//颜⾊// 狗的属性 public void barks() {System.out.println(name + ": 旺旺旺~~~"); }// 狗的⾏为public void wag() {System.out.println(name + ": 摇尾巴~~~");}}public class Main{public static void main(String[] args) {PetDog dogh = new PetDog();     //通过new实例化对象 dogh.name = "阿⻩";dogh.color = "⿊⾊";dogh.barks();dogh.wag();PetDog dogs = new PetDog();dogs.name = "小黑";dogs.color = "⻩⾊";dogs.barks();dogs.wag();}}输出结果:
阿⻩: 旺旺旺~~~
阿⻩: 摇尾巴~~~
小黑: 旺旺旺~~~
小黑: 摇尾巴~~~

#注:

1.new关键字⽤于创建⼀个对象的实例

2.使⽤ . 来访问对象中的属性和⽅法

3.同⼀个类可以创建多个实例

四、习惯使用this关键字

this引⽤指向当前对象(成员⽅法运⾏时调⽤该成员⽅法的对象),在成员⽅法中所有成员变量的操作, 都是通过该引⽤去访问。

 public class Date {public int year;public int month;public int day;public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;}public void printDate(){System.out.println(this.year + "/" + this.month + "/" + this.day);}public static void main(String[] args) {// 构造三个⽇期类型的对象 d1 d2 d3 Date d1 = new Date();Date d2 = new Date();Date d3 = new Date();// 对d1,d2,d3的⽇期设置 d1.setDay(2020,9,15);d2.setDay(2020,9,16);d3.setDay(2020,9,17);// 打印⽇期中的内容 d1.printDate();d2.printDate();d3.printDate();}}

这里如果删去三个this,那么就会产生两个错误:

1.=两边同名,成为了自己给自己赋值,程序报错。

2.三个调用,三个打印,分不清谁的给谁。

this代表的 是当前对象的引⽤,当前对象就是指:哪个对象调⽤setDay⽅法,谁就是this引⽤!

#注:

1.this的类型:对应类类型引⽤,即哪个对象调⽤就是哪个对象的引⽤类型

2.this只能在"成员⽅法"中使⽤

3.在"成员⽅法"中,this只能引⽤当前对象,不能再引⽤其他对象

4.this是“成员⽅法”第⼀个隐藏的参数,编译器会⾃动传递,在成员⽅法执⾏时,编译器会负责将 调⽤成员⽅法对象的引⽤传递给该成员⽅法,this负责来接收

五、对象的构造及初始化

1.默认初始化

对于成员变量来说,如果没有进⾏初始化,会有⼀个对应的0值

(其中布尔类型默认为FALSE,抽象类默认为null)

2.就地初始化

在声明成员变量时,就直接给出了初始值。

 public class Date {public int year = 1900;public int month = 1;public int day = 1;public Date(){}public Date(int year, int month, int day) {}public static void main(String[] args) {Date d1 = new Date(2021,6,9);Date d2 = new Date();}}

3.构造⽅法初始化

构造⽅法是⼀个特殊的成员⽅法,名字必须与类名相同,在创建对象时,由编译器⾃动调⽤,并且在整个对象的⽣命周期内只调⽤⼀次。

 public class Date {public int year;public int month;public int day;public Date(int year, int month, int day){this.year = year;this.month = month;this.day = day;System.out.println("Date(int,int,int)⽅法被调⽤了");}public void printDate(){System.out.println(year + "-" + month + "-" + day);}public static void main(String[] args) {// 此处创建了⼀个Date类型的对象,并没有显式调⽤构造⽅法 Date d = new Date(1999,6,9);   // 输出Date(int,int,int)⽅法被调⽤了 d.printDate();    //1999-6-9}}

#注:

1.名字必须与类名相同

2.没有返回值类型,设置为void也不⾏

3.创建对象时由编译器⾃动调⽤,并且在对象的⽣命周期内只调⽤⼀次(相当于⼈的出⽣,每个⼈只能 出⽣⼀次)

4.构造⽅法可以重载

5.如果⽤⼾没有显式定义,编译器会⽣成⼀份默认的构造⽅法,⽣成的默认构造⽅法⼀定是⽆参的。

6.⼀旦⽤⼾定义了其他的构造⽅法,编译器则不再⽣成。

7.构造⽅法中,可以通过this调⽤其他构造⽅法来简化代码

(this(...)必须是构造⽅法中第⼀条语句!!! 不能形成环的调⽤!!!)

六、对象的打印

如果我们直接打印对象的引⽤,此时输出的结果为:类路径名@对象的hashcode值。

因此,我们会使用重写toString⽅法打印对象

 public class Person {String name;String gender;int age;public Person(String name, String gender, int age) {this.name = name;this.gender = gender;this.age = age;}@Overridepublic String toString() {return "[" + name + "," + gender + "," + age + "]";}public static void main(String[] args) {Person person = new Person("Jim","男", 18);System.out.println(person);}}// 输出结果:[Jim,男,18]


http://www.hkcw.cn/article/WWkEyDGsLc.shtml

相关文章

OpenCV4.4.0下载及初步配置(Win11)

目录 OpenCV4.4.0工具下载安装环境变量系统配置 OpenCV4.4.0 工具 系统:Windows 11 下载 OpenCV全版本百度网盘链接:: https://pan.baidu.com/s/15qTzucC6ela3bErdZ285oA?pwdjxuy 提取码: jxuy找到 opencv-4.0.0-vc14_vc15 下载得到 安装 运行op…

QGIS Python脚本开发(入门级)

随着人工智能技术的飞速发展,编程语言和脚本开发正变得前所未有的便捷。在GIS领域,QGIS作为一款卓越的开源地理信息系统软件,凭借其易于下载、界面简洁、功能强大等诸多优势,赢得了全球用户的青睐。更令人兴奋的是,QGI…

【算法】分支限界

一、基本思想 (分支限界, 分枝限界, 分支界限 文献不同说法但都是一样的) 分支限界法类似于回溯法,也是一种在问题的解空间树上搜索问题解的算法。 但一般情况下,分支限界法与回溯法的求解目标不同。回溯…

【springcloud】快速搭建一套分布式服务springcloudalibaba(四)

第四篇 基于nacos搭建分布式项目 分布式系统日志(skywalkinges) 项目所需 maven nacos java8 idea git mysql redis skywalking es 本文主要从客户下单时扣减库存的操作,将链路日志模拟出来,网关系统/用户系统/商品系统/订…

设计模式(行为型)-中介者模式

目录 定义 类图结构展示 角色职责详解 模式的优缺点分析 优点 缺点 适用场景 应用实例 与其他模式的结合与拓展 总结 定义 中介者模式的核心思想可以概括为:用一个中介对象来封装一系列的对象交互。这个中介者就像一个通信枢纽,使各对象不需要…

PMOS以及电源转换电路设计

PMOS的使用 5V_EN5V时&#xff0c;PMOS截止&#xff1b; 5V_EN0V时&#xff0c;PMOS导通&#xff1b; 电源转换电路 当Vout0V时&#xff0c;Vg0V, Vgs>Vth, PMOS导通&#xff0c;只有电池供电&#xff1b; 当Vout5V时&#xff0c;Vg4.9V, Vs4.8V?, Vgs<Vth, PMOS截止&am…

本地部署 DeepSeek R1(最新)【从下载、安装、使用和调用一条龙服务】

文章目录 一、安装 Ollama1.1 下载1.2 安装 二、下载 DeepSeek 模型三、使用 DeepSeek3.1 在命令行环境中使用3.2 在第三方软件中使用 一、安装 Ollama 1.1 下载 官方网址&#xff1a;Ollama 官网下载很慢&#xff0c;甚至出现了下载完显示 无法下载&#xff0c;需要授权 目…

数据治理的演变与AI趋势

知识星球&#xff1a;数据书局。打算通过知识星球将这些年积累的知识分享出来&#xff0c;让各位在数据治理、数据分析的路上少走弯路&#xff0c;另外星球也方便动态更新最近的资料&#xff0c;提供各位一起讨论数据的小圈子 1.数据治理的演变 1.1.摘要 数据治理是指组织管…

Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理

Fullstack 面试复习笔记&#xff1a;操作系统 / 网络 / HTTP / 设计模式梳理 面试周期就是要根据JD调整准备内容&#xff08;挠头&#xff09;&#xff0c;最近会混合复习针对全栈这块的内容&#xff0c;目前是根据受伤的JD&#xff0c;优先选择一些基础的操作系统、Java、Nod…

【MIMO稳定裕度】基于数据驱动的多输入多输出系统稳定裕度分析

最近一直在忙着写论文&#xff0c;只能说要写一篇高水平论文确实不容易&#xff0c;要一直反复来回修改调整&#xff0c;要求比较高&#xff0c;所以没太有时间和精力写博客&#xff0c;这两天结束了初稿&#xff0c;又正好是假期&#xff0c;出来冒个泡。 本次分享的主题是&am…

Python 训练营打卡 Day 33-神经网络

简单神经网络的流程 1.数据预处理&#xff08;归一化、转换成张量&#xff09; 2.模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 3.定义损失函数和优化器 4.定义训练过程 5.可视化loss过程 预处理补充&#xff1a; 分类任务中&#xff0c;若标签是整…

TDengine 的 AI 应用实战——电力需求预测

作者&#xff1a; derekchen Demo数据集准备 我们使用公开的UTSD数据集里面的电力需求数据&#xff0c;作为预测算法的数据来源&#xff0c;基于历史数据预测未来若干小时的电力需求。数据集的采集频次为30分钟&#xff0c;单位与时间戳未提供。为了方便演示&#xff0c;按…

【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡

【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡 一、项目背景与转型原因 1.1 原定计划的变更 本系列教程最初规划是开发即构美颜SDK的UTS插件&#xff0c;但由于甲方公司内部战略调整&#xff0c;原项目被迫中止。考虑到&#xff1a; 技术…

(aaai2024) Omni-Kernel Network for Image Restoration

代码&#xff1a;https://github.com/c-yn/OKNet 研究动机&#xff1a;作者认为Transformer模型计算复杂度太高&#xff0c;因此提出了 omni-kernel module &#xff08;OKM&#xff09;&#xff0c;可以有效的学习局部到全局的特征表示。该模块包括&#xff1a;全局、大分支、…

useMemo useCallback 自定义hook

useMemo & useCallback & 自定义hook useMemo 仅当依赖项发生变化的时候&#xff0c;才去重新计算&#xff1b;其他状态变化时则不去做不必要的计算。 useCallback 缓存函数。但是使用注意&#x1f4e2; &#xff0c;useCallback没有特别明显的优化。 *合适的场景——父…

android binder(二)应用层编程实例

一、binder驱动浅析 从上图看出&#xff0c;binder的通讯主要涉及三个步骤。 在 Binder Server 端定义好服务&#xff0c;然后向 ServiceManager 注册服务在 Binder Client 中向 ServiceManager 获取到服务发起远程调用&#xff0c;调用 Binder Server 中定义好的服务 整个流…

GESP2024年3月认证C++二级( 第三部分编程题(2)小杨的日字矩阵)

参考程序&#xff1a; #include <iostream> using namespace std;int main() {int n;cin >> n; // 读入奇数 n// 外层循环控制每一行for (int i 0; i < n; i) {// 内层循环控制每一列for (int j 0; j < n; j) {char ch;// 如果当前列是最左或最右&#x…

BUUCTF[ACTF2020 新生赛]Exec 1题解

BUUCTF[ACTF2020 新生赛]Exec 1题解 分析解题过程总结: 分析 先分析题目&#xff1a;exc()是一个内部调用shell命令的函数&#xff0c;同样的函数还有system(), 创建靶机&#xff0c;打开网址&#xff0c;是一个和PING相关的网页&#xff0c;查看源代码&#xff0c;没有提示&a…

NX869NX874美光固态颗粒NX877NX883

NX869NX874美光固态颗粒NX877NX883 美光固态硬盘颗粒技术解析与市场展望 近年来&#xff0c;固态硬盘&#xff08;SSD&#xff09;市场呈现出蓬勃发展的态势&#xff0c;而作为核心组件的存储颗粒&#xff0c;其技术进展与市场动态自然吸引了众多关注。在众多品牌中&#xff…

CodeTop100 Day20

58、翻转字符串中的数字 class Solution {public String reverseWords(String s) {s s.trim(); int j s.length() - 1, i j;StringBuilder res new StringBuilder();while (i > 0) {while (i > 0 && s.charAt(i) ! ) i--…