Java笔记——进阶Java——面向对象编程

目录

一、概念

二、类和对象

1、什么是对象

2、类的创建

2、类的属性

3、类的方法

1、方法详解

2、方法重载

3、构造方法

四、拓展与练习

1、拓展

2、练习


一、概念

编程语言有两种思想

面向过程编程(Procedure Oriented Programming)简称POP语言是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。

面向对象编程(Object Oriented Programming)简称OOP语言,是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

举个栗子:

你去一个地方游玩,比如说泰国,你有两种方式

1)、自己前往:规划路线、了解当地风俗、办签证、买飞机票、出发、到达目的地、订酒店完成一系列操作。

2)、跑到一个旅行社:只需要说我想去泰国旅游约好时间,到时候直接出发就行了

第一种方法就是面向过程,需要你自己一步一步去完成;第二种就是面向对象,这个旅行社就相当于一个方法,他们将过程全部打包,你只需要去确认旅行地点与旅行时间即可。

不妨在想想,可能我们在方法1时,已经准备出发了,突然可能因为某些事你不想去泰国了,你想去韩国玩一圈,那么是不是之前的一系列操作你又要重新规划;而在方法2时,你只需要说:我这个礼拜有事去不了泰国了我想下礼拜去韩国,什么都不用管,到时间直接跟团就行了。第二种方法是不是灵活型很高,降低耦合度(不受约束),想去那都行。

总的来说

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。(就相当于我们旅游抱团,我管你怎么搞,最后结果是我去了我想去的地方)

而Java就是面向对象编程语音,在Java中通过类和对象实现面向对象思想

二、类和对象

1、什么是对象

我们不妨先思考一下,这个世界是有什么构成的呢?

有人说世界是由无数原子组成的

有人说世界是由无数物体组成的

有人说世界是由无数事物组成的

.......有很多回答,并没有明确的答案

但在程序员眼里,世界的组成最为明确:世界是由无数个对象组成的,也就是一切客观存在的事物都是对象,即万物皆对象。通俗的讲就是看的到摸得着并真实存在的就是对象。比如一辆车,一个水杯,一个人....。

对象的特征和行为

在现实生活中特征是能够描述一个事物的具体信息,一般是一个名词;行为是表示该事物可以做什么,一般是一个动词。比如下图

上图中的玻璃杯我们可以这么描述:这是一个200ml轻便的玻璃杯,我可以用它来装水

一个对象的特征和行为有很多,上图只是举了一点例子

而在程序中我们称特征为属性,代表对象有什么;称行为为方法,代表对象能做什么,那么在程序中如何模拟一个对象呢

首先,在程序当中,必须具有和现实中相同的对象,用以模拟现实世界。

然后,使用程序中的对象代表现实中的对象,并执行相关操作,进而解决现实问题。比如上图中哈士奇在代码中的描述

2、类的创建

现实中的对象多数来自于模板,程序中的对象也应该具有模板。比如一张汽车设计图,这张设计图纸规定了该汽车所有的组成部分,包括外观、内部结构、安全参数等具体信息,但是这些外观的规划、内部结构等都是想象出来的,只有在按照设计图生产出汽车,而这个汽车才是真实存在的,所以汽车被称为现实中的对象,而设计图被称为模板。而在程序中通过模板设计出来的实体才是对象,而承载这个对象的模板被称为类。

怎么说呢,就像现在面前有一只箱子,给你说里面有只小狗,这时候你会想它的样子,但只会有个模糊的想法。而只有在打开箱子看到了这个实体,你才知道哇,原来是一只哈士奇呀,你才会最终确定你的想法;

这里的小狗就是一个主观存在的事物,你想的小狗是这种样子的,而我想的小狗又是另一种样子的,我们并不确定里面的小狗到底具体是什么样的,你只会有一个较为模糊的概念;而在打开箱子发现是只哈士奇的时候,你和我就都会知道哈士奇的各个特征,比如有着小狗的所有特征和行为,也有着自己的独有行为拆家,这时候哈士奇就是一个客观存在的事物,而小狗只是用来代表像哈士奇这种个体;

