面向对象学习笔记之一 什么是面向过程思想? 面向过程简单的讲就是描述清楚完成一件事情所需的所有步骤,比如吃饭。在吃饭前先要准备好吃饭的食材,然后清洗食材、餐具,再开始用餐具做饭,做好之后再将做好的饭菜放入对应的餐具,最后才开始吃饭……中间有很多具体琐碎的步骤都需要我们一一完成。在计算机语言中的典型代表就是C语言。 什么是面向对象思想? 面向对象简单的讲就是在完成一件事情时,把具体的细节交给“专业”的人去做,我们只需要去“调用”他们相应的功能,然后“他们”把完成的情况反馈给我们,最后得到最终的结果。还以吃饭为例,我们去餐馆吃饭时,只需对照菜单(相当于java的API)点菜,然后付钱(传入参数),最后就等待吃饭了。整个做饭的过程由专业的厨师等人来完成,我们只需等待最终的结果。在计算机语言中的典型代表是C++、java等语言。 由此可见面向对象是一种更符合我们思想习惯的思想设计模式,可以将复杂的事情简单化,将我们从“执行者”变成了“指挥者”。面向对象开发就是不断的创建对象,使用对象,指挥对象做事情。面向对象设计其实就是在管理和维护对象之间的关系。 java语言中,面向对象有三大特性:封装、继承、多态。 封装是指把对象的属性和行为看成一个密不可分的整体,隐蔽对象的功能实现细节。,对外提供公共的访问方式,提高了代码的复用性和安全性。类、方法、接口和被private修饰的成员变量都是封装的体现形式。 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。这种技术使得复用以前的代码变得容易,能够大大缩短开发周期,降低开发费用。提高了代码的复用性与维护性。 多态按字面的意思就是“多种状态”。即同一个事物,在不同时刻表现出来的不同状态。在面向对象语言中,接口的多种不同的实现方式即为多态。多态的关键就是父类引用指向子类对象。 类与对象 Java语言是以“类”为单位的,“类”是对某一类事物相关的属性和行为的描述,是抽象的、概念上的定义。对象就是该类事物的具体体现,也称实例(Instance)。类的主要作用就是用来创建“对象”的。 举例:类和对象的关系图1所示。无法显示,请参照附件。
图1中,汽车设计图就是“类”,由这个图纸设计出来的若干的汽车就是“对象”。由此可见“类”就相当于一个模板,而“对象”就是该模板生产出来的具体实例。 类的声明 public class Phone{ //成员变量 private String brand; //品牌 private double size; //尺寸 //构造方法 public Phone(String brand, double size){ this.brand = brand; this.size = size; } //成员方法 public void function(){ System.out.println("我是"+brand+"牌"+size+"寸的手机"); System.out.println("我具备打电话,发短信,上网等功能"); } } 程序说明: 成员变量用来描述对象的静态属性。 构造方法在创建对象的时候,用来给对象中的成员进行数据初始化,如果没有写构造方法时,java虚拟机会给出一个空参数构造方法。当我们自己写了构造方法的时候(不管是有参还是无参),Java虚拟机就不会为我们自动创建空参数构造方法了。 成员方法是对象的动态特征。 对象的创建 public classPhoneTest { public static void main(String[] args) { //声明并实例化对象:有参构造函数 PhoneP1 = new Phone("苹果", 5.0); P1.function(); //System.out.println("----------------------") //声明并实例化对象:有参构造函数 PhoneP2 = new Phone("华为", 5.5); //调用myPhone1中的方法 P2.function(); } } 程序说明: 用new关键字和构造方法Phone()来创建对象,一个类可以创建多个对象。 可以用对象名.方法名的方式来调用对象的方法。 对象名P1和P2是局部变量,在内存的栈区分配, new Phone("苹果", 5.0)和new Phone("华为", 5.5)是在内存的堆区分配的,是两个不同的对象。 程序输出结果: 我是苹果牌5.0寸的手机 我具备打电话,发短信,上网等功能 我是华为牌5.5寸的手机 我具备打电话,发短信,上网等功能 main方法说明 public:由于jvm需要调用类的main()方法,所以该方法的访问权限要足够大。 Static:JVM在执行main()方法时不必创建对象,直接用类名.方法名来访问。 void:表示main()方法不需要向java的jvm返回任何值。 main:一个约定俗成的程序主函数入口名称,虽然不是关键字,但是被jvm识别。 String[] args:在scanner类出现以前用于接收键盘输入String类型的字符串数组参数,该数组保存执行java命令时,传递给所运行的类的参数。 该程序执行时在内存中的分配过程,如图2所示。无法显示,请参照附件
内存分配说明: 代码区code:存放编译后生成的xxx.class文件。 数据区data:存放静态变量和字符串常量。 堆区heap:存放new出来的对象,包括成员变量和方法的地址。 栈区stack:存放要执行的方法地址和局部变量。 本文是面向对象的前期基础学习笔记,如有总结错误,欢迎批评指正,为谢!
|