java 面向对象思想与实现

面向对象概念

  1. 面向对象的设计思想
    1.1 什么是面向对象
    一种看待问题的思维方式,着眼于找到一个特殊功能的具体个体,然后委托这个个体去做某些事情,我们称之为“对象”。
    “对象”是计算机抽象世界看待世界的一种方式,“面向对象”可以用很多方式表达。
    (1)世界上每一个事物都可以称为一个对象,
    对象有身份/名字(identify),状态(state),行为(behavior)
    比如:世界是由什么组成的?
    具体的各种自然界的位置。
    注意:在用语言文字来描述一件事的时候,其中的每个名词都可能被抽取出来作为一个“对象”。
    在Java用什么来描述一个类?
    类和对象的关系 class和Object的关系
    人类 (class)和 赵炳泉(Object)
    类的概念:类是所有对象的抽象概念或者集合(物以类聚),对象称为类的具体实例
    类是抽象的,对象是具体的
  2. 对象实例化 new 关键字 实例化一个对象或者创造一个对象
    对象和对象的引用的关系 电视机和遥控器的关系,拿到了遥控器就可以控制电视机
    Person person = new Person();
    Person 表示对象的引用

在计算机中new一个对象的过程中 计算机做了什么

在内存中申请一片独立的空间,表示可以使用独立的空间运行程序,申请的空间大小由对象自身的属性决定

堆内存 栈内存
实体 地址
Person 使用变量名字 如”a”来代替地址

6. 面向对象的三大特性

封装

隐藏内部实现的细节,对外提供公共的访问方法
对于设计者来说,一个是安全性,防止代码被修改破坏
从调用者角度,忽略实现细节,只关注功能怎么调用
如何设计封装:

  1. package 包的概念引入:
    对所有的class进行分类,以方便管理。包命名的规则:小写字母,一般都是四级目录
    Com.company.project.model
    如何编译包
javac -d  . 类名.java
javac -d . *.java
如何执行:
Java 全路径(包名/…/…/…/类名) 

8. 构造方法:

什么是构造方法?
构造方法是一个类在初始化的形态,类本身自带的特征。
//jvm会提供一个默认的构造方法,直到我们重新定义一个构造方法
构造方法的特点:
共有的,与类名相同,没有返回值
构造方法的用处在哪里?
初始化成员变量
This表示本类对象的引用
构造方法越多,代表在这个类初始化的时候,形态越多。
构造方法的重载(overload);
参数类型不同,参数次序不同,参数个数不同都能构成重载。
构造方法的重载
构造方法越多,实例化对象的类型就越多
类在编程中称为最小单元

9. 类的成员方法:

方法的概念:方法是一个类接受外部信息的其中的渠道。
方法在一个类中专门解决业务逻辑的。
public 返回值 方法名(参数列表){ return 返回值 }
10. 方法参数的传递:传值或者传递引用
对象的关系:
关联关系,类与类之间是可以互相调用的
方法的参数传递只能传递两种类型:
如果是要传值就是一个具体的值、
如果要传递引用,那么传递的是该对象的地址
11. static 用来修饰静态的方法,静态的代码模块,静态变量
12. 如果使用static所修饰 的方法或者变量,可以使用类名直接调用,不需要new对象来调用,
13.static修饰的变量在内存中只有唯一的一个地址 ,
14. 使用场景:只有在工具类中才可以使用,该方法被频繁的调用,确实节省内存空间
在非静态方法中是可以引用静态方法的
静态的代码模块无法调用非静态的

类的继承 extends

类与类的关系有哪些?
1. 关联(聚合)(has -a)
2. 继承关系 (is-a)
如果是关联关系,那么就是类调用类
所有的对象都是继承Object类,Java是单根继承的特点

单根继承的好处

能保证纯正的血统
子类可以调用父类的方法,减少代码的冗余度。
在父类的角度考虑问题,继承可以衍生父类的功能(扩大功能)

里氏替换原则

将多个类中重复的方法提取出来作为父类的方法,用多个方法去继承父类的方法

单根继承的不好

当父类的方法出现问题,子类调用的时候就也会出现问题

多继承的好处是什么??

方法更多

如果子类继承父类,子类可以调用父类的公有方法
子类调用父类的时候,父类的构造方法会被调用
Super关键字只能存在子类中,主要在子类的方法中调用父类的方法,包括构造方法
写在程序的第一行
super就是子类调用父类方法的关键字;
Super可以在子类的构造方法中调用父类的构造方法super();
因为需要调用父类任何的构造方法
重写(override)子类覆盖父类的同名方法,好处在于扩充子类的方法功能。