换到程序中哈士奇就是一个对象,而小狗就是这个对象的模板,而模板被称为类,这个类就可以代表哈士奇、柴犬、牧羊犬等等这些个体对象的特征和行为。

类的定义

格式:public class 类名{

         //定义属性

         格式:变量类型 变量名;

         //定义方法

         格式:访问修饰符 返回值类型 方法名 (参数列表) {}

}

具体如下图所示:

类的使用

创建一个对象:类名 对象名 =  new 类名();

通过对象名.具体的方法和属性来进行访问操作

过程说明:

创建对象:Dog dog = new Dog();

‘=’的右边是一个值,‘=’左边是它类型的变量,当你一旦执行new Dog()时将会在JVM虚拟机中堆的位置为其分配一个空间,将Dog里面的属性和方法都会存在这个空间中,然后会生成一个地址。所以输出它时会显示一个内存地址。(JVM虚拟机后面再了解,只需知道这个东西存在这里)

然后通过‘=’左边的Dog类型的dog来接收这个地址,而这个dog在JVM虚拟机存放的位置是在栈中,这时候dog指向new Dog()这个对象的地址,所以dog可以操作这个地址中的属性和方法,也叫对象名;

dog.breed;这里的点代表着“的”的意思,比如:dog代表狗的一个对象,用dog点里面的属性,那么就是狗的品种、狗的年龄、狗的毛色、狗的睡方法、狗的吃方法.....。

每当new Dog()执行一次就相当于创建了一个对象,而创建的每个对象都是不同的,都会在内存空间中开辟一个独有的空间。所以这时候我们也称创建对象为实例化一个类,在这里不得不再说一句,类是个想象出来的东西,就像现实生活中的狗一样,它是我们对狗这种动物的一个统称,而只有哈士奇、柴犬这些具体的个体才是对象。所以说类是虚构的,对象是真实存在的。

总结一下(类和对象的关系)

类:定义了对象应具有的特征和行为,类是对象的模板

对象:拥有多个特征和行为的实体,对象是类的实例

2、类的属性

 之前学习局部变量时,要求必须先赋值在使用,否则编译错误;而对于成员变量来说,未赋值使用时,并不会报错,因为Java虚拟机赋予了成员变量默认值。

成员变量与局部变量的区别

序号

类型

成员变量

局部变量

1

定义位置

类的内部,方法的外部

方法或方法的结构中

2

使用的范围

本类有效

从定义行到包含其结构结束

3

默认值

与数组的默认值一样

无默认值,必须初始化才可使用

4

命名冲突

可与局部变量重名,但局部变量优先执行

在其使用范围内,不允许重名

具体代码实现

3、类的方法

1、方法详解

方法的声明(代表对象能做什么)

组成:访问修饰符 返回值类型 方法名(形参列表)

方法的实现(代表对象怎么做)

组成:{}

方法声明就是你告诉别人我从今天开始要好好学习,方法的实现就是你要怎样去实现好好学习这个事情,别人不会关注你如何实现的这个过程,别人只会关注你最终的学习成绩如何。

各个名词代表的涵义:

访问修饰符:方法允许被访问的权限范围,具体后面再说

返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值

方法名:定义的方法的名字,必须使用合法的标识符

参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开

根据方法是否带参、是否带返回值,可将方法分为四类:

1)、无参无返回值方法

如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法。

例如:现定义了一个方法名为 introduce ,没有参数,且没有返回值的方法,执行的结果如下图所示

2)、无参带返回值方法

如果方法不包含参数,但有返回值,我们称为无参带返回值的方法。

例如:下面的代码,定义了一个方法名为 avg ,无参数,但返回值为 double 类型的方法,执行的操作为,求该名学生的平均分,并返回结果

在 avg 方法中,返回值类型为 double类型,因此在方法体中必须使用 return 返回一个double类型的值。

注:

1:带了返回值的方法,可以将该方法看成一个值来进行使用

2:如果方法的返回类型为 void ,则方法中不能使用 return 返回值!

