JavaOOP
2024-05-21 12:06:21 5 举报
AI智能生成
javaOOP
作者其他创作
大纲/内容
类与对象
对象
定义
客观存在事物,万事万物皆为对象!
对象有特征(属性)和行为(方法)
类
定义
类就是从具备相同属性和方法的多个对象中抽象出来的
类和对象有什么区别呢?
类是一个抽象的概念,
对象是一个你能够看得到、摸得着的具体实体
面向对象编程的三个重要的原则
封装
继承
多态性
定义类
class 类名{ }
说明
1个文件中可以有多个类,但是公共类只有一个,且与文件名同名
编译是以类为单位。一个类中有多少个类,编译生成多少个class文件
class 类名{
属性;
方法;
}
属性;
方法;
}
属性
在类中声明的变量; 都有初始值;
方法
方法1
方法
定义方法语法
public 返回值类型 方法名() {
//这里编写方法的主体
}
//这里编写方法的主体
}
方法的返回值类型
非void(有返回值),方法体中必须有 return <表达式>语句,且<表达式>类型要与方法的<返回值类型>要一致;
方法只有一个返回值
方法的调用
方法:对象名.方法名
调用过程: 方法的调用时,程序流程进入到方法体,当执行return时,返回调用处
变量的作用域 :{}决定变量的作用域
根据变量的作用范围不同分为:全局变量(成员变量)和局部变量
成员变量:是在类中声明的变量,作用范围是整个类; 有初始值;其初始值参考数组元素;数值类型为0 , boolean:false, char:’\u0000’空格
局部变量:在方法中声明的变量 ,作用范围当前方法中; 没有初始值
局部变量的优先级高于全局变量
封装
定义
隐藏对象的属性和实现细节,仅对外公开接口(类的成员)来和对象进行交互.
封装基本单元
类
功能
代码重用
方法2
String类型的全局变量的初始值为null
构造方法
特点
方法名与类名相同;没有返回值
调用
在实例化时
说明
任何类都有一个隐式默认不带参的构造方法
写了构造方法,就无默认不带参的构造方法
this
功能
代表当前对象
使用
this.成员名调用属性和方法
功能
解决局部变量与全局变量同名时,如果要访问全局变量在前加this
参数
参数分为
形参
定义方法中声明的变量
实参
调用方法中的参数
方法调用时,实参要与形参一一对应;实参与形参的类型、数量、顺序一一对应
给成员变量赋值方法
成员变量声明时初始化
通过构造方法给成员变量赋值
通过对象名,属性名给成员变量赋值
对象数组
封装
为什么要封装,提高安全性
定义
将属性和实现细节隐藏,提供外面可访问接口
封装的基本单元是类
toString方法
默认返回的类的全路径和对象在内存中的地址
输出一个对象时会自动调用toString方法
数据类型(值类型和引用类型)
值类型: 8种基本数据类型; 枚举
引用类型: 数组、类、接口
引用类型: 数组、类、接口
值类型变量中保存的是“值”
引用类型变量中保存的是“地址”
引用类型变量中保存的是“地址”
赋值后 值类型变量无关系
引用类型变量有关系
引用类型变量有关系
String类型
特点
不可更改
包
定义包
package 包名1.包名2;
说明
必须位于程序第一行
包名要与文件夹一一对应
包名小写
功能
命名机制和安全机制
命名机制:在同一个包中的类名不能相同
对象数组
班级类
重载&构造
构造方法
特点
方法名与类名相同
无返回值类型
什么时候调用
实例化时
功能
初始化
说明
任何类都有一个隐式不带参的构造方法;
如果类中写了构造方法,就无隐式构造方法。
方法重载
定义
在一个类中,如果方法名相同,但参数不同的现象; 与方法的返回类型无关
功能
减少方法的记忆量
JDK中有大量的重载:System.out.println(),Scanner()
封装
为什么要封装:不封装数据不安全
怎样封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问
而时通过该类提供的方法来实现对隐藏信息的操作和访问
而时通过该类提供的方法来实现对隐藏信息的操作和访问
面对对象的三大特征:(抽象)、封装、继承、多态
封装的基本单元:类
this
定义
代表当前对象
使用
this.属性名:调用属性
this.方法名调用方法
this():调用构造方法,如果使用,必须是构造方法中的第一条语句
static&单例模式
static(静态的)
修饰方法
在本类中:静态方法只能调用静态成员
在不同类中: 静态成员访问方式:
对象名.成员名(不推荐)
类名.成员名
修饰属性
静态属性是所有实例共享
静态属性生命周期为整个应用程序
静态块和非静态块
静态块在整个应用程序中被执行一次
类文件加载在整个应用程序中也只会被加载一次
非静态块在实例化之前被执行
应用
初始化
单例模式 (设计模式)
步骤
将构造方法私有化
声明一个静态本类的对象
提供公共静态的方法,获取本类实例
普通类是多例模式
继承
继承
定义
如果两个类存在is(是)的关系那么就两个类就允许存在继承关系
父类与子类
父类
父类中放的是共有的特征或者行为
父类(parentClass)也叫超类(superClass)也叫基类(baseClass)
子类
子类中放的是独有的特征或者行为
子类(subClass)也叫派生类(deriveClass)
父类中公开的方法或者属性子类都可以
无条件拿到(继承到)
无条件拿到(继承到)
继承的好处
少写一些共有的代码
提供另外一种形式的分类
代码重用
语法
子类 extends 父类
特点
子类可以直接拿到父类的公有的
但是父类不能拿子类的
但是父类不能拿子类的
继承的单方向
一个类只允许有一个父类
继承也是单继承
一个类只允许有一个父类
继承也是单继承
重写
当子类存在与父类相同的方法现象
可以使用@Override注解检查重写是否成功
重写有关的是:方法名称,参数,返回值类型
super
super.属性可以显示调用父类属性
super.方法可以显示调用父类方法
切记
super不是父类的地址(引用)
它仅仅是一个关键字
它仅仅是一个关键字
super()表示调用父类的构造
它也只能放在构造方法的第一行
它也只能放在构造方法的第一行
this
this是一个当前对象的地址(引用)
调用属性:this.属性
调用方法:this.方法()
调用构造方法:this()调用自己本类的构造
注意
对于继承关系的构造方法,一定是先调用父类的再调用子类的
补充
super 调用父类的东西 可以调用父类的构造函数
子类在实例化的时候 会先调用父类的构造函数
重写&抽象
抽象类与抽象方法
修饰关键字:abstract
抽象类不能被实例化
抽象方法不能有方法体,它必须位于抽象类中抽象类可以没有抽象方法
为什么要使用抽象方法
父类中实现不了
具有强制性
关键字
final(最终的)
可以修饰类,方法,变量
修饰类,此类无法被继承
修饰方法,此方法不能被重写
修饰属性,此变量的值不能被改变
此变量也称为符号常量
程序调试
如何进行程序调试
设置断点
debug运行程序
单步运行
F5 单步跳入
F6 单步跳出
观察变量的值
应用
理解循环
子类构造方法
子类构造方法中的第一句有隐式的super()调用父类不带参的构造方法
如果写了super()方法,就无隐式的
final&多态
多态
为什么有使用多态
不能维护,不能扩展
定义
同一个引用类型,使用不同的实例而执行不同操作
实现多态
编写父类
编写子类,子类重写父类方法
运行时,使用父类的类型,子类的对象
功能
可维护,可扩展
里氏替换原则
子类对象替换父类
instanceof
判断是否是某个类的实例
复习
类与对象
万事万物皆对象
对象有自己的特征和行为
相似对象抽象为类(属性和方法)
以类为模版创建有相同属性的方法的对象
成员访问方式
对象名.成员名
封装
定义
将属性和实现细节隐藏,提供外部可访问的接口
访问修饰符
private
默认(友好的)
protected
public
this
定义
代表当前对象
使用方式
this.成员名
this() 调用构造方法
在什么情况小使用
局部变量与全局变量同名时,调用全局变量
方法的参数
形参和实参
形参
定义方法中的参数
实参
调用方法中的参数
调用方法时
将实参的值依次赋值给形参
实参和形参一一对应
构造方法
定义
没有返回值类型,方法名与类名相同
说明
每个类都有一个隐式的不带参的构造方法
如果写了构造方法,就无隐式构造方法
调用方式
实例化时
重载
定义
在一个类中,如果存在多个方法名相同,参数列表不同的现象
复习&作业讲解
继承
实现
extends
定义
如果两个类存在is(是)的关系那么就两个类就允许存在继承关系
功能
子类继承父类的成员
代码重用
继承的好处
少写一些共有的代码
提供另外一种形式的分类
代码重用
说明
子类可以直接拿到父类的公有的
但是父类不能拿子类的
但是父类不能拿子类的
继承的单方向
一个类只允许有一个父类
继承也是单继承
一个类只允许有一个父类
继承也是单继承
不能被继承的成员
私有成员
构造方法
子类构造方法
子类构造方法第一句有一个隐式的super()调用父类不带参的构造方法
子类构造方法初始值过程
初始化父类属性
调用父类的构造方法
初始化子类属性
调用子类的构造方法
为属性赋值
通过setXX方法
通过构造方法
重写
定义
子类存在与父类相同的方法现象
可以使用@Override注解检查重写是否成功
重写有关的是:方法名称,参数,返回值类型
多态
为什么有使用多态
不能维护,不能扩展
定义
同一个引用类型,使用不同的实例而执行不同操作
实现多态
编写父类
编写子类,子类重写父类方法
运行时,使用父类的类型,子类的对象
功能
可维护,可扩展
里氏替换原则
子类对象替换父类
接口
定义
关键字:interface
语法
public interface 接口名
如果一个类要实现这些功能
语法是 public class 类名 implements 接口名1,接口名2...
接口与抽象类的区别
抽象类是类所以只能单继承,而接口(interface)可以多实现
抽象类继承用extends,而接口用implements
抽象类可以有构造,接口不能
抽象类可以有一般的属性,接口中的属性只能是静态常量
抽象类中可以有抽象方法,也可以有一般的方法,而接口只能有抽象方法
抽象类中的抽象方法可以被除private以外的修饰符修饰,但接口中只能是public
接口的特点
接口不可以被实例化 (常作为类型使用)
接口中的方法都是公共的抽象方法
实现类必须实现接口的所有方法 (抽象类除外)
实现类可以实现多个接口 (Java中的多继承)
接口中的属性默认为公共的静态的最终的属性 (符号常量)
必须有初始值
接口是什么
接口是一种约定,规范
接口表示一种能力
如果要使用Arrays.sort()排序,目标必须实现Comparabler接口
接口弥补单继承的不足
常量一定是全大写
异常
异常1
开发Java程序的三个步骤
编写源程序.java
编译.class
运行
异常
定义
程序运行过程中可能发生的错误;可能导致应用程序终止
处理异常
if
使用if排除可能发生异常的情况
try-catch
try块
监控可能发生异常的代码
如果发生了异常,try块后面的代码不会被执行.直接跳到catch块中
如果catch块不能处理,最终还是抛给系统
catch块
捕获异常、处理异常
捕获异常:声明类型是抛出异常对象类型或它的父类类型;Exception是所有异常类的父类
处理异常:printStackTrace()是异常中的打印异常信息
如果异常类的类型时抛给异常对象的类型或它的父类类型
catch块中声明异常类类型
常见的异常类型
Exception:异常层次结构的根类
ArithmeticException:算术错误情形,如以零做除数
ArrayIndexOutOfBoundsExseption:数组下标越界
NullPointerException:尝试访问null对象成员
ClassNotFoundException:不能加载所需的类
InputMismatchException:欲得到数据类型与实际输入类型不匹配
IllegalArgumentException:方法接收都非法参数
ClassCastException:对象强制类型转换出错
NumberFormatException:数字格式转换异常,如把"abc"转换成数字
异常基类:Throwable类,它有Error和Exception子类
Error异常:属于jdk或系统异常
Exception:时程序抛出的异常
Exception:分为RuntimeException(运行时异常)和RuntimeException(非运行时异常)
try-catch-finally块
finally块:无论是否有异常.都会被执行;应用于释放资源
try可以只和finally块组合使用;但没有处理异常,所有异常还是会抛出
异常2
熟悉异常类
目的
发生异常时,通过异常信息,快速了解发生异常的原因,并能解决
发生异常要做的事情
知道异常类型
自己项目发生异常的位置
NullPointerException
当对象为null时,不能调用其成员(属性和方法)
异常类
Throwable是异常基类,它有两个子类
Error
这是JDK错误,程序员无法去处理
Exception
异常类的基类
Exception类分为
RuntimeException(运行时异常)
非运行时异常
抛出运行时异常,可以不处理;抛出非运行时异常,必须处理
处理异常
try catch块
throws
常见的的RuntimeExcepytion
NullPointExceptin:空指针异常
ArithmeticException:算术异常
ClassCastException:类型不匹配异常
ArrayIndexOutofBoundsExcepetion:数字下标越界
NumberFormatException:数字格式异常
多重catch
catch声明异常类型捕获它本类或子类异常
多重catch中父类类型不能位于子类之前
自定义异常
自定义异常方法
继承Exception或它的子类
应用于
没有违反Java语法规则,但违反业务规则;找不到合适的返回值通知调用者
0 条评论
下一页