【Java编程进阶】面向对象思想初识

news/2025/2/22 6:42:32/

在这里插入图片描述

推荐学习专栏:Java 编程进阶之路【从入门到精通】


文章目录

  • 1. 面向对象初识
  • 2. 类和对象
    • 2.1 类的定义
    • 2.2 对象的创建和使用
  • 3. 构造方法
  • 4. 方法重载
  • 5. static 关键字
    • 5.1 static 方法
    • 5.2 static 变量
  • 6. 对象的引用和 this
  • 7. 总结

1. 面向对象初识

在这里插入图片描述
之前我们学习了 C 语言,在使用 C 语言解决实际的问题时,我们会把解决问题的步骤封装成不同的函数,然后在需要使用时调用函数执行,这就是面向过程编程的思想。

使用面向过程使程序的流程十分清楚,例如完成早上去上学这件事情,我们要粗略做以下的步骤,只要以函数的形式详细的完成每个步骤,就成功的解决了这个问题:

  • 起床
  • 穿衣服
  • 刷牙洗脸
  • 上学

而面向对象中,我们可以抽象出一个学生类,该类中包含了上面的四个方法,此时我们并不需要按上面的步骤来完成。

在这里插入图片描述

可能你现在还没有理解到面向对象的思想,但是,事实就是面向对象的思想更加贴近现实的问题。Java 之所以受到程序员的喜爱,一个重要的原因就是面向对象的思想。你现在暂时可以这样理解,在一个大型的项目中,面向过程的思想显然是复杂难以实现的,而使用面向对象思想,不仅减少了代码的冗余,具有更好的可扩展性,而且更加贴近于我们日常解决问题的方式。相信在学完接下的内容,你也会对面向对象有更加深刻的理解。

2. 类和对象

Java 是面向对象的程序设计语言,类和对象是面向对象中十分重要的概念,类就是具有相同属性和行为的一类事物的抽象化,是对现实事物的描述,而对象就是类的实例化。例如在前面我们把学生抽象为一个类,而某一个学生就是这个类的实例化对象,他具有这个类的特征。

在这里插入图片描述

类是由属性和方法构成的,属性就是事物的特征,例如学生的姓名,而行为是事物执行的操作,例如学生上课。如下:

  • 属性
  • 行为

我们可以把类当做一种自定义的数据类型,那么我们就可以使用这个类来定义变量,这种类型的变量叫做引用类型的变量,也就是说,所有的类都是引用数据类型。

2.1 类的定义

我们一般分三步定义一个类:

  1. 定义类名
  2. 定义成员变量
  3. 定义成员方法
public class 类名 {// 成员变量数据类型 变量1;数据类型 变量2;// 成员方法方法1;方法2;	
}

其中的 public 是访问权限修饰符,表示可以跨类和跨包使用该类,类似的关键字还有 private ,protected 等,后面讲到。

示例:定义一个学生类,包含姓名,年龄属性和学习,唱歌方法。

public class Student{public Student(){//....}public Student(String name,int age){this.name = name;this.age = age;}public String name;public int age;//.....public void study(){System.out.println("正在学习");}public void sing(){//唱歌System.out.println("正在唱歌");}
}

2.2 对象的创建和使用

对象的创建语法:

类名 对象名 = new 类名();

示例:

Student stu = new Student();

使用对象的语法:

使用类的属性: 对象名.属性 
实用类的方法: 对象名.方法名()

示例:

Student s = new Student(); 
s.age = 18; //为属性age赋值为18 
s.sing(); //调用sing方法

3. 构造方法

构造方法定义在类中,是一种特殊的方法,用于构造出来一个类的实例对象时,对构造出来的类的对象初始化。

构造方法的名字与类名相同,没有返回值,你甚至不能定义为 void 类型,构造方法也可以重载,系统会默认为类定义一个无参构造方法,即默认构造方法。若显式定义了构造方法,则系统不会提供默认无参构造方法。

示例:

public class Student {public Student() {//....}public Student(String name, int age) {this.name = name;this.age = age;}public String name;public int age;//...
}

4. 方法重载

为什我们在上面定义了两个名字完全相同的方法呢?按照以往的理解,在对象调用方法时,如果出现两个相同的方法,程序并不知道我们调用的是哪一个方法。其实上面的程序并没有错误,于是我们引出了方法重载的概念。

如果两个方法的方法名相同,但是参数的类型不同,个数不同或者位置不同,我们说这两个方法发生了重载,需要注意的是方法重载和访问权限或者返回值类型无关。

示例:

    public int sum(int a, int b) {return a + b;}//方法重载public int sum(int a, int b, int c) {return a + b + c;}

5. static 关键字

被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。也就是静态的变量或者方法是该类实例化的每个对象公有的,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。

5.1 static 方法

static 方法又被称作静态方法,静态方法被该类实例的所有对象共享,不需要使用对象就可以访问,使用时需要注意一下几点:

