【JavaEE重点知识归纳】第7节:类和对象

目录

一:了解面向对象

1.什么是面向对象

2.面向对象和面向过程区分

二:类定义和使用

1.什么是类

2.练习:定义一个学生类

三:类的实例化

1.什么是实例化

2.类和对象的说明

四:认识this

1.为什么要有this引用

2.什么是this引用

3.this引用的特性

五:对象的构造及初始化

1.如何初始化对象

2.构造方法

3.默认初始化 

4.就地初始化

六:static成员

1.static修饰成员变量

2.static修饰成员方法

七:代码块

1.概念及分类

2.普通代码块

3.构造代码块(实例代码块)

4.静态代码块


一:了解面向对象

1.什么是面向对象

        Java是一门纯面向对象的语言(Object  Oriented  Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题一种思想,主要依靠对象之间的交互完成一件事情。

2.面向对象和面向过程区分

把大象装进冰箱的例子:

面向对象:大象(走进)、冰箱(打开,关闭)

面向过程:一打开冰箱、二把大象装进冰箱、三关闭冰箱

二:类定义和使用

1.什么是类

(1)类是用来对一个实体(对象)来进行描述,描述该对象具有哪些属性,有哪些功能

(2)定义格式:

class 类名{

        //成员变量(属性)

        //成员方法(功能)

}

class为定义类的关键字    成员属性定义在类里面,方法外面(注意区别与局部变量的不同)

2.练习:定义一个学生类
public class Student {//成员变量String name;int age;char sex;String grade;//成员方法public void study(){System.out.println("学习");}public void eat(){System.out.println("吃饭");}public void run(){System.out.println("跑步");}
}

 

三:类的实例化

1.什么是实例化

(1)定义了一个类,相当于在计算机中定义了一个新的类型(用户自定义类型)

(2)用类类型创建对象的过程,称为类的实例化。在Java中用new关键字实例化一个对象

Student stu=new Student();//stu就是一个引用,指向了Student对象,通过引用来访问对象的属性或者方法

2.类和对象的说明

(1)类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员

(2)类是一个自定义的类型,可以用来定义变量

(3)一个类可以实例化多个对象,每new一个对象出来,就会开辟一块内存,占用实际的物理空间

(4)类就像菜谱一样,类实例化对象就像按照菜谱炒菜一样

四:认识this

1.为什么要有this引用

当形参名和成员变量名形同的时候,分不清到底谁给谁赋值,this就很好的解决这个问题

2.什么是this引用

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

(2)需要注意的是,this引用的是调用成员方法的对象,只能应用于类的成员方法中

3.this引用的特性

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

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

五:对象的构造及初始化

1.如何初始化对象

(1)我们知道局部变量必须要初始化才能使用,但是为什么成员变量(属性)声明之后之后没有初始化依然可以使用,这就是不同点,这就引出了构造方法的概念

(2)在讲构造方法之前,先了解成员变量没有被初始化的值。基本数据类型默认是0,引用类型默认是null

2.构造方法

(1)什么是构造方法:构造方法也称构造器,是一个特殊的成员方法(注意:构造方法是成员方法)。名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期中只调用一次。

(2)注意:构造方法的作用就是对对象中的成员进行初始化,不负责给对象开辟空间

(3)当一个类中没有任何一个构造方法的时候,Java会自动提供一个不带参数的构造方法;但是当一个类中由一个构造方法时,Java不会自动提供构造方法了,不带参数的构造方法也不会提供了,如由需要,在写带参数的构造方法时,最好多写一个无参的构造方法。

(4)特性:

        1)名字必须与类名相同

        2)没有返回值类型,设置为void也不行

        3)构造方法之间,是可以构成方法的重载(是不是又忘记重载啥意思了:满足以下条件就是重载【一是方法名相同,二是参数列表不同(包括个数、类型……),三是返回值不做要求】)

3.默认初始化 

(1)回答上述问题:为什么局部变量在使用时必须初始化,而成员变量可以不用呢?因为对象那个空间被申请好之后,对象中包含的成员就是已经设置好初始值的了。

(2)完成一个对象的构造,分两步:

        1)分配内存

        2)调用合适的构造方法

(3)实现一个new语句,JVM就需要做很多步骤:

        1)检测对象对应的类是否被加载,没有被加载就需要加载

        2)为对象分配内存

        3)处理并发问题(多个线程同时申请对象,JVM要保证给对象分配的空间不冲突)

        4)初始化分配空间

        5)设置对象头信息

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

