Java 基础入门篇(五)—— 面向对象编程

news2024/11/24 9:48:44

文章目录

  • 一、面向对象的思想
  • 二、类的定义与对象的创建
  • 三、对象内存分配情况
    • 3.1 两个对象的内存图
    • 3.2 两个变量指向同一个对象内存图
  • 四、构造器
    • 4.1 构造器的格式与分类
    • 4.2 构造器的调用
  • 五、 this 关键字
  • 六、封装
  • 七、标准JavaBean
  • 补充:局部变量和成员变量的区别


一、面向对象的思想

  面向对象: 把现实世界中的事物全部看成一个个的对象来解决问题的,即万物皆对象。面向对象编程,即使用对象中的方法来解决问题。其好处在于,代码符合人类的思维习惯,编程程序更简单,看程序更容易理解吧。

类(设计图): 相同事物共同特征的描述;对象(实例):对象是类的具体的实例。在 Java 中必须先定义类,才能得到对象。


二、类的定义与对象的创建

类中包含五种成分:成员变量、成员方法、构造器、代码块、内部类。类的定义格式如下:

在这里插入图片描述

成员变量的完整格式:修饰符 数据类型 变量名称 = 初始化值,一般无需为成员变量指定初始化值,存在默认值。默认值参考:

在这里插入图片描述

注意事项:

类名首字母建议大写,有意义且要满足驼峰。不要用关键字,要使用合法的标志符。
② 一个 Java 文件中可以定义多个类,但是只能一个类是 public 修饰的,而且 public 修饰的类名必须成为 Java 代码的文件名称,否则报错!

对象的创建: 类名 对象名 = new 构造器();
对象的使用:对象名.成员变量;对象名.成员方法


三、对象内存分配情况

对象是引用类型,创建后会在堆内存中进行存储,栈内存存储引用地址。

Java 的内存分配参考:Java基础入门篇(三)—— 数组的定义与内存原理

3.1 两个对象的内存图

在这里插入图片描述


3.2 两个变量指向同一个对象内存图

在这里插入图片描述

注意: 当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的垃圾。Java存在自动垃圾回收器,会定期进行清理。


四、构造器

构造器用于初始化一个类的对象,并返回这个对象的地址。

4.1 构造器的格式与分类

在这里插入图片描述

无参数构造器: 初始化一个类的对象,并返回这个对象的地址,里面的数据都是默认值。
有参数构造器: 初始化一个类的对象,并返回这个对象的地址,并且可以同时为对象赋值。

public class Car {
	private String name;
    private Double price;
	...
	//无参数构造器
	public Car(){
		...
	}
	//有参数构造器
	public Car(String name, Double price)(){
		...
	}
}

4.2 构造器的调用

在这里插入图片描述

如:

Car c = new Car(); // 无参构造
Car c1 = new Car("奔驰", 39); // 有参构造

注意事项:

任何类写出来自带一个无参数构造器,写不写都有;
如果定义了一个有参数构造器了,那么无参数构造器就消失了。此时,如果需要使用无参数构造器,必须自己写。


五、 this 关键字

this 代表了当前对象的地址,出现在有参构造函数和成员方法中,可以访问当前对象的成员变量和成员方法。如:

// 有参构造
public Car(String name, double price){
    // 注意:this在构造器中,代表构造器正在初始化的那个对象。
    System.out.println(this);
    this.name = name;
    this.price = price;
}
// 成员方法
public void goWith(String name){
    // 注意:this 代表当前访问该方法的对象
    System.out.println(this.name + "正在和" + name + "比赛");
    this.play();
}

六、封装

面向对象的三大特征:封装、继承、多态。

封装的基本思想: 决定属性和行为归属谁的问题

如:定义人类(名称,年龄,吃饭、睡觉)、定义圆类(半径,画圆)、定义门类(开门,高宽)…

如何更好的封装呢? 成员变量建议 private 私有化,只能本类访问了
合理暴露:提供成套的 getter 和 setter 方法暴露取值和赋值。

public class Car {
    private String name;
    private Double price;

