资讯专栏INFORMATION COLUMN

Java learn 02 OO & Exception

mzlogin / 776人阅读

摘要:可处理中成员变量和参数重名的情况。可看作是一个变量,它的值是当前对象的引用声明的成员变量为成员变量,它为该类的公用变量,在第一次使用时被初始化。经常出,不用逮压路面上的小石子异常是提供的用于处理程序中错误的一种机制。

Chap 3 Java OO

focus on :

        * 对象和类的概念  
        * 类 (对类) 之间的关系  
        * 面向对象设计思想  
        * class  
        * new  
            * 引用的概念  
            * constructor-method的概念  
        * method重载  
            * constructor-method重载  
        * this  
        * static  
        * package & import  
        * private default protected public  
        * extends  
        * override  
        * final  
        * Object  
            * toString  
            * equals  
        * upcasting downcasting  
        * polymophysm / dynamic binding
        * abstract class  
        * interface  
            * implements  
3.1 OO 设计思想

为什么用 OO ?

OO 编程 -- 一组对象互相配合通过沟通完成特定功能

汇编是对机器语言的抽象

面向过程的语言是对汇编的抽象

对象更加符合对于现实问题的抽象

对象都有对外服务的接口

通过继承可以复用

对象隐藏内部服务的实现

通过聚合可以复用

向对象更加容易使我们达到这些年苦苦追求的境界

Reusable, Extensibility

组件 -- 比对象更高层次上的抽象

Web Service

3.2 Class 之间的关系

关联关系 -- 学院 - 研究生 - 教授

继承关系 -- 运动员 { 游泳运动员,球类运动员, 射击运动员 }

聚合关系 -- 聚集 - 球队 {队长,队员} 组合 - 人-{ 头, 身体, 四肢 }

实现关系 -- implements

3.3 Class 和 Object

Java 中万事万物皆 Object (对象)

Object 可看成 静态属性 (成员变量)动态属性 (method) 的封装体

Class 是用来创建同一类型的 Object 的 “模板”

成员变量 = 属性 & method = 函数

同一类的每个对象共享该 Class 的method

非static method 是 针对每个对象进行调用

局部变量分配在 Stack内存

成员变量分配在 Heap内存

3.4 new & Constructor

new -- 引用的概念

Constructor

Constructor in class extends

如果调用 super 必须写在 Constructor-method 的第一行

如果没调用,系统自动调用 super(), 如果没调,parent-class 中又没写参数为空这个 Constructor-method 则出错。

3.5 this keyword

this 可处理 method 中 成员变量参数重名 的情况。

this 可看作是一个变量,它的值是当前对象的引用

3.6 static keyword

static 声明的 成员变量 为 static 成员变量,它为该类的公用变量,在第一次使用时被初始化。

static 声明的 method 为 static-method 在调用该method时, 不会将对象的引用传递给它

static-method 中不可访问 非static成员。

可通过对象引用 or 类名 访问 static成员, static 成员 属于 Class, 不属于对象

3.7 package / import

package named method : 公司域名倒过来!

class文件的最上层包的父目录位于classpath下。

执行一个 Class 需要写 all package name

J2SDK 中主要的包介绍

java.lang - 包含一些 java 语言的核心类

java.net

java.io

java.util

把自己的文件打成 jar文件method : jar -cvf test.jar *.*

3.8 Class extends
修饰符 类内部 same package 子类 Anywhere
private Yes
default Yes Yes
protected Yes Yes Yes
public Yes Yes Yes Yes
3.9 method-override

override-method 不能使用比 被override-method 更严格的访问权限 -- 其实这和polymophysm有关

3.10 Object Class

Object Class 是所有Java类的根基类

toString() Object 类中定义有 public String toString() method,其返回值是 String 类型。

equals method Object 类中定义有 :

public boolean equals(Object obj) method 提供对象是否 “相等” 的逻辑

Object的 equals method定义为:x.equals(y) 当 x 和 y 是同一对象的应用时返回 true

J2SDk 提供的一些类,如 String, Date等,重写了 Object 的 equals method.