3:方法的返回值最多只能有一个,不能返回多个值

4:方法返回值的类型必须兼容,例如,如果返回值类型为 int ,则不能返回 String 型值

5:若加了返回值,必须return,否则出错

3)、带参无返回值方法

有时方法的执行需要依赖于某些条件,换句话说,要想通过方法完成特定的功能,需要为其提供额外的信息才行。我们可以通过在方法中加入参数列表接收外部传入的数据信息,参数可以是任意的基本类型数据或引用类型数据。

我们先来看一个带参数,但没有返回值的方法:

下面的代码定义了一个 avg 方法,带有一个int类型参数 subjects ,实现一个简单的计算平均分操作。

调用带参方法与调用无参方法的语法类似,但在调用时必须传入实际的参数值

注:

1:带参方法,调用时必须传入实际参数值,负责出错

2:带参方法,传入实际参数值时,必须对应其数据类型

3:需要添加多个参数时,必须一一对应,负责出错

4:当方法参数有多个时,多个参数间以逗号分隔

4)、带参带返回值方法

如果方法既包含参数,又带有返回值,我们称为带参带返回值的方法。

下面的代码,定义了一个方法名为 avg_1 ,参数为科目数subjects,但返回值为 double 类型的方法,执行的操作为求该名学生的平均分,并返回结果

 

 

2、方法重载

有些情况下,对象的同一种行为可能存在多种实现过程。比如:人再吃这个行为上,同样是吃你吃米饭是嚼完咽下去,吃药时不嚼直接喝水咽下去,口香糖嚼完不会咽下去,一个方法具备多种实现方式,这时候就需要方法重载。

重载(Over load):一个类中定义多个相同名称的方法

特点:

1)、方法名相同

2)、参数列表不同(类型、个数、顺序)

3)、与访问修饰符、返回值类型无关

调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法;

比如:当我们写一个打印机时,想要打印全部基本类型的值时;

我们先试一下普通方法

再试一下重载操作

感受到重载的好处了吗,就是屏蔽使用者的差异、灵活、方便,不需要定义太多方法名,在一个相同的行为上,通过重载可以实现多种效果,而调用时只需一个方法名,传入不同参数即可。

3、构造方法

构造方法:类中的特殊方法,主要用于创建对象

特点

1)、名称与类名完全相同(大小写也不行,在Java中非常敏感大小写)

2)、没有返回值类型

3)、创建对象时,触发构造方法的调用,不可通过句点手动调用

构造语法:

访问修饰符 类名(形参列表){}

比如:当代码执行new Student();触发对象创建,对象创建的过程:会先在内存中开辟一个空间,然后调用构造方法时,先为类中的属性初始化,在执行构造方法中的代码,最后将这个这个空间的地址赋给一个叫Student类型的stu变量上,就可以通过这个stu来访问这个类中的元素在为其一一赋值,如下图所示:

构造方法也可以重载,遵循重载规则

注意:当你没有定义显示构造方法时,编译器会默认提供一个无参构造方法,但当你创建了有参构造函数时,默认的无参构造会失效。

所以当你定义一个有参构造方法时,如果还想使用无参构造,那么你就要手工在创建一个无参构造方法

有参构造函数的用途主要是为了给类中的属性初始化值,如图

这里需要注意的有参构造方法中值输入的顺序要和你的形参列表一一对应,就像有参方法的规则一样。

四、拓展与练习

      1、拓展

this关键字的使用

当成员变量与局部变量名义相同时,编辑器会优先使用局部变量

如下图所示:

而有时候我必须要使用成员变量,这个时候就使用this作为前缀来区分两者的差别

this是类中的默认引用,代表当前实例;当类服务于某个对象时,this则指向这个对象。

比如创建s1对象时,this.name 就是指向s1空间中的name;当创建s2对象时,this.name就是指向s2空间中的name。

2、练习

1)、使用面向对象编程来模拟一个计算机,提供一个将基本类型转换字符串的方法:

String.valueOf(需要转换的类型);

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值