资源描述
二、面向对象一、类和对象
<1>对象:用来描述客观事物的一个实体,由一组属性和方法构成
*属性——对象具有的各种特征
*方法——对象执行的操作
<2>类:具有相同属性和方法的一组对象的集合类是对象的抽象。
类定义了对象将会拥有的属性和方法
<3>类和对象的关系
类是抽象的概念,对象是一个实体。
<4>定义类
*定义属性的语法[访问修饰符]class类名{
//属性〃方法
1
*类名:帕斯卡命名规则(每一个单词的首字母大写)
<5>属性
*定义属性的语法[访问修饰符]数据类型属性名
*属性名:驼峰命名规则(即变量命名规则)
<6>方法
*定义方法的语法[访问修饰符]返回值类型 方法名(参数类型 参数1,参数类型 参数2,……)1 //省略方法体代码
}
*方法名:驼峰命名规则(即变量命名规则)
<7>创建对象
*创建对象的语法类名对象名=new类名();
*对象名:驼峰命名规则(即变量命名规则)
<8>使用对象
*使用对象的语法对象名.属性
对象名.方法名()
<9>对象数组
*对象数组的数据类型就是具体的类名.
*对象数组内存储的就是这个类的对象
*每个数组元素就是一个对象
*根据下标找到某个元素
*按照对象对的使用方法使用该元素
<10>方法的返回值
*实例化自定义异常对象
*使用throw抛出补充:面向对象设计原则
a. 摘取代妈中变化的行为,形成接口
b. 多用组合,少用继承
c. 针对接口编程,不依赖于具体实现
d. 针对扩展开放,针对改变关闭
*如果方法具有返回值,方法中必须使用关键字return返回该值,返回值类型为该值 的类型
*返回值只能有一个
*如果方法没有返回值,返回值类型为void
<11>方法的参数
*方法名()无参方法pub Iic void show0 (
1
*方法名(参数)带参方法public void show(i nt i, Str ing s, int j) (
}pub Iic void show(int i, Str ing s) {
1方法有没有参数和方法有没有返回值,是两码事,毫无关系.
(1) 带参方法,参数个数可以有一个,也可以有多个,多个参数之间用逗号隔开.
(2) 带参方法,参数名字可以随意取,符合变量命名规则.
(3) 方法定义处的参数叫形式参数(形参),方法调用处传的值叫实际参数(实参).
(4) 形参和实参名字可以不一样,但是数据类型要一样,个数要一样,顺序要一样 方法的调用.
♦方法之间允许相互调用,不需要知道方法的具体 实现,实现重用,提高效率
情况
举例
Student类的方法a()调用Student 类的方法b(),直接调用
public void a() (
3(); 〃调用 b() )
Student类的方法a()调用Teacher 类的方法b(),先创建类对象,然后 使用调用
public void a() (
Feacher t = new Teacherf);
t.b(); //调用Teacher类的b() )
<12>方法的传参
*基本数据类型
操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。 *引用数据类型(类、数组和接口)赋值是把原对象的引用(可理解为内存地址)传递给另一个引用
<13>构造方法
*构造方法的语法[访问修饰符]方法名([参数列表]){
//方法体的代码}
*方法名:与类名相同
*如果没有自定义有参构造方法,则系统会自动添加默认无参构造方法
*如果自定义了有参构造方法,则系统不会自动添加默认无参构造方法
<14>this的用法
*调用属性this.health = 100;
th i s. name ="大黄";
*调用方法this, pr int ();
*调用构造方法this() ;//如果使用,必须是构造方法中的第一条语句.
this("小黑”,100,100, ”雄”);
*使用this的注意this是在对象内部只带自身的引用.
this只能调用实例变量、实例方法和实例构造方法.
this不能调用类变量和类方法,this也不能调用局部变量.
<15>方法的重载
*同一个类中.
*方法名相同.
*参数个数或类型不同.
*与返回值、访问修饰符无关.
<16>构造方法重载
*方法名相同.
*参数项不同.
*与返回值、访问修饰符无关.
<17>成员变量和局部变量
*成员变量:类的范围内声明的,在类的整个范围内都能用。也叫全局变量.
*局部变量:局部(方法里、代码体里)声明,在声明的范围内使用,叫局部变量.
*局部变量在使用前必须赋初始值全局变量即使使用前没有赋初始值,系统默认会初始 化.
*局部变量可以和全局变量同名,也可以不同名。同名的时候,就近使用.
二、封装
<1>封装的概念
*将类的某些信息隐藏在类内部,不允许外部程序直接访问,
*而是通过该类提供的方法来实现对隐藏信息的操作和访问。
<2>封装的两个大致原则
*把尽可能多的东西藏起来,对外提供便捷的接口
*把所有的属性藏起来
<3>封装的步骤
*修改属性的可见性pr i vate
*设置 setter/getter ()方法
*设置属性的存取显示
<4>包的作用
*允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件
*防止命名冲突区分名字相同的类
*有助于实施访问权限控制
<5>包命名规范
*包名由小写字母组成,不能以圆点开头或结尾*包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名 *包名后续部分依不同机构内部的规范不同而不同
<6>JDK提供基本包
*java. lang:虚拟机自动引入
*java. util:提供一些实用类
*java. io:输入、输出
<7>包的使用package 声明包;//必须位于第一行(忽略注释行) import导入包;〃可以有多句
import java, ut i I. //导入 java, ut i I 包中所有类 import java. util. Scanner; //导入指定包中指定类
<8>访问修饰符
Java中美的访何修伸苻
用域
修饰叶J
同一个包中
非同一包中
public
可以使用
可以使用
默认修修符
可以使用
不可以使用
Java中矣成员的访问修怦符
^用域 修饰咨
同一个类中
同一个包中
子类中
任何地方
private
可以使用
不可以使用
不可以使用
不可以使用
默认修饰符
可以使用
可以使用
不可以使用
不可以使用
protected
可以使用
可以使用
可以斐用
不可以、使用
public
可以使用
可以使用
可以、受用
可以使用
<9>stat i c修饰符可以用来修饰
*成员变量静态变量,可以直接通过类名访问
*成员方法静态方法,可以直接通过类名访问
*代码块静态代码块,当Java虚拟机加载类时,就会执行该代码块
<10>Static 变量
1、类变量(静态变量)*被stat i c修饰的变量
*在内存中只有一个拷贝*类内部,可在任何方法内直接访问静态变量
*其他类中,可以直接通过类名访问
2、实例变量*没有被static修饰的变量
*每创建一个实例,就会为实例变量分配一次内存*实例变量可以在内存中有多个拷贝,互不影响
<11>static 方法
1、静态方法:可直接通过类名访问*静态方法中不能使用this和super
*不能直接访问所属类的实例变量和实例方法*可直接访问类的静态变量和静态方法
2、实例方法:通过实例访问*可直接访问所属类的静态变量、静态方法、实例变量和实例方法
3、静态方法必须被实现*main()就是最常用的静态方法
4、static代码块
*类的构造方法用于初始化类的实例,类的静态块用于初始化类,给类的静态变量 赋值三、继承
<1>继承的语法
[访问修饰符]c I ass <SubClass> extends <SuperClass> (
}
<2>继承的内容
*pubI ic和protected修饰的属性和方法,不论子类和父类知否在同一个包里 *可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包里 *无法继承父类的构造方法以及pr i vate修饰的属性和方法
<3>继承的注意
*子类与父类是is-a关系
*Java中只支持单根继承,即一个类只能有一个直接父类
<4>super关键字
*super使用的语法访问父类构造方法:super (参数)
访问父类属性/方法:super. <父类属性/方法〉
<5>方法重写的规则
*方法名相同
*参数列表相同
*返回值类型相同或者是其子类
*访问权限不能严于父类
*父类的静态方法不能被子类覆盖为非静态方法
*父类的非静态方法不能被子类覆盖为静态方法
*子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法
*父类的私有方法不能被子类覆盖
*不能抛出比父类方法更多的异常
*构造方法不能被重写
<6>方法重写(Overr id i ng) vs 方法重载(Over load ing)
比较顼
位危
方法名
参数表
返回值
访问修饰符
方法重写
子类
相同
相同
相同或是 其子类
不能比父 类更严格
方法重栽
同类
相同
不相同
无关
无关
<7>0bject 类
*是一切类的父类
*常被重写的方法equa I s ()equals ()方法没有被重写之前,和=作用是一样的
instanceof 的使用instanceof用于判断一个引用类型所引用的对象是否是一个类的实例
四、多态
<1>定义:同一个引用类型,不同的实例,执行不同的操作(JVM的动态绑定机制)
<2>前提:*要有继承关系;*要有方法重写.(实现多态的基础)
*要有父类引用指向子类对象.
<3>向上转型
*父类引用指向子类对象.
*向上转型的语法〈父类〉〈引用变量名〉=new〈子类〉;
【注】此时通过父类引用变量无法调用子类特有的方法.(如果需要,则向下转型) <4>向下转型
*将一个指向子类对象的父类引用赋给一个子类的引用.
*向下转向的语法〈子类型〉〈引用变量名〉=(〈子类型〉)〈父类型的引用变量〉;
【注】在向下转型的过程中,如果没有转换为真实子类类型,则会出现类型转换异常.
五、抽象类和抽象方法
<1>抽象类的定义语法
abstract c I ass〈类名 >{
}
<2>抽象方法的定义语法
[访问修饰符]abstract〈返回值类型〉〈方法名〉([参数列表]);
<3>抽象类与抽象方法的使用
*抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
*如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
*没有抽象构造方法,也没有抽象静态方法
*抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
<4>抽象类VS普通类
*抽象类不能被实例化但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例
*普通类可以被实例化
<5>抽象方法VS普通方法
*有无方法体六、接口
<1>接口的定义语法
publ ic i nterface〈接口 名>{//接口成员
)
<2>实现接口的语法
pub I ic〈类名〉imp I ements〈接口 名>(〃实现方法
//普通方法
1
<3>接口特性
*接口不可以被实例化
*实现类必须实现接口的所有方法
*实现类可以实现多个接口i mp I ements、多个接口使用逗号隔开
*接口中的变量都是静态常量(public stat i c final)
<4>接口使用
*接口中的成员变量默认都是publ ic static final的,必须显式初始化
*接口中的方法默认都是pub I ic abstract的
*接口没有构造方法,不能被实例化
*一个接口不能实现另一个接口,但可以继承多个其他接口
*一个类必须实现接口抽象方法,除非这个类也是抽象类
<5>抽象类vs接口
a. 相同点*代表系统的抽象层
*都不能被实例化*都能包含抽象方法
*用于描述系统提供的服务,不必提供具体实现
b. 不同点
*在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法 *抽象类便于复用,接口便于代码维护
*一个类只能继承一个直接的父类,但可以实现多个接口
c. 使用原则*接口做系统与外界交互的窗口
*接口提供服务*接口本身一旦制定,就不允许随意修改
*抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点七、异常
<1>Java中如何进行异常处理♦Java的异常处理是通过5个关键字来实现的:try、 catch、 finally> throw> throws
捕获异常声明异常
声明方法可能要 抛出的各种异常
执行可能产生 异常的代码抛出异常
throw手动抛出异常
无论是否发生异常, 代码总能执行
<2>异常对象常用的方法<3>try-catch
方法
说明
void printStackTrace()
输出异常的堆栈信息
String getMessage()
返回异常信息描述字符串, 是printStackTrace()输出信息的一部分
第一种情况:正常第二种情况:出现异常
异常是一种特殊的对象,类型为java. lang. Except ion或其子类 第三种情况:异常类型不匹配<4>try-catch-f i naI Iy
*是否发生异常都执行final ly*不执行的唯一情况System, ex it (1)
*即使try-catch内存在return语句,final ly也会直行<5>多重catch块
引发多种类型的异常*排列catch语句的顺序:先子类后父类
*发生异常时按顺序逐个匹配*只执行第一个与异常类型匹配的catch语句
<6>throw 与 throws
生成并抛出异常
声明方法内抛出了异常
位于方法体内部,可作为单. 独语句使用
必须跟在方法参数列表后面,不能整 独使用
掬出一个异常对象,且只能 是一个
声明抛出异常类型,可以跟多个异常
throwthrows
<7>异常体系结构
由Java应用程序 抛出和处理的非严重错误
SQLtxceplion
RuntimeExeption
ClassNotFoundException
AntbmeticExc
仅II程序本身无法 恢复的严重错误
运行时异常,不要求 程序必须做出处理
Excepti on和 Error类的父类
171,63 D:\0-u-nU4-08JAVA PPTUfi\PPT»»£ VAVA 内英 l.jpg
AWTErrof
NullPointerEx:e
Checked异常,程序 必须处理该类异常
NumberFomatE
<8>自定义异常
*定义异常类,并继承Excepion或者RuntimeException*编写构造方法,继承父类的实现。常见的构造方法有4种形式 〃构造方法1
pub I i c MyExcept i on () ( super ();}
〃构造方法2pub Ii c MyExcept i on (Str i ng message) { super (message);
}〃构造方法3
pub Ii c MyExcept i on (Str i ng message, ThrowabIe cause) { super (message, cause);}
//构造方法4pub Iic MyExcept i on (Throwable cause)(
super (cause);
展开阅读全文