当前位置: 首页 > article >正文

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

文章目录

  • 一、面向对象的思想
  • 二、类的定义与对象的创建
  • 三、对象内存分配情况
    • 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.kler.cn/news/16778.html

相关文章:

  • 05_从0运行,重定位,初始化,中断再到定时器
  • kafka单机配置
  • 探索三维世界【3】:Three.js 的 Geometry 几何体 与 Material 材质
  • 《QDebug 2023年4月》
  • 烟火识别智能监测系统 yolov5
  • 生物信息学中---数据集不平衡的处理方法
  • 小红书违禁词有哪些,小红书违禁词汇总分享
  • 来上海一个月的记录、思考和感悟
  • ffmpeg-mov-metadate不识别Bug修复
  • JUC多并发编程 Synchronized与锁升级
  • Spring的创建与使用
  • 两分钟成为 ChatGPT 国内高手【不要再拿ChatGPT当百度用了】
  • 武忠祥老师每日一题||定积分基础训练(三)
  • markdown二元运算符
  • Msfconsole使用永恒之蓝入侵Win7并上传执行可执行文件
  • 【学习心得】Python多版本控制
  • 常用半导体器件
  • 数字孪生可视化平台开发 打通现实与虚拟世界
  • springboot第12集:DAO功能代码
  • vue基本语法
  • 通关MyBatis(上)
  • 二本做程序员有出路吗
  • python异常及其捕获
  • BM50-两数之和
  • ovs-vsctl 命令详解
  • js判断是否为null,undefined,NaN,空串或者空对象
  • 第一章--第一篇--了解 ChatGPT
  • 框架学习之KOCA框架简介
  • 【python基础语法八】正则表达式
  • MIT教授Tegmark:GPT-4敲响警钟,百年后人类何去何从丨智源大会嘉宾风采