黑马程序员技术交流社区

标题: 面向对象 [打印本页]

作者: lee123    时间: 2015-4-18 23:55
标题: 面向对象
面向对象学习笔记之一
     什么是面向过程思想?
         面向过程简单的讲就是描述清楚完成一件事情所需的所有步骤,比如吃饭。在吃饭前先要准备好吃饭的食材,然后清洗食材、餐具,再开始用餐具做饭,做好之后再将做好的饭菜放入对应的餐具,最后才开始吃饭……中间有很多具体琐碎的步骤都需要我们一一完成。在计算机语言中的典型代表就是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:存放要执行的方法地址和局部变量。
本文是面向对象的前期基础学习笔记,如有总结错误,欢迎批评指正,为谢!

java面向对象学习笔记之一.pdf

328.23 KB, 下载次数: 50

面向对象学习笔记






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2