第5天面向对象
Posted chenlei8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第5天面向对象相关的知识,希望对你有一定的参考价值。
1.面向对象的概述
1.面向过程
分析解决问题的所需要的步骤,然后我们用函数来一步一步的调用实现。
例子1.把大象放进冰箱
1.打开冰箱
2.放入大象
3.关闭冰箱
例子2.做五子棋的游戏开发
1.开始
2.白子先走
3.绘制棋盘
4.判断输赢
5.黑子再走
6.绘制棋盘
7.判断输赢
……
2.面向对象
OOP(Object 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对象三个属性赋值。
第三步:car的run方法进栈,把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天面向对象的主要内容,如果未能解决你的问题,请参考以下文章