现在的位置: 首页 > 综合 > 正文

第八天:面向对象

2018年05月16日 ⁄ 综合 ⁄ 共 2425字 ⁄ 字号 评论关闭

面向对象(OO)
  按照东西的特征和自然组织形式, 进行软件开发过程的
  组织, 是一个开发过程的方法论. 

学习面向对象: 学习如何用OO语法描述事物的特征和
  自然组织形式. 

学习面向对象思维的前提是朴素的哲学逻辑.
如: 多态, 抽象概念的具体实现是多态的,
   如:美女是多态的!

对象(Object)->东西, 啥都是东西.

类(Class)
  类是用来描述一个领域模型中的具体概念(名词)的. 
  领域模型: 一个应用软件业务范畴, 也叫业务模型.
  属性: 描述具体概念的特征.

案例:
  <图书馆管理系统>中的概念: 书 Book
  书的特征: 书号, 书名, 编号, 作者, 价格...

Java中的类语法
  修饰词 class 类名{
   修饰词 类型 属性;
  }
  
  public class Book{
   int id;
   String name;
   String[] authors;
   String isbn;
   double price;
  }

对象(Object)概念的具体实例,对象是类的具体实例!
  《山楂树之恋》是一本书,
  《和空姐同居的日子》是一本书,

引用:是指向具体对象的句柄,相当于自然语言的代词。
   
   请给我《山楂树之恋》这本书,这本书很感人。
   对不起,书卖完了!
   
   代词本身不是对象,代词引用了一个具体对象。
   在特殊情况下代词可能指空。
   经常简单的叙述事物时候,不严格区别代词与对象。
   
Java 中的引用和对象
  Book book = new Book();
  //book 引用变量,具体引用一个书的实例。
  
  book就是引用变量,可以为空,new Book();是类Book的一个具体实例,它叫对象 .
   所以引用 ,引用的内容就是一个对象 .
  
  book.name = "月子";
  book.authors = new String[]{"白云","黑土"};
  book = null;//book引用null
   
引用是null时候,访问属性或方法时候会出现: 
  空指针异常 java.lang.NullPointerException
  
案例:
  平面绘图坐标系中的一个点(Point),定义合理的属性
  坐标是int类型.
   O+-----------------------------> X
    |
    |
    |
    |
    |          . p(x,y)
    |
    |
    |
    |
    
    Y
   
构造器(构造方法) 
  用来描述对象的创建过程的.
  如: 月饼实例的创建, 使用面和馅创建.
              制作(构造器)
  月饼模子(类)  -----> 月饼(对象)
              原料(构建参数)
   
  点类型   -------->  原点 
           (0,0)
  
Java中的构造器: 声明在类内部, 方法名与类名一致
  的方法叫构造方法, 构造方法不能声明返回值类型.
  构造方法可以包含参数, 参数一般是创建对象实例
  必须依赖的条件(前提条件).

new运算: 创建对象实例
  1 根据类的属性在堆中分配对象空间.
  2 根据参数类型调用构造器.
  3 new运算返回对象的引用地址.
对象的创建过程
  1 根据类的属性在堆中分配对象空间,并且自动初始化.
  2 根据参数类型调用构造器.

this 是对当前对象的引用, 是当前对象本身.
  可以使用this明确的访问当前对象的属性或者方法
  类似于"我".
  
this() 是调用本类的其他构造器, 可以使用构造器的
  重用, 简化代码的实现. 
  * this() 必须写在构造器的第一行!

构造方法经常会重载
案例: Book.java
   方法签名 = 方法名+参数类型列表
   方法重载:a 方法名一样 b 方法参数不一样
     也可以说: 方法名一样, 方法签名不同的方法
   
默认构造器
  案例: ConstructorDemo.java
  1 如果类没有声明任何构造器,Javac自动提供一个
  默认构造器, 无参数默认构造器
  2 如果提供构造器声明, Javac将不再提供默认构
  造器.   
    
对象的方法, 表示对象的功能, 依赖于对象存在.
  案例: Point.java
  如: p1.distance() 和 p2.distance()
  方法是动作,是功能,一般用动词声明.  
  方法也经常重载, 重载:方法名一样, 参数不一样
  重载体现了, 功能的多态.
  重载的方法经常互相重用.
  
  
java方法参数的传递规则: 基于值的传递, 是变量值的
  复制, 基本类型就是其中值的复制, 引用类型是引用
  值(地址)的复制.
  案例: ParamaterDemo.java
  * 变量的值: a 基本类型的值是其本身,
           b 引用变量的值是一个地址值, 
             是被引用对象的首地址.
  为了避免引用参数传递的副作用, 建议一切结果使用
  返回值带回. 

数组对象
  int[] ary = new int[10];
  int[] ary1 = ary;//这个是在堆内存中分配的一块内存,有两个引用指向它。
  //数组的复制
  int[] ary2 = new int[10];
  for(int i=0; i<ary.length; i++){
   ary2[i] = ary[i];
  }
  //ary2 是 ary 一个副本
  //java 提供了现成的复制方法:
  int[] ary3 = new int[10];
  System.arraycopy(ary, 0, ary3, 0, 10);//它是复制,是在内存中的不同区域,没有任何关系 .
  //Java6 以后提供了:
  int[] ary4 = Arrays.copyOf(ary, 11);////它是复制,是在内存中的不同区域,没有任何关系 .
  
元素是对象数组
  String[] authors = new String[5];
  Book[] books = new Book[]{
    new Book(1, "日子"), 
    new Book(2, "空姐")};

【上篇】
【下篇】

抱歉!评论已关闭.