第5天面向对象

Posted chenlei8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第5天面向对象相关的知识,希望对你有一定的参考价值。

 

1.面向对象的概述

1.面向过程

分析解决问题的所需要的步骤,然后我们用函数来一步一步的调用实现。

例子1.大象放进冰箱

1.打开冰箱

2.放入大象

3.关闭冰箱

 

例子2.五子棋的游戏开发

1.开始

2.白子先走

3.绘制棋盘

4.判断输赢

5.黑子再走

6.绘制棋盘

7.判断输赢

……

 

2.面向对象

OOPObject Oriented Programming面向对象编程

面向对象的思想是抽取一类具有相同属性和行为的事物。

冰箱:打开门,关闭

大象:走路

 

 

棋子:走,黑子和白

棋盘:绘制

规则:判定输赢

 

 

 

在java中万物都是对象。

 

2.

我们把某些具有相同的属性和行为的事物抽象成一类。

狗:

属性:颜色,眼睛,耳朵,重量,

行为:看家,睡觉,摇尾巴

 

属性颜色,四个轮子,方向盘

行为:跑,刹车

就是一个概念,:狗

对象是一个具体的实物如:京巴

类似是一个模板的东西,对象(实例)是根据这个模板所产生的样本。

:概念,是抽象的

对象具体

语法

class 类名{

属性

行为

}

类名和文件名要一致,首字母要大写如果类名是多个单词构成,那么每一个单词首字母都要大写 XxxYyyZzz

属性(成员变量)的定义:

数据类型  属性 [= 初始值];

中括号里面的可以没有,属性可以没有初始值。

行为方法

语法:

public [static] 返回值类型[void] 方法名(数据类型 参数名,{

 

[return 数据]

}

 

注意:类是一个概念,不能直接使用,必须使用这个类的具体的对象。

根据类来创建对象

语法

类名 变量 = new 类名();

 

一个文件中可以写多个类。

如何给一个具体的对象来赋值属性呢:

语法:

对象的变量.属性 = 具体值;

 技术分享图片

的对象的方法的调用:

语法

对象的变量名字.方法([参数]);

 

3.局部变量和成员变量的区别

局部变量:

1.在方法中或者在语句块中

2.局部变量必须赋初始值才能用;

3.都存储在栈中

4.生命周期:定义的时候产生,当前的方法的括号语句块的括号执行完毕就会消失。

成员变量(属性

1.在类里面定义

2.可以赋值,如果不赋值都有默认值。

3.存储在堆中

4.生命周期:随着对象的消失而消失会被jvm的垃圾回收器来回收掉

4.匿名对象

技术分享图片

 

技术分享图片

 

匿名对象是无意义的,因为在栈中没有一个变量对它做引用,很快就会被垃圾回收回收掉。 

实际开发中要避免匿名对象。

5.封装

将属性私有化,使用private关键字完成属性私有化,这种属性只有本类能访问。

目的:提高数据安全性,通过封装,可以实现对属性的访问权限控制,同时增加了程序的可维护性。

如果在其他类中直接访问一个带有private 的属性时报错。

技术分享图片

6.this关键

打印一个对象,输出是这个对象的地址jDK提供的一个地址)

this只能在类的对象方法中使用.

this代表当前调用这个this所在的方法的对象的自身

this可以在方法内区分同名的类的属性和参数,有this的一定是属性,没有this的一定是方法的参数名。

 技术分享图片

第一步java TestCar时,把TestCar.class载入jvm,main放入方法区,把main方法压栈

第二步加载Car.class进入jvm然后run方法introduce方法加载到方法区,堆中开辟一个空间创建了一个Car对象在栈中产生一个变量car指向堆中的对象。然后car对象三个属性赋值。

第三步carrun方法进栈,把car变量所指向的地址赋值给this关键字,执行方法体。

第四步run方法出栈,run中的this消失

第五步car变量消失,main出栈后消失

第六步:由于Car堆中的对象失去了变量的引用变成了匿名对象,所以也被回收。

 

7.构造器

构造器的语法:

public 类名数据类型 参数名,….{

 

}

目的:创建对象

构造器的特点:

   1.方法名和类名一致

   2.方法没有返回值没有void

   3.参数可有可无

技术分享图片

 

注意:如果类中没有带有参数的构造器,就可以使用一个隐藏的默认构造器来创建对象,如果一旦有带有参数的构造器,默认的构造器就会被覆盖。我们可以显式的定义出来默认构造器就可以使用了

通过this(实参列表)可以调用本类中的构造器,必须注意,this必须是在方法中的第一行

 技术分享图片

8.static关键字

1.修饰在属性

定义类属性:

static 数据类型 变量名;

 

属性访问:

类名.属性名(推荐使用)

对象.属性名

static修饰在属性上的内存结构

 技术分享图片

属性的生命周期:

User.class加载jvm时类属性就产生了。

Jvm消失时候类属性就消失了。

对象属性:

对象被创建的时候就产生了。

对象所在的方法执行完毕后就会被垃圾回收器回收掉。

2.修饰在方法上

语法

public static 返回值类型[void] 方法名(数据类型 参数,….{

方法

return 结果

}

方法调用

类名.方法名(推荐使用)

对象.方法名(不建议使用)

 技术分享图片

类方法中不能使用对象的属性

方法只能使用类属性。

9.单例模式

 技术分享图片

 

以上是关于第5天面向对象的主要内容,如果未能解决你的问题,请参考以下文章

第9天 面向对象

第12天 面向对象

第10天:Python 类与对象

第169天:面向对象基础概念(有待完善)

第158天:面向对象入门

第10天 面向对象