属性内容相等时 (并不一定是相同对象), 返回 true 否则返回 false.  

3.11 Object casting

upcasting

downcasting

基类引用 可以指向 子类对象

基类引用 不可访问 子类对象新增加的成员

可以使用引用 变量 instanceof 类名 来判断该引用型变量所指向的对象是否属于该类或该类的子类

子类的对象可以当作基类的对象来使用称作 upcasting,反之 downcasting

内存分析 - 明白了内存你就明白了一切!

3.12 polymophysm / dynamic binding

继承

重写

父类引用指向子类对象

package com.bjsxt.chap03;  
  
class Lady {  
    private String name;  
    private Animal pet;  
    Lady(String name, Animal pet) {  
        this.name = name;  
        this.pet = pet;  
    }  
    public void myPetEnjoy() {  
        pet.enjoy();  
    }  
}  
public class TestPolymoph_01 {  
  
    public static void main(String[] args) {  
        Cat c = new Cat("catName", "blue");  
        Dog d = new Dog("dogName", "block");  
        Lady l1 = new Lady("L1", c);  
        Lady l2 = new Lady("L2", d);  
        l1.myPetEnjoy();  
        l2.myPetEnjoy();  
    }  
}  

知道了内存, 就知道了一切

动态绑定, 池绑定, 多态

1. 动态绑定的机制 是 实际类型 new 的是  
2. 深一点 -- 是对象内部有一个指针。。。。。。  
3. 动态绑定的机制是 : 是调用实际类型,不是引用类型。  
4. 实际地址才会绑定到那个 method 上。 method 在  code segment  
5. 只有在 runtime,才能判断调用哪一个 method
    
带来的莫大好处是 ... 可扩展性达到了极致好
    
OO核心中的核心
3.13 abstract Class

abstract关键字来 修饰一个 Class 时,这个类叫做abstract-class。abstract 修饰 method 时,该 method 叫做 abstract-method

abstract-class 必须被 extends,abstract-method 必须被 override

abstract-class 不能被实例化

abstract-method 只需声明,而不需要实现。

3.14 Final 关键字

final 的变量的值不能够被改变

final 的成员变量

final 的局部变量(形参)

final method 不能被 override

final Class 不能被 extends

System final Class 如 : String, Math, Boolean etc..

3.15 interface

概述

interface 是 abstract-method 和 常量值 的定义的集合

从本质上讲,接口是一种特殊的 abstract-class,这种 abstract-class只包含 常量 和 method definition,而没有 var 和 method 的实现。 只包含 常量 和 method 的定义,而 没有var 和 method 的实现。

public interface Runner {  
    //public static final int id = 1;  
    int id = 1;  
    public void start();  
    public void run();  
    void stop(); // public void stop();  
}  

interface特性

interface 可以多重实现

interface 中声明的属性默认为 public static final 的; 也只能是 public static final的;

interface 中只能定义 abstract-method, 而且这些 method 默认为public的,也只能是public的。

interface 可以继承其他的接口,并添加新的 属性 和 abstract-method

多个 Class 可 implements 同一 interface

一个 Class 可 implements 多个 interface

与继承关系类似,接口与实现类之间存在多态性

其中的变量全部都是 public static final int id = 1;
java.lang - Comparable 我看就像 cmp 一样!(个人认为)  
Interface Comparable 可以扩展  
接口与接口之间也可以相互继承  
类与接口只能 是 实现关系   
Example Program
public interface Valuable {  
    public double getMoney();  
}  
  
interface Protectable {  
    public void beProtected();  
}  
  
interface A extends Protectable {  
    void m();  
    // void getMoney();  
}  
  
abstract class Animals {  
    private String name;  
      
    abstract void enjoy();  
}  
  
class GoldenMonkey extends Animals implements Valuable, Protectable {  
    public double getMoney() {  
        return 10000;  
    }  
      
    public void beProtected() {  
        System.out.println("live in the room");  
    }  
      
    public void enjoy() {  
          
    }  
      
    public void test() {  
        Valuable v = new GoldenMonkey();  
        v.getMoney();  
        Protectable p = (Protectable)v;  
        p.beProtected();  
    }  
}  
  
