面向对象概述

  1. 类与对象
  2. 构造方法
  3. 访问权限
  4. 继承
  5. 多态(最重要)
  6. 抽象和接口
  7. 内存分析

面向对象和面向过程

面向过程:侧重的是过程。
优点:简单
缺点:代码量大了之后,维护性非常差。
面向对象:侧重的是对象。
优点:可扩展性非常强,维护成本非常低。
缺点:新手上手难。

类:
属性:这一类事物拥有的共同属性
动作:这一类事物能共同执行的功能
对象:
对象能干什么?完全取决于类是如何决定的。

写代码
类要使用class来定义。
属性:成员变量来描述,直接写在类中的变量。
动作:成员方法
类 引用 = new 类();

public class Car{//成员变量String color;int speed;int seat;//成员变量public void run(){System.out.println("车能跑");}public static void main(String[] args){//int a =10; 写在方法里的变量,局部变量//创建对象//int a = 10;//String color = "red"//在面向对象的世界里,变量是没有市场的,这种变量被称为引用。//java分为两种数据类型:1.基本数据类型 2.引用数据类型:String和我们创建的所有类Car c = new Car();//创建一个名为c的对象 创建了一辆车,如果//让车跑

写一个student类

package test; //放在test这个包中//创建一个类,类名叫作Student
public class Student{//给一些成员变量,姓名name,分数score,性别sex。String name;int score;String sex;//定义一些方法,行为
//打招呼public void introduce(){System.out.println("你好!");}//晒成绩public void showscore(){if (this.score>80){System.out.println("我这次考得不赖,考了"+this.score+"分!");System.out.println("能给我奖励吗?\n");}else{System.out.println("我这次考得太差了,只有"+this.score+"分…");System.out.println("对不起,我下次会更努力的。\n");}}public static void main(String[]) args {Student a = new Student("小明",90,"男");Student b = new Student("小红", 88,"女");}a.introduce();a.showscore();
}

如何识别变量

用面向对象的思维去模拟时钟。

一只钟可以划分为两个两位的显示器。

#mermaid-svg-8IzvEuF7dMl4MBGv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8IzvEuF7dMl4MBGv .error-icon{fill:#552222;}#mermaid-svg-8IzvEuF7dMl4MBGv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8IzvEuF7dMl4MBGv .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-8IzvEuF7dMl4MBGv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8IzvEuF7dMl4MBGv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8IzvEuF7dMl4MBGv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8IzvEuF7dMl4MBGv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8IzvEuF7dMl4MBGv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8IzvEuF7dMl4MBGv .marker.cross{stroke:#333333;}#mermaid-svg-8IzvEuF7dMl4MBGv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8IzvEuF7dMl4MBGv g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-8IzvEuF7dMl4MBGv g.classGroup text .title{font-weight:bolder;}#mermaid-svg-8IzvEuF7dMl4MBGv .nodeLabel,#mermaid-svg-8IzvEuF7dMl4MBGv .edgeLabel{color:#131300;}#mermaid-svg-8IzvEuF7dMl4MBGv .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-8IzvEuF7dMl4MBGv .label text{fill:#131300;}#mermaid-svg-8IzvEuF7dMl4MBGv .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-8IzvEuF7dMl4MBGv .classTitle{font-weight:bolder;}#mermaid-svg-8IzvEuF7dMl4MBGv .node rect,#mermaid-svg-8IzvEuF7dMl4MBGv .node circle,#mermaid-svg-8IzvEuF7dMl4MBGv .node ellipse,#mermaid-svg-8IzvEuF7dMl4MBGv .node polygon,#mermaid-svg-8IzvEuF7dMl4MBGv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8IzvEuF7dMl4MBGv .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-8IzvEuF7dMl4MBGv g.clickable{cursor:pointer;}#mermaid-svg-8IzvEuF7dMl4MBGv g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-8IzvEuF7dMl4MBGv g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-8IzvEuF7dMl4MBGv .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-8IzvEuF7dMl4MBGv .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-8IzvEuF7dMl4MBGv .dashed-line{stroke-dasharray:3;}#mermaid-svg-8IzvEuF7dMl4MBGv #compositionStart,#mermaid-svg-8IzvEuF7dMl4MBGv .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv #compositionEnd,#mermaid-svg-8IzvEuF7dMl4MBGv .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv #dependencyStart,#mermaid-svg-8IzvEuF7dMl4MBGv .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv #dependencyStart,#mermaid-svg-8IzvEuF7dMl4MBGv .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv #extensionStart,#mermaid-svg-8IzvEuF7dMl4MBGv .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv #extensionEnd,#mermaid-svg-8IzvEuF7dMl4MBGv .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv #aggregationStart,#mermaid-svg-8IzvEuF7dMl4MBGv .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv #aggregationEnd,#mermaid-svg-8IzvEuF7dMl4MBGv .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-8IzvEuF7dMl4MBGv .edgeTerminals{font-size:11px;}#mermaid-svg-8IzvEuF7dMl4MBGv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Display
+ value
+ limit
+increase()
+getValue()
package clock;public class Display{//定义成员变量,设置显示器显示数字:value,设置显示器数字上限:limitprivate int value = 0;private int limit = 0;//定义构造函数Displaypublic Display(int limit) {this.limit = limit;}//定义increase方法,使value递增,如果value到达上限,又重新清零计数。public void increase(){value++if( value == limit){value = 0;}}//定义geetValue方法,获取value值public int getValue(){return value;}public static void main(String[] args){//构造小时显示器Display d = new Display(24);//死循环,让value+1,打印for (;;){d.increase()System.out.println(d.getValue());}}
}

时钟的两个显示器:小时显示器和分钟显示器都属于Display类。这两个对象各自独立,没有直接联系。因此他们之间的联系必须通过一个第三方。

public class Clock{\\定义成员变量private Display minute = new Display(60);private Display hour = new Display(24);public void start(){while (true) {minute.increase();if ( minute.getValue() == 0 ){hour.increase();}System.out.printf("%02d:%02d\n",hour.getValue(), minute.getValue());}}public static void main(String[] args) {Clock clock = new Clock();clock.start();}}

对象 = 属性 +服务
数据:属性或状态
操作:函数

把数据和对数据的操作放在一起 ——> 封装

编译单元
一个java文件,是一个编译单元。

static 静态

静态的内容在内存中是保留一份的,并且各个对象之间进行共享
使用对象名.静态变量虽然也可以使用静态变量,但容易产生误解。因此更推荐使用类名去访问静态的内容。

特点:

  1. 数据共享
  2. 属于类的,而不属于对象的
  3. 优先于对象产生

通用构造器,静态构造器
创建对象的过程(简单):

  1. 静态构造器
  2. 通用构造器
  3. 构造方法—>创建对象

由于创建对象的过程是在静态内容加载完成之后,在静态方法和静态块里不能使用this。

静态的内容使用类名去访问。

包和导包

包名通常用公司域名的翻转。
tieba.baidu.com --> com.baidu.tieba
实际上是创建了3层文件夹

以创建com.xyq.entity的包为例

package com.xyq.entity; //包的声明,表示当前类,从属于entity这个包下的public class Person {}

再创建一个com.xyq.dao,发现在/com/xyq/的路径下又多了一个dao的包。

package com.xyq.dao;//把entity包下的Person类导入当前文件夹
import com.xyq.entity.*;
//*把entity下的所有文件都导入

包的本质其实是文件夹
在代码中需要写package包名;
导包:
import 包+类

不需要导包:
1. 在自己包里
2. java.lang包下的所有内容都不需要导包
- String
- System.out.println()

访问权限

  1. public 公共的,所有人都可以访问
  2. default 包访问权限,在自己包内可以随意访问
  3. private 私有的,只能在class里访问的

getter和setter

成员变量一般使用private

继承

集成:子类可以自动拥有父类除了私有内容外的其他所有内容
当出现x是一种y的时候,x就可以继承y
黑熊怪是一种妖怪。

public class 类 extends 父类{
}

作用:简化代码的开发

子类对父类进行了扩展

Super

super:表示父类的内容
This:表示自己类的内容

用super和this来区分父类和子类中重名的内容。

创建对象的过程:先创建父类的对象,然后创建子类对象。

super可以获取到父类的内容
可以调用父类中的构造方法:必须写在

方法的重写

重写:子类对父类中提供的方法进行重新定义
语法:子类和父类中的方法的申明完全一致。

在子类的重写中也调用父类的方法,也叫做方法的半盖

//子类中的方法必须和父类中的方法完全一致
public void makeCountry(){super.makeCountry(); //父类方法的调用System.out.println("李世民也想建立一个自己的国家");
}

多态

同一个对象拥有多种形态。
作用:把不同的数据类型进行统一

小知识点:

  1. 把子类的对象赋值给父类的变量->向上转型。

  2. 把父类的变量转换回子类的变量->向下转型
    向下转型有可能有风险,java要求必须谢强制类型转换(转换之后的数据类型变量)

Final关键字

  1. 被final修饰的变量不可以被改变,又被称为常量,又被称为常量。
  2. 被final修饰的方法不可以被重写。
  3. 被final修饰的不可以被继承。

final就是不可变

抽象

抽象方法:使用abstract来修饰,不可以有方法体,直接用分号结束即可
抽象类:如果一个类中有抽象方法,这个类必须是一个抽象类

特点:

  1. 抽象类不可以创建对象
  2. 抽象类的子类:必须重写父类中的抽象方法,否则子类必须也是抽象类
    通过抽象类可以强制地要求子类中必须有哪些方法。

小知识点:抽象类中可以有正常的方法。

接口

接口实际上是一种特殊的抽象方法

/**
* 能继承接口的只能是接口
* 接口和类只能是实现关系 implements
*/
public interface Valuable{//接口使用interface来声明,已经不是类了//接口中带有的方法都是抽象方法,可以省略掉abstract
//接口中所有的内容都是公开的,公共的void getMoney(); //接口中所有的方法都是抽象方法,不可以有正常的方法}

equals 与 ==

