汪星人 发表于 2014-3-3 17:29

java 面向对象知识: 类, 对象, 引用

1 面向对象(OO)
1) 什么是Object(对象), Object 本意:东西,是指一个具体事物实例
2) 面向对象, 面向客观事物之间的关系.
4) OOA面向对象分析/OOD 面向对象设计
   客人来了(来了一个客人类型的某人)

5) 面向对象概念
A 类型: 名词概念, 如: 客人, 菜品, 厨师
B 引用(变量): 引用具体概念实例的代词, 如: 某人, 特价菜
C 对象(东西): 具体概念的个体实例,如:张三丰这个人, 一盘大盘鸡
D 行为(方法)
基本特征:
A 多态: 行为/引用, 在具体情形下发生了变化的现象
          一盏灯:多态的
          打: 根据宾语发生变化
B 封装: 任何对象实例都是尽可能封装, 减少暴露
C 继承: 概念的继承关系

2 Java 类型, 引用变量 与 堆对象
1)Java 类, 是用来描述事物类型的. 如: 书
   <图书馆管理系统>中的概念: 书 Book
书的特征: 书号, 书名, 编号, 作者, 价格...
2) 类的声明:
    public class Book{
            long id;
            String name;
            String isbn; //书号
            String[] authors; //作者
            double price;
    }
3) 引用变量与对象的创建过程:
A Java的内存管理与分配:
    栈是一块Java使用内存区域, 使用的方式:LIFO(后来者居上)
    堆也是一块Java使用内存区域, 使用方式: 无需随机分配
B 局部变量 与 堆对象空间分配
   Java 局部变量在栈中分配, 是按照变量的类型分配
   对象在堆中分配, 按照类的属性(实例变量)分配空间
C 变量类型与分配
   变量分为: 基本类型和引用类型
   基本类型变量的空间大小: 就是基本类型的空间大小, 值是基本类型
    的值
   引用变量的值是一个对象的地址值, 引用变量通过地址引用了一个堆
   对象.引用类型变量的占用空间大小和值管理是"透明的(不可看见)",
   由Java系统管理: 变量占用空间以及值的管理, 都是透明的.

4) 对象的属性默认自动初始化的. 自动初始化为"零"值, 引用为null
5) 在null引用上调用属性或方法, 会发生运行时异常

案例:
平面绘图坐标系中的一个点(Point),定义合理的属性
坐标是int类型.
   O+-----------------------------> X
    |
    |
    |
    |
    |          . p(x,y)
    |
    |
    |
    |

    Y

3 构造器(构造方法) 的作用: 用来描述对象的创建过程的.
1)
如: 月饼实例的创建, 使用面和馅创建.
            制作(构造器)
月饼模子(类)-----> 月饼(对象)
            原料(构建参数)

点类型   -------->原点
         坐标(1,2)

2) Java中的构造器: 声明在类内部, 方法名与类名一致
的方法叫构造方法, 构造方法不能声明返回值类型.
构造方法可以包含参数, 参数一般是创建对象实例
必须依赖的条件(前提条件).
        public class Point {
          int x;
          int y;
          /** 构造器 */
          public Point(int x, int y){
          this.x = x;
          this.y = y;
          }
        }

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

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

5) 构造方法重载: 参数不一样的构造器
        案例: Point.java
   方法签名 = 方法名+参数类型列表
   方法重载:a 方法名一样 b 方法参数不一样
   也可以说: 方法名一样, 方法签名不同的方法

6) 默认构造器
1 java 类一定有构造器
案例: ConstructorDemo.java
2 如果类没有声明任何构造器,Javac自动提供一个
默认构造器, 无参数默认构造器
3 如果提供构造器声明, Javac将不再提供默认构
造器.   

4 对象的方法
1) 表示对象的功能, 依赖于对象存在.
案例: Point.java
如: p1.distance() 和 p2.distance()
方法是动作,是功能,一般用动词声明.
2)方法也经常重载, 重载:方法名一样, 参数不一样重载体现了,
   功能的多态.重载的方法经常互相重用.

对象: java运行期在堆(内存空间)中分配, 大小按照属性分配
引用(引用变量): 临时变量(方法中的变量和方法参数)在栈中分配
                实例变量(对象属性)对堆对象中分配(如: 书的名字)
                引用变量的值是地址值(透明管理,不可见), 通过这个地址
                值引用了一个堆对象.

不确切说法: 引用的值是对象
            引用变量在栈中分配
类(类型, 是名词概念): 对象的模板, 是对象的样子, 蓝图, 类型决定了
                对象的样子.

想着对象写类型: 面向对象, 类是对象的抽象化

方法的重载: 体现了行为的多态现象

发光的影子 发表于 2015-10-15 13:46

看了看学习学习哈哈哈哈

java宫城大师 发表于 2016-3-17 21:57

学习一下。谢谢:victory:

woniu 发表于 2016-4-12 12:22

这个项目太棒勒!下下来学习下!

wudizxt 发表于 2017-8-12 20:47

不错不错不错不错
页: [1]
查看完整版本: java 面向对象知识: 类, 对象, 引用