Java 类与对象

目录

1 类是什么

1.1 面向对象

1.2 面向对象与面向过程

2 类定义和使用

2.1 类的定义格式

 2.2 练习定义一个狗类

3 类的实例化

4 this引用

5 对象的构造与初始化

5.1 构造方法与初始化

 5.2 默认初始化

5.3 就地初始化


1 类是什么

关于类是什么,我们需要对java的面向对象的思想有一定的认识


1.1 面向对象

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。


1.2 面向对象与面向过程

手洗衣服就是面向洗衣服整个过程,一步一步设计,最后洗完衣服,非常繁琐,少一步可能都会导致这个过程执行不下去,按照该种方式来写代码,将来扩展或者维护起来会比较麻烦。

机洗衣服就是面向四个对象:人、衣服、洗衣粉和海尔洗衣机,用户不需要关注衣服是怎么洗的怎么甩干的,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。

面向对象程序设计关注的是对象,而对象是现实生活中的实体,比如:海尔洗衣机(美的也可以)。但是洗衣机计算机并不认识,需要开发人员告诉给计算机什么是洗衣机。开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语言

Java语言中的类就是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干 啥),描述完成后计算机就可以识别了。

洗衣机类

属性:品牌、型号、重量、颜色等等

功能:洗衣、脱水等

在Java语言中,如何对上述的洗衣机类来进行定义呢?


2 类定义和使用

2.1 类的定义格式

class WashMachine{  //洗衣机类//成员属性/成员变量public String brand;    //品牌public String type; //类型public int weight;  //重量public String color;    //颜色//成员方法public void wash(){ //洗衣服功能System.out.println("洗衣服");}public void dry(){  //脱水功能System.out.println("脱水");}
}

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

类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类 具有哪些功能,称为类的成员方法。

【注意】

  1. 类名注意采用大驼峰定义
  2. 成员前写法统一为public,后面会详细解释
  3. 此处写的方法不带 static 关键字. 后面会详细解释

 2.2 练习定义一个狗类

public class PetDog{    //多了一个publicpublic String type; //类型public String name; //名字public int age; //年龄public void bark(){System.out.println(name + "汪汪!!");}public void wag(){System.out.println(name + "摇尾巴~~");}
}

【注意】

  1. 一般一个文件当中只定义一个类
  2. main方法所在的类一般要使用public修饰
  3. public修饰的类必须要和文件名相同

3 类的实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似

用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

比如宠物狗是一个类,有金毛、哈士奇和拉布拉多等等,年龄不一样,名字不一样,就都是不一样的对象,类只是一个模型一样的东西,用来对一个实体(对象)进行描述,限定了类有哪些成员。一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

以 宠物狗类 为例,再定义一个文件TestDog

public class TestDog{public static void main(String[] args) {PetDog mydog = new PetDog();    //类的实例化mydog.name = "小狗";mydog.type = "哈士奇";mydog.age = 4;mydog.bark();mydog.wag();}
}//输出结果
//小狗汪汪!!
//小狗摇尾巴~~

【注意】

  1. new 关键字用于创建一个对象的实例。
  2. 使用 . 来访问对象中的成员变量和方法。
  3. 同一个类可以创建多个实例化对象。 

4 this引用

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

【特性】 

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

this只能在"成员方法"中使用

在"成员方法"中,this只能引用当前对象,不能再引用其他对象

结合后面的构造方法一起讲 


5 对象的构造与初始化

5.1 构造方法与初始化

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

//PetDog.java
public class PetDog{public String type;public String name; public int age; //构造方法public PetDog(String type,String name,int age){this.type = type;   //当形参和实参名字相同时,this.name = name;   //this来告诉编译器这个type、name和agethis.age = age;     //是属于哪个对象的}public void bark(){System.out.println(name + "汪汪!!");}public void wag(){System.out.println(name + "摇尾巴~~");}
}//TestDog.java
public class TestDog{public static void main(String[] args) {PetDog mydog = new PetDog("哈士奇","小狗",4);    //简化啦mydog.bark();mydog.wag();}
}
//输出结果一样

【特性】