final关键字

表示最终的。如果用final所修饰的变量,称为常量(不能被改变或者赋值)
如果final修饰一个方法,那么该方法在子类中不能被重写
如果final修饰一个类,那么这个类不能被继承

14. 抽象类

abstact 关键字

public abstract class 类名{

}
  • 抽象类和普通类的区别在哪里?
    基类是可以实例化的,抽象类是不能被实例化的,也就是不能使用new 关键字
  • 定义一个抽象类的用途是什么?
  • 抽象的概念是不需要实际去做的,但是在实际应用中有两种实际用途:
    1. 父类某一个功能或者方法,需要子类强行去重写的,这个类必须是抽象类
    2. 父类对于某一个方法无法预知子类会怎么实现,那么该方法必须是抽象的
  • 抽象类在继承的关系图中起什么作用?
    承上启下的作用

如果一个类里面有抽象方法,必然是抽象类,反之抽象类不一定有抽象方法

接口 interface

接口的概念
接口是一种标准,所有实现该接口的子类都要实现这个标准。
接口也是一种契约,所有的实现该接口的子类都要实现该接口的条款
接口也是一种身份特征,所有的子类都具有该身份特征。
接口里面的所有方法都是抽象的,公有的。
接口里所有的成员变量都是常量。
接口可以继承接口
16. 多态
17. 什么是第多态?一个事物在不同的条件下,所表现出的多种形态
18. 在开发中使用多态的场景,主要使用用在方法的参数传递上,可以传递接口,也可以传递抽象类

异常

Exception
异常是一个对象
异常就是错误,是在程序编译阶段或者执行过程中的错误。
学习异常主要是调试程序的错误信息,根据错误信息来发现程序的bug
异常分类:运行时异常和编译异常
异常的级别ErrorException
Error:表示不可抗因素造成的
Exception:表示程序运行错误,是可以调试的
捕获异常的语法

 try{
        假设代码运行正常
}catch(异常类型){

}finally{
//不管程序是否出错,都执行
}

异常的类型必须要明确的,这样才能准确的找出错误。
throwsthrow的区别 声明异常和 抛出异常
声明异常(throws)>=抛出异常(throw)
自定义异常信息:标准的异常中无法描述错误信息,我们需要自己定义一个异常信息。
Catch的捕获需要从小到大
什么时候捕获异常,什么时候抛出异常?
如果我们调用的是标准的API文档的方法,如果该类抛出异常,我们必须要捕获。

在实际开发中,我们所编写的程序的功能执行成功与否,与外界有紧密关系(比如,参数传递,调用关系)必须要抛出异常

某些方法在调用的时候会抛出异常,抛出异常就必须要处理
例如在某些方法在API中描述的时候就把调用时可能会抛出的异常写在之中。
例如,方法中的参数错误传递,even
Example

**Class FileInputStream**
public FileInputStream( ) 
                throws  FileNotFoundException

**Throws:**
 [FileNotFoundException]  - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
 [SecurityException]  - if a security manager exists and its checkRead method denies read access to the file.
Java程序设计》课程实验指导书程序代码(答案)(实验一),个人原创,仅供参考与交流。 实验一 Java开发环境的安装与配置,熟悉Java程序结构 一、实验目的: 1. 掌握JDK的安装步骤。 2. 理解环境变量PATH, CLASSPATH的作用,以及它们的设置方法。 3. 熟悉Editplus(或TextPad,JCreator)编辑环境,编写简单的Application程序和Applet程序,并编译和执行。 二、实验内容: 熟悉JDK的安装和配置,学习如何编写并运行简单的Application程序和Applet程序(能输出一条简单的问候信息); 三、实验要求: 1. 能正确地安装JDK 2. 熟悉环境变量PATH, CLASSPATH设置方法,熟悉编辑环境 3. 调试程序、编译,运行后得到正确的结果 4. 写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。 四、实验步骤: 1.从http://java.sun.com 上下载最新版本的JDK,并安装。 2.设置环境变量PATH, CLASSPATH, 使得Java程序能正确编译和执行。 3.在Editplus(或JCreator ,Textpad)环境下编写一个HelloWorld.java程序, (1)在主方法static public void main(String[ ] args)中调用System.out.println()方法,使程序输出一条问候信息; (2) 编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用javac.exe和java.exe编译和执行程序) 4.在Editplus(或JCreator ,Textpad)环境下编写一个HelloWorldApplet.java程序。 (1)在public void paint(Graphics g)方法中调用g.drawString()方法,使程序输出一条问候信息; (2) 编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用javac.exe编译和浏览器解释执行Applet程序)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值