4.就地初始化

在声明成员变量的时候就赋初始值

六:static成员

1.static修饰成员变量

(1)定义:static修饰的成员变量,称为静态成员变量,也称类变量

(2)特性:

        1)不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

        2)既可以通过对象访问,也可以通过类名访问,但一般是使用类名访问

        3)类变量存储在方法区

        4)生命周期与类同存同毁

(3)小结:
        1)普通成员变量:属于对象,放堆上,访问方式:对象的引用.xxx

        2)静态成员变量:不属于对象,放方法区,访问方式:类名.xxx

2.static修饰成员方法

(1)定义:static修饰的成员方法,称为静态成员方法,也称类方法

(2)特性:

        1)不属于某个具体的对象,是类方法

        2)既可以通过对象访问,也可以通过类名访问,但一般是使用类名访问

        3)·不能在静态方法中直接访问任何非静态成员变量

        4)·静态方法中不能直接访问任何非静态方法,因为非静态方法有this参数,在静态方法中无法传递this引用

七:代码块

1.概念及分类

使用{}定义的一段代码称为代码块。有以下四种类型:

        1)普通代码块

        2)构造块

        3)静态块

        4)同步代码块(目前不做过多讨论)

2.普通代码块

        定义在方法中的代码块。直接使用{}

3.构造代码块(实例代码块)

(1)定义在类中的代码块,一般用于初始化实例成员变量。

(2)举例:

4.静态代码块

(1)使用static定义的代码块为静态代码块,一般用于初始化静态成员变量

(2)举例:

(3)注意:

        1)静态代码块只会执行一次,不管会生成多少个对象

        2)静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的

        3)若一个类中包含多个 静态代码块,在编译时,编译器会按定义先后依次执行

        4)构造代码块只有在创建对象的时候才会执行

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

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

相关文章

国内就能使用的chatgpt网页版,包含AIGC应用工具

Chatgpt的出现在多个领域带来了重要的影响。它能够显著提高我们的工作效率,无论是编写文案代码还是回答常见问题,都能在短时间内完成任务。通过Chatgpt,我们能够迅速获取所需答案。随着人工智能技术的不断发展,相信在未来AI能够带…

elasticsearch 8.5.3问题记录

一:解决 elasticsearch 高版本 warning: ignoring JAVA_HOMEC:\Program Files\Java\jdk-11; using bundled JDK if defined JAVA_HOME (set JAVA_HOME%JAVA_HOME%; )示例版本Elasticsearch 8.5.3 可以与 JDK 11 兼容,但不支持 JDK 17。确保选…

Spring Boot中实现发送文本、带附件和HTML邮件

SpringBoot实现发送邮箱 引言 在现代应用程序中,电子邮件通常是不可或缺的一部分。在Spring Boot中,你可以轻松地实现发送不同类型的邮件,包括文本、带附件和HTML邮件。本博客将向你展示如何使用Spring Boot发送这些不同类型的电子邮件。 步…

详细解说iptables 高阶用法,用来完成哪些高效率网络路由策略场景,iptables 实现域名过滤,Linux如何利用iptables屏蔽某些域名?

详细解说iptables 高阶用法,用来完成哪些高效率网络路由策略场景,iptables 实现域名过滤,Linux如何利用iptables屏蔽某些域名? Linux利用iptables屏蔽某些域名 以下规则是屏蔽以 youtube.com 为主的所有一级 二级 三级等域名。 iptables -A OUTPUT -m string --string &qu…

unocss+vite+vue3初使unocss

一、什么是UnoCss? UnoCSS 是一个即时的原子CSS引擎,而非一款框架,因为它并未提供核心工具类,所有功能可以通过预设和内联配置提供。它可以让你用简短的类名来控制元素的样式 原子样式也有很多选择,最著名的就是 Tail…

019 基于Spring Boot的教务管理系统、学生管理系统、课表查询系统

基于Spring Boot的教务管理系统、学生管理系统、课表查询系统 一、系统介绍 本作品主要实现了一个课表查询系统,采用了SSM(Spring SpringMVC MyBatis)的基础架构。 二、使用技术 spring-bootspring-MVCthymeleafmybatis-plusdruidLombo…

保护 Web 服务器安全性