class Hen implements A  {  
    public void m() {}  
    public void beProtected() {}  
    public double getMoney() {  
        return 1.0;  
    }  
    // public void getMoney() {} // 不常见,怪异的问题  
  
}  
Chap 4 异常处理 4.1 写程序有友好界面
  1, 鼻腔内感觉异常  
  2, 体温持续升高  
  3, 分泌乳白色液体  

  直接说感冒不就得了么?
 
 e.printStackTrace(); 非常好!给程序员读。堆栈信息都打印出来!

 java.lang.Throwable { 开车在上山走,  
   1, Error         山爆发 JVM 出问题。  
   2, Exception {   你可以处理的 -- 刹车坏啦!修好再走。。。  
   1, ...  
   2, RuntimeException  (经常出,不用逮) 压路面上的小石子  
  }  
4.2 Exception Deal

Java异常是Java提供的用于处理程序中错误的一种机制。

所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组越界,文件不存在等)

设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。

Java程序的执行过程中如出现异常事件,可以生成一个 Exception-object,该异常类对象封装了异常事件的信息并将被提交给Java-runtime-system,这个过程称为 throw e (会被打印出来,默认的处理方式)

Java-runtime-system 接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为 catch e

4.3 Example Program
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
  
import javax.imageio.IIOException;  
  
public class TestTx {  
    public static void main(String[] args) {  
        FileInputStream in = null;  
        try {  
            in = new FileInputStream("myfile.txt");  
            int b;  
            b = in.read();  
            while (b != -1) {  
                System.out.println((char)b);  
                b = in.read();  
            }  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
              
        } catch (IOException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            try {  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65900.html

相关文章

  • Java learn 01 Java basic

    摘要:程序运行机制两种核心机制垃圾收集机制虚拟机可以理解成一个以字节码为机器指令的虚拟机机制屏蔽了底层运行平台的差别实现了一次编译随处运行。采用编码全球语言统一编码每个字符占两个字节面向过程约瑟夫环面向对象约瑟夫环 Chap 0 Preface Java Basic Content List Java data type、 标识符、运算符、表达式和语句、分支、循环、方法 OO Except...

    EastWoodYang 评论0 收藏0
  • 基于Java语言构建区块链(三)—— 持久化 & 命令行

    摘要:我们该选择哪一款数据库呢事实上,在比特币白皮书中并没有明确指定使用哪一种的数据库,因此这个由开发人员自己决定。详见精通比特币第二版第章节交易的输入与输出此外,每个区块数据都是以单独的文件形式存储在磁盘上。资料源代码精通比特币第二版 showImg(https://segmentfault.com/img/remote/1460000013923488?w=1200&h=627); 最...

    asoren 评论0 收藏0
  • 基于Java语言构建区块链(三)—— 持久化 & 命令行

    摘要:我们该选择哪一款数据库呢事实上,在比特币白皮书中并没有明确指定使用哪一种的数据库,因此这个由开发人员自己决定。详见精通比特币第二版第章节交易的输入与输出此外,每个区块数据都是以单独的文件形式存储在磁盘上。资料源代码精通比特币第二版 showImg(https://segmentfault.com/img/remote/1460000013923488?w=1200&h=627); 最...

    李世赞 评论0 收藏0
  • Java 序列化与反序列化

    摘要:一序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化把字节序列恢复为对象的过程称为对象的反序列化。代表对象输入流,它的方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。 一、序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化;把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保...

    I_Am 评论0 收藏0
  • Java learn 03 常用类 & 容器 (待补充笔记)

    摘要:容器的类图如下图所示接口定义了存取一组对象的方法其子接口和分别定义了存储方式。中的数据对象没有顺序且不可以重复。注意相等的对象应该具有相等的 Chap 6 常用类 focus on : 字符串相关类 (String, StringBuffer) 基本数据类型包装类 Math类 File类 枚举类 6.1 字符串相关类 String 类 -- java.lang.String 类...

    bladefury 评论0 收藏0

发表评论

0条评论

mzlogin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<