    public Car(){ // 默认有无参构造函数
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
}

七、标准JavaBean

JavaBean 就是所谓的实体类(学生类,老师类,汽车类,票类,人类)

作用:创建对象,封装数据的。

标准Bean的书写要求:

成员变量建议 private 私有化,只能本类访问了
② 合理暴露,提供成套的 getter 和 setter 方法暴露取值和赋值。
③ 必须提供无参数构造器;有参数构造器是可写可不写的。


补充:局部变量和成员变量的区别

在这里插入图片描述


文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

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

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

相关文章

Java 基础入门篇(六)—— String 类详解

文章目录 一、String 类概述二、String 创建对象的方式2.1 创建对象的两种方式2.2 面试:两种方式的区别 ★2.3 常见面试题 ★ 三、String 类常用方法3.1 字符串内容比较3.2 常用 API:遍历、截取、替换、分割 一、String 类概述 java.lang.String 类代表…

Java 基础入门篇(四)—— 方法的重载与参数传递机制

文章目录 一、方法的定义二、方法的参数传递机制 ★2.1 基本类型的参数传递2.2 引用类型的参数传递 三、方法重载 一、方法的定义 方法的作用:封装一段代码的语法结构,可以被重复调用,以此提高代码的复用性,提高开发效率&#xf…

【VsCode远程开发】Windows SSH远程连接Linux服务器 - 无公网IP内网穿透

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

Java 基础进阶篇(一)—— static 静态关键字与单例模式

文章目录 一、static 静态关键字1.1 静态成员变量与实例成员变量1.2 静态成员方法与实例成员方法1.3 static 访问注意事项1.4 内存使用情况 二、工具类三、代码块四、单例模式4.1 饿汉单例4.2 懒汉单例 一、static 静态关键字 static:代表静态的意思,可…

KaliLinux安装burpsuite(超详细)

注意事项 1.注意linux位数 安装jdk之前先输出uname -a,看看kali linux是32位的还是64位,例如此处我的kali是32位的,因此需下载的是32位的jdk 2.jdk版本 jdk版本最好是oracle的,若使用的是openjdk很可能会出现burpsuite闪退现象…

远程访问本地jupyter notebook服务 - 无公网IP端口映射

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 转载自远控源码文章:公网远程访问jupyter notebook【cpolar内网穿透】 前言 Jupyter Notebook&am…

【Linux】信号的保存信号的捕捉信号集零碎知识点总结

【Linux】信号的保存&信号的捕捉&信号集&零碎知识点总结 一、信号的保存1.1 信号几种概念1.2 信号在内核中的表示 二、信号的捕捉了解用户态和内核态2.1 捕捉过程2.2 信号的捕捉方法2.3 信号捕捉规则2.4 多信号屏蔽问题 三、信号集3.1 概念3.2 信号集(s…

【视频教程解读】Window上安装和使用autogluon V0.7

1.使用conda安装的python环境 教程使用的是极简版miniconda,由于我们的电脑中安装了anaconda,所以不需要进行进一步安装。python版本为3.9,博客里面有anaconda和python版本的对应关系。注意查看版本autogluon V0.4需要3.8或者3.9和3.10,pip版…

2023年第二十届五一数学建模B题:快递需求分析问题-思路详解

一、题目简析 今年的B题是一道较为综合的题目,包括了数据分析、综合评价、时间序列预测、最优化问题以及概率估计问题。考察范围广,但是整体看来题目背景简单,切入点多,难度适中。 二、逐问思路 1.问题1:附件1为该快…

私有GitLab仓库 - 本地搭建GitLab私有代码仓库并随时远程访问「内网穿透」

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar内网穿透5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自远控源码文章:Linux搭建GitLab私有仓库,并内网穿透实现公…

迷你主机安装openwrt软路由系统(附启动盘制作教程+ISO、IMG镜像文件)

之前在迷你主机上刷了一个openwrt的软路由,安装过程分享给大家,镜像文件在文章末尾~ 一般需要做软路由系统的机器,是需要至少两个网口的,一个做wan口,一个做lan口 由于其他因素,不能直接将openwrt直接安装…

ChatGPT是什么?ChatGPT里的G、P、T分别指什么

文章目录 ChatGPT是什么GTP中的 生成式 是什么意思GTP中的 预训练 是什么意思GTP中的 变换模型 是什么意思 什么是Transformer什么是注意力机制 监督学Xi、无监督学Xi、强化学Xi ChatGPT是什么 GPT: Generative Pre-trained Transformer 生成式预训练变换模型 ChatGPT是由Ope…

学习RHCSA的day.02

目录 2.3常用简单命令 2.4使用Bash执行命令 2.5 命令帮助 2.3常用简单命令 常用系统工作命令 1、echo命令 echo命令用于在终端设备上输出字符串或变量提取后的值,语法格式为:“echo [字符串] [$变量]”。 这是在Linux系统中最常用的几个命令之一&am…

蒙蒂霍尔悖论

贝叶斯与频率主义对蒙蒂霍尔问题的解 在定义概率时,通常有两种思想流派:贝叶斯主义和频率主义。前者将概率视为我们对事件发生的信念程度,而后者则将其视为事件发生的相对频率。这篇文章介绍了使用贝叶斯和频率主义方法来解决著名的蒙蒂霍尔问…

C++每日一练:小艺照镜子(详解分治法)

文章目录 前言一、题目二、解题1.分析 总结 前言 大过节的,不想去看人后脑勺,就做点题来玩。挑了小艺照镜子,百分通过~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目 题目名称: 小艺照镜子 …

【论文解读】(如何微调BERT?) How to Fine-Tune BERT for Text Classification?

文章目录 论文信息1. 论文内容2. 论文结论2.1 微调流程2.2 微调策略(Fine-Tuning Strategies)2.3 Further Pretrain 3. 论文实验介绍3.1 实验数据集介绍3.2 实验超参数3.3 Fine-Tuning策略探索3.3.1 处理长文本3.3.2 不同层的特征探索3.3.3 学习率探索(灾难性遗忘探…

Baumer工业相机堡盟相机如何使用ROI感兴趣区域功能( PARTIAL SCAN ROI功能的优点和行业应用)(C#)

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具…

利用 ChatGPT4 回复的 markdown 文本生成 ppt

本篇博文不涉及账号以及基础网络知识,大伙可以自动搜索。 比如我最近要分享一篇关于 TCP 的分享,那么我可以设置如下 Prompt 我最近要做一篇关于 tcp 入门的 ppt 分享,帮我列出大纲以及需要注意的事项? 接下来就是 ChatGPT4 给…

RocketMQ的学习历程(3)----RocketMQ部署(docker版)

RocketMQ部署(docker版) 1. 部署开始前的准备 一台linux机器。(我这里使用的是阿里云的一个centos7的服务器)docker环境以及相关的简单知识。一些计算机网络的简单知识。(可以帮你透彻了解为什么这么部署) docker部署十分简单快捷…

JAVA85-135

JAVA85-135 字符集详解解码与编码方法 字符流FileWriter 拷贝文件夹字节缓冲流拷贝文件(一次读写一个字节)字节缓冲流拷贝文件(一次读写一个字节数组) 字符缓冲流控制软件运行次数 序列化流反序列化流/对象操作输入流打印流字节打…