  1. 名字必须与类名相同
  2. 没有返回值类型,设置为void也不行
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
  4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
  5. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。注意:一旦用户定义了构造方法,编译器则不再生成无参的默认构造方法。
  6. 构造方法中,可以通过this调用其他构造方法来简化代码,this(...)必须是构造方法中第一条语句
public class PetDog{public String type; public String name; public int age;//构造方法(与下面那个是方法的重载(参数列表不一样))public PetDog(){//this调用下面那个构造方法来完成初始化this("金毛","大狗",5);}public PetDog(String type,String name,int age){this.type = type;   this.name = name;  this.age = age;     }public void bark(){System.out.println(name + "汪汪!!");}public void wag(){System.out.println(name + "摇尾巴~~");}
}public class TestDog{public static void main(String[] args) {PetDog mydog = new PetDog("哈士奇","小狗",4);PetDog mydog1 = new PetDog();   //调用无参的那个构造方法mydog.bark();mydog.wag();mydog1.bark();mydog1.wag();}
}//输出结果
//小狗汪汪!!
//小狗摇尾巴~~
//大狗汪汪!!
//大狗摇尾巴~~

 5.2 默认初始化

为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?

要搞清楚这个过程,就需要知道 new 关键字背后所发生的一些事情:

在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:

(1)检测对象对应的类是否加载了,如果没有加载则加载

(2)为对象分配内存空间

(3)处理并发安全问题

        比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

(4)初始化所分配的空间

        即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值,比如:

数据类型默认值
byte0
char'\u0000'
short0
int0
long0L
booleanfalse
float0.0f
double0.0
referencenull

(5)设置对象头信息(后续介绍)

(6)调用构造方法,给对象中各个成员赋值

        所以构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。


5.3 就地初始化

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

public class PetDog{public String type = "金毛"; //就地初始化public String name = "大狗";public int age;
}

代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造方法中


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

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

相关文章

vs2019 - 用自定义对话框消息框替代MessageBox

文章目录 vs2019 - 用自定义对话框消息框替代MessageBox概述笔记效果用法调用方代码实现MessageBoxDialog.hMessageBoxDialog.cppEND vs2019 - 用自定义对话框消息框替代MessageBox 概述 当工程被逆向时,如果存在AfxMessageBox(), ::MessageBox()的调用&#xff0…

【深度学习】第一门课 神经网络和深度学习 Week 4 深层神经网络

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:深度学习 💬总结:希望你看完之后,能对…

Jupyter Notebook魔术命令

Jupyter Notebook是一个基于网页的交互式笔记本,支持运行多种编程语言。 Jupyter Notebook 的本质式一个Web应用程序,便于创建和共享文学化程序文档,支持实现代码,数学方程,可视化和markdown。用途包括:数据…

spring cloud eureka 初始化报错(A bean with that name has already been defined)

报错内容 The bean ‘eurekaRegistration’, defined in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration E u r e k a C l i e n t C o n f i g u r a t i o n . c l a s s ] , c o u l d n o t b e r e g i s t e r e d . A …

Adobe PS 2023、Adobe Photoshop 2023下载教程、安装教程

Adobe Photoshop &#xff08;<-下载连接&#xff09;简介&#xff1a; Adobe Photoshop是一款广泛使用的图像处理软件&#xff0c;由Adobe公司开发。它提供了许多强大的工具和功能&#xff0c;可以用于图像编辑、合成、修饰、设计等各个领域。用户可以使用Photoshop来调整…

golang学习笔记(协程的基础知识)

golang的协程 协程是一种轻量级的线程&#xff0c;它可以实现并发执行的并行操作。协程是Go语言中的一个核心特性&#xff0c;它使得程序能够以并发的方式运行&#xff0c;并且非常高效。与传统的线程相比&#xff0c;协程的创建和销毁成本非常低&#xff0c;可以方便地启动大…

k8s 资源组版本支持列表

1 kubernetes的资源注册表 kube-apiserver组件启动后的第一件事情是将Kubernetes所支持的资源注册到Scheme资源注册表中,这样后面启动的逻辑才能够从Scheme资源注册表中拿到资源信息并启动和运行API服务。 kube-apiserver资源注册分为两步:第1步,初始化Scheme资源注册表;…

thinkphp家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单安装教程

介绍 thinkphp家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单安装教程 上门预约服务派单小程序家政小程序同城预约开源代码独立版安装教程 程序完整&#xff0c;经过安装检测&#xff0c;可放心下载安装。 适合本地的一款上门预约服务小程序&#xff0…

数据结构------栈的介绍和实现

目录 1.栈的一些初步认识 2.栈的实现 3.相关的函数介绍 &#xff08;1&#xff09;栈的初始化 &#xff08;2&#xff09;栈的销毁 &#xff08;3&#xff09;栈的数据插入 &#xff08;6&#xff09;判断是否为空 &#xff08;7&#xff09;栈的大小 4.栈的实现完整…

iBarcoder for Mac:一站式条形码生成软件

在数字化时代&#xff0c;条形码的应用越来越广泛。iBarcoder for Mac作为一款专业的条形码生成软件&#xff0c;为用户提供了一站式的解决方案。无论是零售、出版还是物流等行业&#xff0c;iBarcoder都能轻松应对&#xff0c;助力用户实现高效管理。 iBarcoder for Mac v3.14…

win11 Terminal 部分窗口美化

需求及分析&#xff1a;因为在 cmd、anaconda prompt 窗口中输入命令较多&#xff0c;而命令输入行和输出结果都是同一个颜色&#xff0c;不易阅读&#xff0c;故将需求定性为「美化窗口」。 美化结束后&#xff0c;我在想是否能不安装任何软件&#xff0c;简单地通过调整主题颜…

windows驱动开发-PNP管理器

PNP技术是由Microsoft提出的&#xff0c;英文Plug and play的缩写&#xff0c;中译即插即用&#xff0c;意思是系统自动侦测周边设备和板卡并自动安装设备驱动程序&#xff0c;做到插上就能用&#xff0c;无须人工干预&#xff0c;是Windows自带的一项技术。所谓即插即用是指将…

从零开始搭建一个vue项目

从零开始搭建一个vue项目 一、环境准备 1.1 安装node.js 选择合适的LTS版本&#xff0c;然后下载安装&#xff0c;安装地址&#xff1a;https://nodejs.org/en/download 在命令行中查看已安装的node.js版本 node -v v14.14.01.2 切换为淘宝的镜像源 解决国内下载慢的问题,…

极简shell制作

&#x1f30e;自定义简单shell制作 &#xff08;ps: 文末有完整代码&#xff09; 文章目录&#xff1a; 自定义简单shell制作 简单配置Linux文件 自定义Shell编写 命令行解释器       获取输入的命令       字符串分割       子进程进行进程替换 内建命令…

.NET 检测地址/主机/域名是否正常

&#x1f331;PING 地址/主机名/域名 /// <summary>/// PING/// </summary>/// <param name"ip">ip</param>/// <returns></returns>public static bool PingIp(string ip){System.Net.NetworkInformation.Ping p new System.N…

OpenAI 新推出 AI 问答搜索引擎——SearchGPT 震撼登场

您的浏览器不支持 video 标签。 OpenAI-SearchGPT 近日&#xff0c;OpenAI 曝光了自己的一款令人瞩目的 AI 问答搜索引擎——SearchGPT。这款搜索引擎带来了全新的搜索体验&#xff0c;给整个行业带来了巨大的压力。 SearchGPT 支持多种强大的功能。首先&#xff0c;它能够通过…

蓝桥杯练习系统(算法训练)ALGO-949 勇士和地雷阵

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 勇士们不小心进入了敌人的地雷阵&#xff08;用n行n列的矩阵表示&#xff0c;*表示某个位置埋有地雷&#xff0c;-表示某个…

ARP防火墙能够为网络安全贡献什么样的力量

ARP防火墙&#xff08;Address Resolution Protocol Firewall&#xff09;作为网络安全的一环&#xff0c;起到保护网络免受ARP欺骗攻击的关键作用。今天德迅云安全给您介绍ARP防火墙的相关方面&#xff0c;帮助您深入了解和认识这一关键的安全措施。 网络安全对于现代社会的信…

金三银四面试题(二十四):享元模式知多少?

什么是享元模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在通过共享对象来减少内存使用&#xff0c;从而提高性能。它主要用于处理大量细粒度对象的情况&#xff0c;通过将这些对象的可共享部分&#xff08;内部状态&#xff09…

毫米波雷达原理(含代码)(含ARS548 4D毫米波雷达数据demo和可视化视频)

毫米波雷达原理 1. 传统毫米波雷达1.1 雷达工作原理1.2 单目标距离估计1.3 单目标速度估计1.4 单目标角度估计1.5 多目标距离估计1.6 多目标速度估计1.7多目标角度估计1.7 总结 3. FMCW雷达数据处理算法4. 毫米波雷达的目标解析(含python代码)5. ARS548 4D毫米波雷达数据demo(含…