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

2023-11-05


一、面向对象的思想

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

类(设计图): 相同事物共同特征的描述;对象(实例):对象是类的具体的实例。在 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真题)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 基础入门篇(五):面向对象编程 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其

随机推荐

  • 【毕业设计】基于PLC的十字路口交通灯控制系统设计【仿真+源码+论文】

    摘 要 本次设计的课题是基于PLC的十字路口交通灯控制系统设计 传统的十字路口交通灯多采用单片机集成电路作为控制系统 单片机系统虽然在功能上能够实现十字路口交通灯的各种控制需求 但是单片机控制系统在设计时需要数字电路与模拟电路的完美结合 这
  • 基于跳表实现的轻量级KV存储引擎 项目总结

    参考 https github com youngyangyang04 Skiplist CPP 项目介绍 KV存储引擎 众所周知 非关系型数据库redis 以及levedb rockdb其核心存储引擎的数据结构就是跳表 本项目就是基于跳表
  • 5.0 Vue中使用webpack

    文章目录 webpack的基本使用 webpack中的插件 webpack打包发布 Source Map 注意 在实际开发中我们并不需要自己配置 webpack webpack中 的用法 在Chrome浏览器中安装vue devtools调
  • QT书籍分享——最全资料汇总

    QT从入门到精通 学习路线 市面上QT学习的书籍也挺多的 今天从学习路径上给大家一一盘点一下 并附上相关链接 大家可以根据需求下载哦 1 语言基础学习 学习QT最最最基础的当然是语言学习了 可以选择C 语言 也可以选择Python语言 C
  • 佛祖保佑,永无bug——springboot项目启动图案的修改方法

    在resources目录 与application yml文件同级目录 下创建banner txt文件 将下面的代码复制进去就好了 AnsiColor BRIGHT YELLOW ooOoo o8888888o
  • 动态规划-各种题型及思路整理(自用笔记,大神绕道)

    目录 简介 分类 基本思想 基本思路 状态转移方程 适用条件 一句话总结 应用 前缀和思想 简介 动态规划 dynamic programming 简称dp 是运筹学的一个分支 是求解决策过程 decision process 最优化的数学
  • 21天学习挑战赛——Python操作MySQL和SqlServer

    目录 1 pymysql模块 2 pymysql模块使用说明 2 1 pymysql操作流程图 2 2 创建连接对象 2 3 获取游标对象 2 4 用法举例 2 4 1 获取一条数据 6 4 2 获取多条数据 6 4 3 对数据进行增删改操
  • 未来社交媒体的变革者

    近日 Meta宣布了其认可的七大社交媒体趋势 这些趋势代表了未来社交媒体发展的核心方向 这些趋势中 生成式AI AR VR营销等引人注目的技术入选 预示着我们即将迎来全新的社交媒体时代 一 生成式AI 像人一样理解并回应 近年来 生成式AI
  • linux 非root用户 安装pyscipopt

    前提 实验室的服务器 我没有root权限 1 尝试用conda方法onda install channel conda forge pyscipopt 出现未知错误 搜遍百度谷歌stackoverflow都没有找到有人和我一样的问题 不知道
  • 基于Java的贪吃蛇小游戏

    一 开发思路 设定一个一定大小的且大小不可变的游戏窗口 在创建的窗口上绘制游戏的基本面板样式 使用提前保存的素材图标绘制一条静态的小蛇 使小蛇能够移动 实际只需蛇头坐标移动 每节身体覆盖前一节身体坐标 设置定时器Timer timer ne
  • Java的异常处理机制

    一 什么是java异常 java异常指在程序运行时可能出现的一些错误 如 文件找不到 网络连接失败 非法参数等 异常是一个事件 它发生在程序运行期间 中断了正在执行的程序的正常指令流 Java通过API中Throwable类的众多子类描述各
  • C# SuperSocket 手把手教你入门 傻瓜教程---9(CountSpliterReceiveFilter - 固定数量分隔符协议)使用COMMAND

    C SuperSocket 手把手教你入门 傻瓜教程系列教程 C SuperSocket 手把手教你入门 傻瓜教程 1 服务器单向接收客户端发送数据 C SuperSocket 手把手教你入门 傻瓜教程 2 服务器和客户端双向通信 C Su
  • Linux服务器wget:unable to resolve host address解决方法

    Linux服务器wget unable to resolve host address解决方法 问题 今天使用虚拟机安装linux系统镜像使用的是CentOS 在一切都准备好的时候 想要去安装Redis时碰到了wget unable to
  • 自定义九宫格控件NineGridLayout ,实现微信朋友圈图片九宫格显示

    前言 很多时候我们都在刷微博或者微信朋友圈的时候都会看到很多图片 而这些图片的显示跟我们平时很多控件的显示方式都不一样 而且 当我们仔细去观察后就会发现 他加载的图片都是根据图片数量动态加载的 根据不同的图片数量来用不同的布局显示 如下图
  • 硬件防火墙和软件防火墙的区别有哪些?

    什么是防火墙 防火墙 指由软件和硬件设备组合而成 在内部网和外部网之间 局域网与外网之间的保护屏障 就像架起了一面墙 它能使网络之间建立起一个安全网关 从而保护内部网免受非法用户的侵入 熟悉互联网的朋友一定对防火墙不陌生 不管是电脑自带的防
  • OBJ格式简单用法

    参考 https www cnblogs com hont p 5239725 html https zhuanlan zhihu com p 342244212 http zwqxin com archives opengl obj mo
  • ceph-deploy命令应用

    记录 336 场景 在CentOS 7 9操作系统上 使用ceph deploy创建ceph集群 部署集群的mon mgr mds osd rgw等组件 版本 操作系统 CentOS 7 9 ceph版本 ceph 13 2 10 名词 c
  • Flask简单调用Redis、MySQL和生成token及token验证

    项目地址 https github com MasonYyp myflask 1 安装python基础环境 安装flask pip install flask 安装redis pip install redis 安装操作MySQL的包 pi
  • 如家酒店房价爬虫

    爬取地址 http m homeinns com hotels J10013 如家精选 北京中关村东路店 首先 从chrome浏览器打开F12审查元素 价格是用背景图片形式展现的 我们先获取背景图片 图片url 图片地址为 http m h
  • Java 基础入门篇(五):面向对象编程

    文章目录 一 面向对象的思想 二 类的定义与对象的创建 三 对象内存分配情况 3 1 两个对象的内存图 3 2 两个变量指向同一个对象内存图 四 构造器 4 1 构造器的格式与分类 4 2 构造器的调用 五 this 关键字 六 封装 七