JAVA面向对象程序设计--老男孩IT
面向对象概述
- 类与对象
- 构造方法
- 访问权限
- 继承
- 多态(最重要)
- 抽象和接口
- 内存分析
面向对象和面向过程
面向过程:侧重的是过程。
优点:简单
缺点:代码量大了之后,维护性非常差。
面向对象:侧重的是对象。
优点:可扩展性非常强,维护成本非常低。
缺点:新手上手难。
类:
属性:这一类事物拥有的共同属性
动作:这一类事物能共同执行的功能
对象:
对象能干什么?完全取决于类是如何决定的。
写代码
类要使用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();
}
如何识别变量
用面向对象的思维去模拟时钟。
一只钟可以划分为两个两位的显示器。
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 静态
静态的内容在内存中是保留一份的,并且各个对象之间进行共享
使用对象名.静态变量
虽然也可以使用静态变量,但容易产生误解。因此更推荐使用类名去访问静态的内容。
特点:
- 数据共享
- 属于类的,而不属于对象的
- 优先于对象产生
通用构造器,静态构造器
创建对象的过程(简单):
- 静态构造器
- 通用构造器
- 构造方法—>创建对象
由于创建对象的过程是在静态内容加载完成之后,在静态方法和静态块里不能使用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()
访问权限
- public 公共的,所有人都可以访问
- default 包访问权限,在自己包内可以随意访问
- 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("李世民也想建立一个自己的国家");
}
多态
同一个对象拥有多种形态。
作用:把不同的数据类型进行统一
小知识点:
把子类的对象赋值给父类的变量->向上转型。
把父类的变量转换回子类的变量->向下转型
向下转型有可能有风险,java要求必须谢强制类型转换(转换之后的数据类型变量)
Final关键字
- 被final修饰的变量不可以被改变,又被称为常量,又被称为常量。
- 被final修饰的方法不可以被重写。
- 被final修饰的类不可以被继承。
final就是不可变
抽象
抽象方法:使用abstract来修饰,不可以有方法体,直接用分号结束即可
抽象类:如果一个类中有抽象方法,这个类必须是一个抽象类
特点:
- 抽象类不可以创建对象
- 抽象类的子类:必须重写父类中的抽象方法,否则子类必须也是抽象类
通过抽象类可以强制地要求子类中必须有哪些方法。
小知识点:抽象类中可以有正常的方法。
接口
接口实际上是一种特殊的抽象方法
/**
* 能继承接口的只能是接口
* 接口和类只能是实现关系 implements
*/
public interface Valuable{//接口使用interface来声明,已经不是类了//接口中带有的方法都是抽象方法,可以省略掉abstract
//接口中所有的内容都是公开的,公共的void getMoney(); //接口中所有的方法都是抽象方法,不可以有正常的方法}
equals 与 ==
- 子类中的equals方法其本质和==是一样的。都是判断内存地址是否一致。
- ==是判断数值是否相等。
- 可以重写默认的equals方法。
- string中的equals方法是判断值是否相等。
toString
- 直接打印类,调用的是toString方法
- 默认的toString方法显示的是该类的:
包名+类名+@内存地址
- 可以重写toString方法
instanceof
- 判断这个对象是什么类型的
参数传递问题
- 值传递:把变量的值作为参数进行传递(java里面就是值传递)
- 引用传递:直接把变量变为参数传递(c语言就是引用传递)
面向对象总结
本章重点:
- 类与对象->封装
- 构造 this当前类的对象/super父类
- 访问权限
public/private - 继承
- 多态:让java更为灵活
- 抽象 abstract 对子类进行约束
- 接口 特殊的抽象类
- 内存简单分析
异常
- 异常是错误,有编译时异常,运行时异常。
运行时异常
- 抛异常,创建一个错误对象,把错误对象丢出来
- 捕获异常,默认有JVM来把错误信息运行捕获,程序会中断,打印出来。
分类
- RuntimeException:运行时异常,一般不手动处理,出问题再处理
- 其他Exception:必须要经过手动处理
- Error:一般的是系统及错误
处理异常
- try-catch
try {
> 尝试执行的代码
> }catch{Exception e}{
> 处理异常的代码
> } finally{
> //收尾工作
> }>
- throw
throws表示方法准备要扔出来一个异常
产生的错误尽可能地自己处理,少向外抛出异常
throw 表示向外抛出异常
自定义异常
略
JAVA面向对象程序设计--老男孩IT相关推荐
- 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告
20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...
- java面向对象程序设计第三版_JAVA面向对象程序设计之创建型设计模式
[本文详细介绍了JAVA面向对象程序设计中的创建型设计模式,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 什么是设计模式 设计模式( Design pattern )是一套被反复使用.多数 ...
- 20175333曹雅坤 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20145122《Java面向对象程序设计》实验二实验报告
实验名称: Java面向对象程序设计 实验内容: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 PSP时间 步骤 ...
- Java第二次实验报告——Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程名称:java程序设计实验 班级:1352 姓名:洪韶武 学号:20135219 成绩: ...
- java程序面向对象show,20165309 实验二 Java面向对象程序设计
2017-2018-2 20165309实验二<Java面向对象程序设计>实验报告 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初 ...
- 20155201 实验四《Java面向对象程序设计》实验报告
20155201 实验四<Java面向对象程序设计>实验报告 一.实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局 ...
- java构成对象的三要素_20155237 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告...
20155237 <JAVA程序设计>实验二(JAVA面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...
- 2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告
实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 1.参考Intellj IDEA 简易教程 提交 ...
最新文章
- 基于内容的图像检索CBIR部分数据库和源代码资料
- VTK:IO之ReadPLY
- Redis总结(四)Redis 的持久化
- P4306-[JSOI2010]连通数【bitset】
- [Leetcode][第332题][JAVA][重新安排行程][欧拉回路 / 欧拉通路][优先队列][DFS]
- linux kvm 常用命令
- java脚本含义_set -e在bash脚本中的含义是什么?
- 黄聪:C#获取网页HTML内容的三种方式
- 数据解析1:XML解析(1)
- Ubuntu部署python3.7的开发和运行环境
- mac系统下快速安装windows软件 a_每日一款Mac软件之“Parallels Desktop 16.0.1(48919) Mac上最高效与好用的虚拟机工具”...
- Java 注解(Java Annotation)
- python记录鼠标和键盘操作并重复_Python模拟鼠标和键盘操作实现重复性操作
- Java volatile 关键字的作用
- ChatGPT使用拓展资料:AI大模型之美 -客户服务、聊天机器人和情感分析
- Python 批量修改文件名称
- Qt音视频开发12-mpv解码播放
- 「算法」拓扑排序(货真价实,童叟无欺)
- Android笔记本处理器,惠普或推Android笔记本:配Tegra处理器
- mysql 数据表的复制
热门文章
- 樱花漫地集于我心,蝶舞纷飞祈愿相随---总结 浮动:flux 浮动:flux
- (附源码)计算机毕业设计ssm飞羽羽毛球馆管理系统
- 经颅直流电刺激(tDCS)左侧额下皮质可促进口吃者的语言流利性
- 【商品分类数据集】——RP2K
- 内置数据库H2和内置Redis(测试结果来啦)
- (亲测可用)Python 进行图像的多种格式批量转换:.tiff,.jpg,.png
- 为什么对企业来说,业务比技术重要的多
- 群晖第三方社群套件源显示无效的位置解决方法
- 循环冗余校验检错方案
- 三星530换固态硬盘_三星 870QVO 首测:探寻全球容量最大消费级固态硬盘的秘密...