编程思维的发展史:
- 基于过程:从计算机角度 解决问题 C语言
- 面向过程:上帝视角 解决问题干预问题 C++ C#
- 面向对象: C++
- 面向接口
- 面向切面
- 面向微服务和分布式编程
1.面向对象(面试)!!!※※※※※
问:谈谈你对面向对象的理解?
答:
从程序猿的角度,把世界上所有的东西用代码进行合理的呈现,java引入了类的概念.类是对具有相同或者相似特征以及行为的一些对象的抽象化,对象是对类的具体化.
我们改变了传统一步一步按部就班编写代码的思维,把对象抽象成类,把类表示成属性和方法的集合体.属性描述的是类的名词特征,方法描述的是类的行为特征.
举个去饭店吃饭或者买个电脑玩游戏的例子
面向对象有三大特征:封装性、继承性、多态性
- 封装性指的是在类的内部,将属性设置为private,通过对外的公共的set及get方法对属性进行访问,根据需要在set方法中对属性值的有效性进行判断,保证属性值的合理性(安全)。
- 继承性,在类和类之间建立一种关系,有了继承关系后,子类就可以访问父类中允许访问的成员.把共同的成员写在父类中,子类仅保留了自己独有的成员即可,当增加子类后,只需继承父类即可,达到了代码复用的效果。继承是作为多态的前提的。
- 多态是同一父类类型,调用相同的方法后,表现出不同的状态.好处是当程序扩展后,代码的改动量最小。
-------------面向对象和面向过程的对比:
- 都是看待问题的一种思维方式,都能解决问题
- 面向过程着眼于所有的事情亲力亲为
- 面向对象着眼于找到一个具有特殊功能的对象,委托这个对象帮忙去做某件事情
注意:面向对象时一种思想,并不是一门编程语言
2.类
java中万物皆类
类是对具有相同或者相似特征以及行为的一些个体的抽象化
类是抽象的概念,我们把相同或者相似的特征称为属性(名词).把行为称为动作(动词)
属性用变量来表示,动作用方法来表示
3.对象
类是对象的抽象,对象是对类的具体化
4.类的构建
class 表示一个类
语法: 新建一个java文件,new java Class.
public class 类名{
}
类名必须和.java文件的名字完全一样
属性:
类中的属性允许是各种数据类型,一般不允许设置初始值,且位于方法外面,类里面,和方法平级
5.class和java文件的关系
一个java文件允许包含多个class,但开发规范不允许
内部类和lambda除外
注意:有且只有一个被public修饰的类,且该class的名字要和java文件的名字完全一致
6.对象的构建
使用类构建对象----------->把抽象化的东西具体化
类构建对象 <>类的初始化 <>初始化一个对象<==> 实例化一个对象
- 语法:
1)需要重新构建一个类,并且设置main方法
2)使用如下的方式构建一个对象
类名 对象的名字 = new 类名();
例如:Book book01 = new Book();
对象属性的访问:
- 语法:
对象的名字.属性的名字
例如:
book.name - 给属性设置值:
对象的名字.属性的名字 = 值;
book.name = “cc”; - 获取属性的值:
注意:如果不设置值,获取值的时候采用默认值
语法:
属性的类型 变量名 = 对象的名字.属性的名字;
例如:String bookName = book.name;
syso(bookNmae);或者syso(book.name);
7.面向对象中类的设计
- 1)明确类的名字,命名规范和标识符命名规范相同,注意首字母必须大写
- 2)明确属性的类型/个数和名字,根据需要确定即可
- 3)明确方法的返回值类型/参数列表和名字,根据需要确定
8.对象方法的调用
语法:
对象名.普通的方法调用的语法();
- 类中代码的复用:
类里面的属性和方法,可以被当前类的所有对象共享.但是A对象关于α属性的值专属于A对象的,B对象关于α属性的值专属于B对象.
代码的复用性和对象之间的隔离性共存!!!
9.类中方法对于属性的访问
- 类中的方法可以直接使用本类中的属性
- 方法调用的时候需要设置相关属性的值
10.构造方法 ※※※※※
是方法,但比较特殊
特点:
- 1)该方法的方法名必须和类名完全一致,首字母大写
- 2)该方法没有返回值类型,连void都不能设置
- 3)该方法内部一般不允许存在较为复杂的结构(分支和循环)
- 4)该方法无法被程序猿调用,在构建对象的过程中,该方法被系统自动调用,在new 类名()时自动调用
- 5)一个类至少包含一个构造方法
- 6)如果程序猿不写构造方法,系统会自动生成一个默认方法体为空的不可见的构造方法;如果写了,系统自动生成的构造方法就会消失
- 7)构造方法允许重载
语法:
类名(参数列表){
方法体;
}
11.构造方法的重载
在某些情况下可以使用构造方法对类的属性进行初始化
在构建对象的时候需要在new className();
的小括号里面指定参数的值来决定调用哪个构造方法
12.eclipse断点调试
允许调试的位置:
- 出现bug过着未知的错误可能位置
- 方法的调用位置
- syso输出位置
- 其他任何合理位置
断点就是代码执行到该位置"之前"!!!暂时停顿,之后可以根据实际情况手动放行该代码
13.this
this是当前对象的引用
我们可以在类的属性前面加this,构成
this.属性
的结构,可以把类属性和方法的参数进行区分
如果类的属性和方法的参数不重名,可以不写this,也可以写.但是注意,this只能修饰类的属性和类的方法,不能修饰参数
- (1)this调用本类中的属性,也就是类中的成员变量;
- (2)this调用本类中的其他方法;
- (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。
快捷键:
ALT+S-------->generate constructor using fields