  • static是没有 this 的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。
  • 在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
  • 虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

5.2 static 变量

static 变量又被称作静态变量,静态变量被该类实例的所有对象共享,不需要使用对象就可以访问。使用时需要注意一下几点:

  • 静态变量在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
  • 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

6. 对象的引用和 this

创建两个学生对象:

 Student stu=new Student("张三",20);Student stu2=new Student("李四",18); 

在我们创建上面的对象时,对象名 stu 其实是该对象的引用,指向该对象,存放了该对象的地址。我们实例化了两个 Student 的对象,当其中某一个对象要调用 Student 类的方法时,因为共有了一份方法的数据,所以程序并不知道是哪一个对象在调用该方法,此时就需要一个事物来指向正在调用方法的对象,这就是 this 关键字。

你还可以这样理解,在方法中将形式参数 name 传递给成员变量 name ,此时两个变量名相同,Java编译器为了区分两个变量,出现了 this 的概念,其中 this 代表了对象的成员变量或者成员方法。

this 还有一个重大的作用就是返回类的引用。例如使用 return this 来返回某个类的引用。此时这个 this 关键字就代表类的名称。如上面代码代表的含义就是 return student。可见,this 可以作为类的返回值,这才是this关键字最引人注意的地方。
在这里插入图片描述

this 关键字有三个作用:

  • 在构造方法中调用其他构造方法
  • 返回当前对象的引用
  • 区分成员变量名和参数名

示例:
请添加图片描述

7. 总结

本文初次探索了面向对象的思想和面向对象思想相关的一些概念,例如类,对象,方法等。在以后的学习中,实际是对面向对象思想的深入理解。

在这里插入图片描述

欢迎订阅学习Java编程进阶之路专栏,专栏文章持续更新!


http://www.ppmy.cn/news/8042.html

相关文章

BOSS直聘自动投简历聊天机器人的实现过程

这两年疫情,公司业务越来越差,必须得准备后路了,每天睡前都会在直聘上打一遍招呼,一直到打哈欠有睡意为止...,这样持续了一周,发现很难坚持,身为一名资深蜘蛛侠,怎么能这样下去呢?于…

【多尺度条形池化与通道注意力的图像语义分割】论文精讲

论文:论文链接 出处:中国图象图形学报 目录 1.摘要 2.网络结构 2. 1 改进的条形池化技术 2.2 二阶通道注意力机制 3.结果 1.摘要 目的 针对自然场景下图像语义分割易受物体自身形状多样性、距离和光照等因素影响的问题,本文提出 一种新的基于条形池…

Webpack 钩子介绍、手写 Webpack Plugin

目录 1. Plugin 用作和工作原理 1.1 Plugin 的作用 1.2 Plugin 的工作原理 2. Webpack 底层逻辑和钩子介绍 2.1 Webpack 内部执行流程 2.2 Webpack 内部钩子 2.2.1 钩子是什么 2.2.2 Tapable —— 为 Webpack 提供 Plugin 钩子 数据类型接口 定义 2.2.3 Compiler Hook…

【JavaScript】俄罗斯方块简单网页版

文章目录js制作简单网页版俄罗斯方块效果演示设计思路一、HTML网页结构代码二、CSS代码三、JS代码四、代码资源分享js制作简单网页版俄罗斯方块 程序虽然很难写,却很美妙。要想把程序写好,需要写好一定的基础知识,包括编程语言、数据结构与算…

blender指定地图影像数据作为背景

qgis导出一个层刚好温和 然后 切换到shading 默认只有表面化 bsdf 点击添加 图片纹理 选择图片,然后把那个颜色拦截到基础色就ok了,操作方法和ue类似 image.pnguv editing必须进入编辑模式 方可操作,如果要刚好铺满整个框,要开启那…

Java中常见的文件操作

作者:~小明学编程 文章专栏:JavaEE 格言:热爱编程的,终将被编程所厚爱。 目录 操作文件 File类 属性 构造方法 常见方法 重要方法的操作演示 文件内容的读写 FileInputStream OutputStream 按照字符读入 按照字符写入…

【华为OD机试真题2023 JAVA】相同数字的积木游戏1

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 相同数字的积木游戏1 知识点数组循环map 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小…

hive 数据倾斜问题排查及 hive 优化

文章目录1.2 Explain 实例介绍1.3 Explain 总结2. Hive 建表优化2.1 创建分区表2.1.1 分区表基本操作2.1.2 二级分区2.1.3 动态分区2.2 合适的文件格式和压缩格式2.2.1 目前使用的存储格式3. HQL 语法优化3.1 列裁剪与分区裁剪3.2 Group by3.3 Count(Distinct) 去重统计3.4 Map…