  • 子类中的equals方法其本质和==是一样的。都是判断内存地址是否一致。
  • ==是判断数值是否相等。
  • 可以重写默认的equals方法。
  • string中的equals方法是判断值是否相等。

toString

  • 直接打印类,调用的是toString方法
  • 默认的toString方法显示的是该类的:包名+类名+@内存地址
  • 可以重写toString方法

instanceof

  • 判断这个对象是什么类型的

参数传递问题

  • 值传递:把变量的值作为参数进行传递(java里面就是值传递)
  • 引用传递:直接把变量变为参数传递(c语言就是引用传递)

面向对象总结

本章重点:

  1. 类与对象->封装
  2. 构造 this当前类的对象/super父类
  3. 访问权限
    public/private
  4. 继承
  5. 多态:让java更为灵活
  6. 抽象 abstract 对子类进行约束
  7. 接口 特殊的抽象类
  8. 内存简单分析

异常

  • 异常是错误,有编译时异常,运行时异常。

运行时异常

  • 抛异常,创建一个错误对象,把错误对象丢出来
  • 捕获异常,默认有JVM来把错误信息运行捕获,程序会中断,打印出来。

分类

  • RuntimeException:运行时异常,一般不手动处理,出问题再处理
  • 其他Exception:必须要经过手动处理
  • Error:一般的是系统及错误

处理异常

  • try-catch
 try {
>   尝试执行的代码
> }catch{Exception e}{
>   处理异常的代码
> } finally{
> //收尾工作
> }>
  • throw

throws表示方法准备要扔出来一个异常
产生的错误尽可能地自己处理,少向外抛出异常
throw 表示向外抛出异常

自定义异常

JAVA面向对象程序设计--老男孩IT相关推荐

  1. 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告

    20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...

  2. java面向对象程序设计第三版_JAVA面向对象程序设计之创建型设计模式

    [本文详细介绍了JAVA面向对象程序设计中的创建型设计模式,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 什么是设计模式 设计模式( Design pattern )是一套被反复使用.多数 ...

  3. 20175333曹雅坤 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  4. 20145122《Java面向对象程序设计》实验二实验报告

    实验名称: Java面向对象程序设计 实验内容: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 PSP时间 步骤 ...

  5. Java第二次实验报告——Java面向对象程序设计

    北京电子科技学院(BESTI) 实    验    报    告 课程名称:java程序设计实验      班级:1352         姓名:洪韶武      学号:20135219 成绩:   ...

  6. java程序面向对象show,20165309 实验二 Java面向对象程序设计

    2017-2018-2 20165309实验二<Java面向对象程序设计>实验报告 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初 ...

  7. 20155201 实验四《Java面向对象程序设计》实验报告

    20155201 实验四<Java面向对象程序设计>实验报告 一.实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局 ...

  8. java构成对象的三要素_20155237 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告...

    20155237 <JAVA程序设计>实验二(JAVA面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...

  9. 2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告

    实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 1.参考Intellj IDEA 简易教程 提交 ...

最新文章

  1. 基于内容的图像检索CBIR部分数据库和源代码资料
  2. VTK:IO之ReadPLY
  3. Redis总结(四)Redis 的持久化
  4. P4306-[JSOI2010]连通数【bitset】
  5. [Leetcode][第332题][JAVA][重新安排行程][欧拉回路 / 欧拉通路][优先队列][DFS]
  6. linux kvm 常用命令
  7. java脚本含义_set -e在bash脚本中的含义是什么?
  8. 黄聪:C#获取网页HTML内容的三种方式
  9. 数据解析1:XML解析(1)
  10. Ubuntu部署python3.7的开发和运行环境
  11. mac系统下快速安装windows软件 a_每日一款Mac软件之“Parallels Desktop 16.0.1(48919) Mac上最高效与好用的虚拟机工具”...
  12. Java 注解(Java Annotation)
  13. python记录鼠标和键盘操作并重复_Python模拟鼠标和键盘操作实现重复性操作
  14. Java volatile 关键字的作用
  15. ChatGPT使用拓展资料:AI大模型之美 -客户服务、聊天机器人和情感分析
  16. Python 批量修改文件名称
  17. Qt音视频开发12-mpv解码播放
  18. 「算法」拓扑排序(货真价实,童叟无欺)
  19. Android笔记本处理器,惠普或推Android笔记本:配Tegra处理器
  20. mysql 数据表的复制

热门文章

  1. 樱花漫地集于我心,蝶舞纷飞祈愿相随---总结 浮动:flux 浮动:flux
  2. (附源码)计算机毕业设计ssm飞羽羽毛球馆管理系统
  3. 经颅直流电刺激(tDCS)左侧额下皮质可促进口吃者的语言流利性
  4. 【商品分类数据集】——RP2K
  5. 内置数据库H2和内置Redis(测试结果来啦)
  6. (亲测可用)Python 进行图像的多种格式批量转换:.tiff,.jpg,.png
  7. 为什么对企业来说,业务比技术重要的多
  8. 群晖第三方社群套件源显示无效的位置解决方法
  9. 循环冗余校验检错方案
  10. 三星530换固态硬盘_三星 870QVO 首测:探寻全球容量最大消费级固态硬盘的秘密...