Java基础(09)——面向对象基础


版权声明

  • 本文原创作者:清风不渡
  • 博客地址:https://blog.csdn.net/WXKKang

一、面向过程和面向对象

  学习完之前的内容之后,现在我们来进行面向对象的学习,我们常常听人说——Java是一个面向对象编程的语言,它的最重要的一个特点就是面向对象,那么,到底什么是面向对象呢?我们引用一下面向过程这一编程思想,将它们两者进行比较,这样更有助于我们来了解面向对象,下面我们通过生活中一个小小的例子来引入我们的面向对象吧 ~ ~

  生活中,我们每天都要做的事情是什么呢?——吃饭,现在我们就来用面向过程和面向对象这两种方式来吃饭,体会一下两者的区别:

面向过程:

面向过程图片
  通过上面的流程图我们可以看到,从开始做饭到做好饭开始吃,都是要我们一步一步去做的,从第一步开始系统的完成所有操作之后我们才能得出结果,这就是面向过程

面向对象:
面向对象图片
  当然,我们吃饭也不一定非要自己去做,我们可以去餐馆吃呀,将“做饭”的程序交给厨师处理,我们只需要等着他做好端上饭桌直接开吃就可以了,这样是不是我们做的工作就简单了许多呢?下面我们就来系统的区分一下它们的区别吧:

  面向过程是把一项工程分解为一个个的功能模块,用函数来实现。函数是面向过程的核心。面向过程=数据+算法,面向过程的思想在于解决问题分第一步,第二步,第三步等

  面向对象是把一项工程看成是一个个对象组成,这些对象之间的相互关系构成了一个项目,类和对象是构成面向对象的程序的主体。面向对象=对象+消息,面向对象的思想在于找出对象,让对象去做这第一步,第二步等


二、面向对象的特点与特征

  面向对象的思想特点在于它是一种更符合我们思想习惯的思想,可以将复杂的思想简单化,将我们从执行者变成了指挥者,角色发生了转变,面向对象开发就是不断的去创建对象、使用对象、指挥对象去做事情

  面向对象的三大基本特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)


三、对象和类

1、对象

  既然Java语言是一种面向对象的语言,那么,到底什么是对象呢?答案就是:“万物皆对象”,对象(object)代表现实世界中可以明确标识的一个实体,大到整个宇宙,小到一只蚂蚁,只要是可以明确标识的实体,它们都是对象,并且,每个对象都有自己独特的状态标识和行为对象的属性(attribute,或者状态(state)),比如说每个人都拥有自己的姓名和身份证号,那么这两者就是这个人的属性
  而对象的行为由方法(也称函数)定义,调用对象的一个方法,就像是在命令对象完成一个动作,比如我们可以定义教师进行讲课的行为,教师对象就可以调用“讲课”这一方法,执行“讲课”的动作

2、类

  那么,我们怎样去创建一个对象呢?这就得用到类了,什么是类呢?这世间的东西有很多很多,我们可以通过将事物的公共特性进行归类后产生类,那么,这个类就描述了这个事物的共性,一个类就相当于一个模板,我们可以根据这个模板去做出具体的实际对象,即对象的抽象是类,类的具体化就是对象

例如: 现在有王某某、赵某某、徐某某、袁某某这四个学生,他们都有一个共同的特性——他们都是学生,这样我们就可以创建一个学生类,通过这个学生类我们可以创建(实例化)出某个对象:
对象和类图片

3、抽象

  抽象方法是面向对象中最基本的方法,也是最重要的方法之一

  在面向对象过程中,知道对象是什么但总感觉缺乏一种方法来实现面向对象,要实现面向对象就是要用抽象的方法来归纳对象类型,对象的属性和行为以及对象协作关系
  抽象是通过特定的实例抽取共同特征之后形成概念的过程,它强调主要特征、忽略次要特征。一个对象是现实世界中一个实体的抽象,一个类是一组对象的抽象

  写了这么多概念化的东西,光靠脑袋想理解起来是挺难的,让我们来愉快的做一个例子,通过这个例子来理解它们吧 ~ ~

例: 汽车是我们生活中很常见的一个事物了,我们也知道它们有很多种类型,那么我们怎样去抽象出一个汽车概念来描述所有汽车呢?首先我们来看看它们的主要特征吧:

汽车图片
  通过上图中的“汽车”我们了解到了汽车的一些共有的特性,现在就让我们使用抽象方法来提取所有汽车的共性,但是忽略某个汽车独有的特征(如有的汽车有四个轮胎,有的只有三个,这里抽取出轮胎数量即可,不需要关心它的具体数量),来抽象出一个类吧,如下:

public class Car{
	/*
	原创作者:清风不渡
	博客地址:https://blog.csdn.net/WXKKang
	*/
	private String trademark;	//品牌:宝马、奔驰等
	private String fuel;		//燃料:汽油、柴油等
	private int tyre;			//轮胎数量:三个或四个等
}

  这样,我们就通过抽象方法来抽象出了一个简单的汽车类

