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

news2024/11/24 20:50:41

目录

一:了解面向对象

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.coloradmin.cn/o/1071302.html

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

相关文章

rails 常量自动加载和重新加载机制

在Rails中,有一个称为"常量自动加载和重新加载机制"的功能,它使得在开发和生产环境中能够自动加载和重新加载类和模块。这个机制允许您不必手动管理类的加载,使得开发更加方便。 快乐学习: 自动加载、重新加载 自动加…

Yii2全拦截路由catchAll的使用

定义:catchAll 路由(全拦截路由) 应用场景:网站维护的时候需要向用户抛出一个维护的页面,方便提醒用户 使用方法: 1、在应用配置中设置 yii\web\Application::catchAll 属性 2、新增对应的控制器方法 3、…

【Putty】win10 / win 11:SSH 远程连接工具 Putty 下载、安装

目录 一、Jmerter 连接 SSH 隧道的 mysql(不可行) 二、Putty 介绍 三、Putty 的下载 四、Putty 无需安装直接使用 五、Putty 使用 (1)我需要连接 ssh 隧道的 MySQL 参数如下 (2)Putty 使用教程 一、…

MA-SAM:模态不可知的三维医学图像分割SAM自适应

论文:MA-SAM: Modality-agnostic SAM Adaptation for 3D Medical Image Segmentation | Papers With Code 代码:GitHub - cchen-cc/MA-SAM: PyTorch implementation for MA-SAM 机构:a)高级医疗计算和分析中心,麻省总医院和哈佛…

华为云开源低代码引擎 TinyEngine 正式发布

随着企业对于低代码开发平台的需求日益增长,急需一个通用的解决方案来满足各种低代码平台的开发需求。正是在这种情况下,低代码引擎应运而生。它是一种通用的开发框架,通过对低代码平台系统常用的功能进行解构,将其划分为多个功能模块,并为每个模块定义了相应的协议和开发…

Go 语言中 panic 和 recover 搭配使用

本次主要聊聊 Go 语言中关于 panic 和 recover 搭配使用 ,以及 panic 的基本原理 最近工作中审查代码的时候发现一段代码,类似于如下这样,将 recover 放到一个子协程里面,期望去捕获主协程的程序异常 看到此处,是否会…

传输层TCP协议

前言 传输层的历史渊源可以追溯到计算机网络的早期阶段。在20世纪60年代和70年代,计算机网络主要是由一些简单的点对点连接组成的。这些连接通常使用专用的硬件和协议,例如串行线路和电话线路。在这种情况下,传输层的功能是由这些协议本身来提…

【SpringCloud】认识微服务

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 认识微服务 一、 服务架构演变1.1 单体架构…

Qt之进程通信-QProcess(含源码+注释)

文章目录 一、QProcess进程通信示例二、QProcess通信个人理解三、源码MainWindowProcessSenderMainWindowProcessSender.hMainWindowProcessSender.cppMainWindowProcessSender.ui MainWindowProcessRecvMainWindowProcessRecv.hMainWindowProcessRecv.cppMainWindowProcessRec…

【算法——双指针】LeetCode 18 四数之和

题目描述: 解题思路:双指针 四数之和与前面三数之和思路一样,排序后,枚举 nums[a]作为第一个数,枚举 nums[b]作为第二个数,那么问题变成找到另外两个数,使得这四个数的和等于 target&#xff0c…

吃鸡玩家必备神器!一站式提升战斗力、分享干货!

大家好,我是吃鸡玩家。在这个视频中,我要分享一个让你瞬间提高战斗力的神器,同时让你享受到顶级游戏作战干货的盛宴!让我们一起来了解吧! 首先,我们推荐绝地求生作图工具。通过这款工具,你可以轻…

用这些IDEA插件,让你早下班两小时

GenerateAllSetter:一键调用一个对象的所有setter方法 RestfulTool:自动显示所有URL接口,快速检索接口 SequenceDiagram:以图形界面形式显示方法调用链,方便阅读源码、梳理代码 CamelCase:变量下划线转驼峰命名 Rainbow Brackets:帮助程序员识别代码中括…

十五、异常(5)

本章概要 异常限制构造器 异常限制 当覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常。这个限制很有用,因为这意味着与基类一起工作的代码,也能和导出类一起正常工作(这是面向对象的基本概念)&#…

基于SSM的校园资讯推荐系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

关联规则挖掘:Apriori算法的深度探讨

目录 一、简介什么是关联规则挖掘?什么是频繁项集?什么是支持度与置信度?Apriori算法的重要性应用场景 二、理论基础项和项集支持度(Support)置信度(Confidence)提升度(Lift&#xf…

SSM - Springboot - MyBatis-Plus 全栈体系(十八)

第四章 SpringMVC SpringMVC 实战:构建高效表述层框架 一、SpringMVC 简介和体验 1. 介绍 Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就包含在 Spring Framework 中。正式名称“Spring Web MVC”来自其源模块的名称&#xff08…

OCR让点读笔如虎添翼

点读笔是一种智能学习工具,它可以通过识别文字来提供相应的语音或图像反馈。在实现文字识别功能时,点读笔通常会借助OCR(Optical Character Recognition,光学字符识别)技术。下面将详细介绍点读笔如何利用OCR技术实现文…

浅析人脸活体检测技术的两种方法

随着人脸识别技术日趋成熟,商业化应用愈加广泛,然而人脸极易用照片、视频等方式进行复制,因此对合法用户人脸的假冒是人脸识别与认证系统安全的重要威胁。目前基于动态视频人脸检测、人脸眨眼、热红外与可见光人脸关联等领先业界的人脸活体检测算法,已经取得了一定的…

Linux0.12内核源码解读(2)-Bootsect.S

作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功、源码解析、科技故事、项目实战、面试八股等更多硬核文章,首发于公众号「小牛呼噜噜」 文章目录 回顾计算机启动过程8086、80x86是什么意思?寄存器初始化CS:IPCPU是如何和ROM相连的?加载MBR到…

餐饮蛋糕鲜花便利店水果店外卖自提小程序开发

对于实体门店小微商家来说,做私域和复购永远是最划算的买卖。店里每天有新客到老客到,做好私域就可以零成本形成稳定客流而且还可以通过活动形成社交裂变和口碑效应。不做好私域和留存就是白白看着自己客户被同行一口一口吃掉。因此也就有了自提外卖小程…