面向公众的系统(如 Web 服务器)经常成为攻击者的目标,如果这些业务关键资源没有得到适当的保护,可能会导致安全攻击,从而导致巨大的财务后果,并在客户中失去良好的声誉。 什么是网络服务器审核 当有人想要…

Graph RAG: 知识图谱结合 LLM 的检索增强

本文为大家揭示 NebulaGraph 率先提出的 Graph RAG 方法,这种结合知识图谱、图数据库作为大模型结合私有知识系统的最新技术栈,是 LLM 系列的第三篇,加上之前的图上下文学习、Text2Cypher 这两篇文章,目前 NebulaGraph LLM 相关的…

Folium 笔记:MarkerCluster

在一张地图上以聚簇的形式显示大量的标记(markers) 举例: import folium from folium.plugins import MarkerCluster import randomm folium.Map(location[45.5236, -122.6750], zoom_start13) # 创建一个基本的地图marker_cluster Marker…

git 取消待推送内容

选择最后一次提交的记录,右键->软合并

k8spod就绪检查失败

pod 一直未就绪 kube-system metrics-server-7764f6c67c-2kts9 0/1 Running 0 10m kubect describe 查看 就绪探针未通过 Normal Started 3m19s kubelet Started container metrics-server Warning Unhealthy 5s (x20 over 2m55s) kubelet Readiness probe failed: HTTP probe…

安全性第一!OpenWRT配置SFTP远程文件传输,实现数据安全保护

文章目录 前言1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务,并结合cpolar内网穿透,创建安全隧道映射22端口,实现在公网环境下远程OpenWRT SFTP&#xff…

c++视觉检测-----Canny边缘算子

Canny边缘算子 cv::Canny()是OpenCV库中用于执行Canny边缘检测的函数。Canny边缘检测是一种广泛使用的图像处理技术,用于检测图像中的边缘。 以下是cv::Canny()函数的一般用法和参数: void cv::Canny(cv::InputArray image, // 输入图像&#x…

linux 给根目录扩容(lvm CentOS 7.6 kylinx86)

问题:Linux系统挂载到根目录的磁盘空间满了,如何扩容? 用命令:lsblk 可以查看磁盘和分区情况,可以发现磁盘vda下面的还有大部分空间没有使用。 操作步骤 1、使用 fdisk -l 查看硬盘序号,并用 fdisk 对硬盘操作,格式化成lvm的格式 (用命令lsblk可以看到,挂载到根目录…

【软件测试】博客系统项目测试报告(ssm项目)

文章目录 一. 报告概要二. 引言三. 测试环境四. 测试执行概况及功能测试1. 手工测试1.1 编写测试用例1.2 执行部分测试用例 2. 自动化测试Selenium2.1 编写测试用例2.2自动化测试代码1. 自动化测试工具类2. 博客登录页测试3. 博客注册页4. 博客详情页5. 博客编辑页6. 博客列表页…

【git merge/rebase】详解合并代码、解决冲突

目录 1.概述 2.merge 3.rebase 4.merge和rabase的区别 5.解决冲突 1.概述 在实际开发中,一个项目往往是多个人一起协作的,头天下班前大家把代码交到远端仓库,第二天工作的第一件事情都是从服务器上拉最新的代码,保证代码版本…

12. Java异常及异常处理处理

Java —— 异常及处理 1. 异常2. 异常体系3. 常见Exception4. 异常处理4.1 try finally catch关键字4.2 throws和throw 自定义异常4.3 finally,final,finalize三者的区别 1. 异常 异常:在程序执行过程中发生的意外状况,可能导致程…

【List-Watch】

List-Watch 一、定义二、工作机制三、调度过程 一、定义 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 …

银河麒麟服务器x86安装ntp客户端,并配置成功可以同步时间

脚本 # 安装ntp客户端 sudo dnf install chrony # 配置 pool 2.centos.pool.ntp.org iburst给这一行加注释 sudo sed -i s/^pool 2.centos.pool.ntp.org iburst/#&/ /etc/chrony.conf # 添加3个阿里云NTP服务器 # echo -e "server ntp1.aliyun.com iburst\nserver nt…

【Solidity】智能合约案例——①食品溯源合约

目录 一、合约源码分析: 二、合约整体流程: 1.部署合约 2.管理角色 3.食品信息管理 4.食品溯源管理 一、合约源码分析: Producer.sol:生产者角色的管理合约,功能为:添加新的生产者地址、移除生产者地址、判断角色地址…