4、面向对象的常见术语

  下面我们就来介绍一下面向对象中的常见术语以作了解吧 ~ ~
  面向对象的常见术语有:OO(面向对象)、OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)、OOT(面向对象测试)

  • OOA:面向对象分析。实现分析现实业务,抽象出业务流程和业务对象。通常和具体编码技术无关,只和业务有关
  • OOD:面向对象设计。选择具体技术(如Java、.Net)实现业务流程和业务对象,通常和具体技术紧密相关,用于实现业务
  • OOP:面向对象编程。例如Java、.Net等,它是一种程序开发的方法,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性
  • OOT:面向对象测试
  • OOAD:即OOA和OOD的结合在一起的统称

四、汽车类实例

1、完整汽车类

  上面我们通过分析汽车的共同特征创建出了一个简单的汽车类,但是对于一个完整的类来说,它是缺少一个东西的,一个事物不仅有它的属性,还有属于它的动作。那么对于一个类来说它不仅有属性,还有方法(动作),那么就让我们再来完善一下它的”跑”的动作吧,其实就是在类中创建函数,代码如下:

public class Car{
	/*
	原创作者:清风不渡
	博客地址:https://blog.csdn.net/WXKKang
	*/
	public String trademark;
	public String fuel;
	public int tyre;

	public void run(){
		System.out.println("一辆品牌为:--"+trademark+"--的车跑起来了 ~ ~");
	}
}

  那么现在这个汽车类就创建好了,我们现在就可以通过这个类去实例化出一个对象了,那么我们怎样去通过这个类创建对象呢?

2、通过汽车类创建对象并调用其方法

创建对象的注意事项:

  1. 使用new关键字,和我们动态创建数组一样
  2. 需要给对象起一个对象名,应遵从驼峰命名规范
  3. 声明对象的类型,即Car类型,叫做类类型

现在就来创建一个Car对象吧,代码如下:

//java中使用new关键字创建对象,在堆内存中开辟一个空间,产生一个实体
Car theCar = new Car();

创建出一个对象之后,我们就可以通过它来调用对象成员了,具体分为以下两种:

  • 调用成员变量—— 对象名.成员变量名
  • 调用成员方法——对象名.成员方法

话不多说,直接上代码:

public class Demo{
	public static void main(String[] args){
		//创建Car对象
		Car theCar = new Car();
		//调用成员变量并为其赋值
		theCar.trademark = "奔驰";
		//调用成员方法
		theCar.run();
	}
}

运行结果:
汽车类
  现在,我们就可以创建一个类,并且可以通过这个类实例化出一个对象,然后再通过这个对象去调用它的属性和方法了,这样的话,如果我们有需要,我们可以将很多东西封装成一个类,使用的时候直接调用就可以了,大大提高了代码的复用性


五、局部变量和成员变量

  • 成员变量: 定义在类中的变量
  • 局部变量:定义在方法中的变量

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

1、应用范围:

  • 成员变量:在整个类中都有效
  • 局部变量:只在其声明的方法内有效

2、生命周期:

  • 成员变量:它属于对象,它随着对象的创建而创建,随着对象的消失而消失
  • 局部变量:使用完马上释放空间

3、存储位置:

  • 成员变量:储存在堆内,堆内的实体在没有引用指向其时才进行回收清理
  • 局部变量:储存在栈中,当不再使用时马上就会被清理释放

4、初始值:

  • 成员变量:如果没有赋初值时,它有默认值(如int类型的初始值为0)
  • 局部变量:如果需要使用必须手动初始化

注: 在这里我们需要注意一个细节:

public class Car {
	/*
	原创作者:清风不渡
	博客地址:https://blog.csdn.net/WXKKang
	*/
	
	//成员变量
	public String trademark;
	public String fuel;
	public int tyre;

	public void run(){
		//局部变量
		String trademark = "宝马";
		System.out.println("一辆品牌为:--"+trademark+"--的车跑起来了 ~ ~");
	}
}

  上方有两个名为trademark的变量,一个为成员变量一个为局部变量,当run();方法内的输出语句需要使用trademark变量时,它使用的是在同一个方法内的局部变量,即就近原则


六、匿名变量

1、概念

  匿名对象:没有名字的实体,也就是该实体没有对应的变量名引用

2、用途

  当对象对方法进行一次调用的时候,可以使用匿名对象对代码进行简化,如:

Car类代码:

public class Car {
	/*
	原创作者:清风不渡
	博客地址:https://blog.csdn.net/WXKKang
	*/
	public String trademark;
	public String fuel;
	public int tyre;

	public void run(){
		System.out.println("一辆车跑起来了 ~ ~");
	}
}

测试类代码:

public class Demo {
	public static void main(String[] args) {
		new Car().run();
	}
}

执行结果:
在这里插入图片描述
它对类中的方法进行一次性的调用 ~ ~

总结:

  1. 匿名对象设置的属性永远无法获取,因为没有引用变量指向那个对象
  2. 任何两个匿名对象使用==比较,永远返回false
  3. 匿名对象主要应用于实参

好啦,今天的对于面向对象基础的学习就到这里吧!记录学习,记录生活,我还是那个java界的小学生,一起努力吧!!
  欢迎各位看官评论探讨哟 ~ ~ 小生在此谢过了 ~ ~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值