javaoop
2024-05-21 09:43:36 1 举报
AI智能生成
jivaoop复习思维导图
作者其他创作
大纲/内容
复习
一、面向对象:
1、OOP 即面向对象编程,java就是面向对象编程的语言。
世界由万物组成,万物都是对象(世界万物皆为对象)
面向对象思想:
第一步:发现类;
第二步:发现类的属性;
第三步:发现类的方法;
2、对象:客观的存在在这个世界上的每一个事物;
万事万物皆为对象;
3、类:从具有相同属性和方法的多个对象中抽取出来的;
类里面有且仅有属性与方法;(学会把类看做一种数据类型)
4、区别:对象是实实在在存在的具体的概念 ;
类是一个抽象的概念;
5、属性---本身所具备的特征;
方法---会的行为(功能);
二、方法:
1、方法构造:修饰符 返回类型 方法名(参数){方法体}
2、属性构造:修饰符 数据类型 变量名
3、方法返回类型:方法按照返回类型可以分为以下两种:
a、有返回return : 在方法名前面接一个数据类型 ,且方法体内部最后一行必须接return ,
而且返回的数据类型必须和前面的数据类型保持一致!
b、无返回void : 在方法体内部不需要接return ,
在类里面 ,有且仅有“属性”和“方法”(禁止直接接代码)
4、方法传参:实参和形参的参数个数、数据类型、顺序一致
5、局部变量和成员变量:
1.局部变量没有初始值,而成员变量有
2.同名时,局部变量具有更高的优先级
3.作用域:局部变量只能在本方法中使用,成员变量可以在本类的所有方法中使用
4.同一个方法中,局部变量不允许重名
三、对象数组:
1、学会把类看作是一种数据类型!
2、对象数组三部曲:
定义类
声明并实例化一个对象
初始化(赋值)
3、封装两步:私有化属性 公开方法(可以根据实际情况考虑是否公开读写方法
4、this 这个 指代自己本类
四、重载与构造:
1、方法的重载 :同名不同参(参数类型 、个数不一致)
2、构造函数
a.方法名必须跟类名相同
b.没有返回类型 ,也不需要void
c.根据实际情况决定参数个数
d.在对象被实例化的时候被自动调用 ,不能手动用对象名去
e.可以有多个(重载)
f.所有的类都自带一个无参的构造方法 ,一旦自定义了一个构造函数,系统自带的无参的就没有了
五、this static 单例模式:
1、this 这个 指代自己本类;
构造函数链: 将所有对象的实例化全部归结到一个方法中
用this可以在构造函数内部调用其他的构造函数 ,但是它只能放在方法体的第一行;
2、static
a、非静态的只能用对象名调用, 静态的既能用对象名来调用,
又能用类名来调用
b、静态的只能调用静态的 ,非静态的都能调用
c、静态的在对象中间是共享的,只占用一份内存空间
d、代码块:分为静态代码块和非静态代码块,静态的只占有一份空间,都是在对象被实例化的时候自动调用 先静后非静
3、单例模式:
该类只能被实例化一次(设计模式);
六、继承:父类中公开的方法或者属性子类都可以无条件拿到(继承到)
1、继承的好处:
a.少写一些共有的代码
b.提供另外一种形式的分类
c.代码重用
2、语法:
子类 extends 父类
3、super用法:
super.属性可以显示调用父类属性;
super.方法可以显示调用父类方法;
4、子类可以直接拿到父类的公有的
但是父类不能拿子类的
继承的单方向
一个类只允许有一个父类
继承也是单继承
5、子类在实例化的时候 会先调用父类的构造函数
七、重写与抽象:
1、重写:
a、子类对于父类的不满意,可以补充,则直接重写父类的方法。
b、删除重写中的super.方法();就是全部推翻父类写法。
c、注意:子类的方法的名字、返回值、参数必须要与父类保持一致
d、修饰符只能比父类的要高或者相等
e、重写的方法是否可以重载?可以
2、抽象:
抽象类:不能被实例化 但是可以作为其他类的父类
抽象方法: * 没有方法体;
* 必须在子类中实现(重写),除非子类也是一个抽象类;
* 抽象方法必须在抽象类中
八、final与多态:
1、多态:同样一种行为,在不同的对象中(不同的环境下)会产生不同的形态【关键在于将父类作为形参】
2、final:
1.放在类前面,则该类不能被继承
2.放在方法前面,则该方法不能在子类中被重写
3.放在属性(变量)前面,则为常量,必须有初始值且不能被修改
九、instanceof:判断运算符
十、接口:
1、接口表示的其实是一种能力
对象是对现实世界物体的抽象
类是对对象的抽象
接口是对类的抽象
2、语法:public interface 接口名
如果一个类要实现这些功能:
语法是 public class 类名 implements 接口名1,接口名2...
3、接口与抽象类的区别:
a:抽象类是类所以只能单继承,而接口(interface)可以多实现
b:抽象类继承用extends,而接口用implements
c:抽象类可以有构造,接口不能
d:抽象类可以有一般的属性,接口中的属性只能是静态常量
e:抽象类中可以有抽象方法,也可以有一般的方法,而接口中只能有抽象方法
f:抽象类中抽象方法可以被除private以外的修饰符修饰,但是接口中只能是public
4、常量一定是全大写
十一、异常:
1、异常:就是在程序中有可能发生的问题。
2、语法是:try{//监视
有可能出现问题的代码
}catch(异常的类型 异常信息所封装成的对象){
处理异常的代码
}finally{
最后会被执行的代码(有无异常都会被执行)
}
3、自定义异常 throws
4、抛出异常throw
十二、里氏替换原则:用子类实例化的对象来覆盖父类声明的对象
十三、修饰符:
private:私有化,最小气的,只能在自己的类中访问;
friendly:默认,友好的,只能在自己的类中、同包的类中访问;
protected:受保护的,只能在自己的类、同包的类、子类中访问;
public:公共的,最大方的,当前项目中所有的类都可以访问。
1、OOP 即面向对象编程,java就是面向对象编程的语言。
世界由万物组成,万物都是对象(世界万物皆为对象)
面向对象思想:
第一步:发现类;
第二步:发现类的属性;
第三步:发现类的方法;
2、对象:客观的存在在这个世界上的每一个事物;
万事万物皆为对象;
3、类:从具有相同属性和方法的多个对象中抽取出来的;
类里面有且仅有属性与方法;(学会把类看做一种数据类型)
4、区别:对象是实实在在存在的具体的概念 ;
类是一个抽象的概念;
5、属性---本身所具备的特征;
方法---会的行为(功能);
二、方法:
1、方法构造:修饰符 返回类型 方法名(参数){方法体}
2、属性构造:修饰符 数据类型 变量名
3、方法返回类型:方法按照返回类型可以分为以下两种:
a、有返回return : 在方法名前面接一个数据类型 ,且方法体内部最后一行必须接return ,
而且返回的数据类型必须和前面的数据类型保持一致!
b、无返回void : 在方法体内部不需要接return ,
在类里面 ,有且仅有“属性”和“方法”(禁止直接接代码)
4、方法传参:实参和形参的参数个数、数据类型、顺序一致
5、局部变量和成员变量:
1.局部变量没有初始值,而成员变量有
2.同名时,局部变量具有更高的优先级
3.作用域:局部变量只能在本方法中使用,成员变量可以在本类的所有方法中使用
4.同一个方法中,局部变量不允许重名
三、对象数组:
1、学会把类看作是一种数据类型!
2、对象数组三部曲:
定义类
声明并实例化一个对象
初始化(赋值)
3、封装两步:私有化属性 公开方法(可以根据实际情况考虑是否公开读写方法
4、this 这个 指代自己本类
四、重载与构造:
1、方法的重载 :同名不同参(参数类型 、个数不一致)
2、构造函数
a.方法名必须跟类名相同
b.没有返回类型 ,也不需要void
c.根据实际情况决定参数个数
d.在对象被实例化的时候被自动调用 ,不能手动用对象名去
e.可以有多个(重载)
f.所有的类都自带一个无参的构造方法 ,一旦自定义了一个构造函数,系统自带的无参的就没有了
五、this static 单例模式:
1、this 这个 指代自己本类;
构造函数链: 将所有对象的实例化全部归结到一个方法中
用this可以在构造函数内部调用其他的构造函数 ,但是它只能放在方法体的第一行;
2、static
a、非静态的只能用对象名调用, 静态的既能用对象名来调用,
又能用类名来调用
b、静态的只能调用静态的 ,非静态的都能调用
c、静态的在对象中间是共享的,只占用一份内存空间
d、代码块:分为静态代码块和非静态代码块,静态的只占有一份空间,都是在对象被实例化的时候自动调用 先静后非静
3、单例模式:
该类只能被实例化一次(设计模式);
六、继承:父类中公开的方法或者属性子类都可以无条件拿到(继承到)
1、继承的好处:
a.少写一些共有的代码
b.提供另外一种形式的分类
c.代码重用
2、语法:
子类 extends 父类
3、super用法:
super.属性可以显示调用父类属性;
super.方法可以显示调用父类方法;
4、子类可以直接拿到父类的公有的
但是父类不能拿子类的
继承的单方向
一个类只允许有一个父类
继承也是单继承
5、子类在实例化的时候 会先调用父类的构造函数
七、重写与抽象:
1、重写:
a、子类对于父类的不满意,可以补充,则直接重写父类的方法。
b、删除重写中的super.方法();就是全部推翻父类写法。
c、注意:子类的方法的名字、返回值、参数必须要与父类保持一致
d、修饰符只能比父类的要高或者相等
e、重写的方法是否可以重载?可以
2、抽象:
抽象类:不能被实例化 但是可以作为其他类的父类
抽象方法: * 没有方法体;
* 必须在子类中实现(重写),除非子类也是一个抽象类;
* 抽象方法必须在抽象类中
八、final与多态:
1、多态:同样一种行为,在不同的对象中(不同的环境下)会产生不同的形态【关键在于将父类作为形参】
2、final:
1.放在类前面,则该类不能被继承
2.放在方法前面,则该方法不能在子类中被重写
3.放在属性(变量)前面,则为常量,必须有初始值且不能被修改
九、instanceof:判断运算符
十、接口:
1、接口表示的其实是一种能力
对象是对现实世界物体的抽象
类是对对象的抽象
接口是对类的抽象
2、语法:public interface 接口名
如果一个类要实现这些功能:
语法是 public class 类名 implements 接口名1,接口名2...
3、接口与抽象类的区别:
a:抽象类是类所以只能单继承,而接口(interface)可以多实现
b:抽象类继承用extends,而接口用implements
c:抽象类可以有构造,接口不能
d:抽象类可以有一般的属性,接口中的属性只能是静态常量
e:抽象类中可以有抽象方法,也可以有一般的方法,而接口中只能有抽象方法
f:抽象类中抽象方法可以被除private以外的修饰符修饰,但是接口中只能是public
4、常量一定是全大写
十一、异常:
1、异常:就是在程序中有可能发生的问题。
2、语法是:try{//监视
有可能出现问题的代码
}catch(异常的类型 异常信息所封装成的对象){
处理异常的代码
}finally{
最后会被执行的代码(有无异常都会被执行)
}
3、自定义异常 throws
4、抛出异常throw
十二、里氏替换原则:用子类实例化的对象来覆盖父类声明的对象
十三、修饰符:
private:私有化,最小气的,只能在自己的类中访问;
friendly:默认,友好的,只能在自己的类中、同包的类中访问;
protected:受保护的,只能在自己的类、同包的类、子类中访问;
public:公共的,最大方的,当前项目中所有的类都可以访问。
方法
什么是方法
方法是程序中最小的执行单元
怎么调用方法
对象名.方法名 对象名.属性名
对象名.成员名
对象名.成员名
实际开发中,什么时候用到方法
重复的代码,具有独立功能的代码可以抽取的方法中
实际开发中,方法有什么好处
可以提高代码的复用性
可以提高代码的可维护性
方法的注意事项
方法不调用就不执行
方法与方法之间是平级关系。不能互相嵌套定义
方法的编写顺序和执行顺序无关
方法的返回值类型为void,表示该方法没有返回值,
没有返回值的方法可以省略return语句不写。
如果要编写return,后面不能跟具体的数据。
return语句下面,不能编写代码,因为永远执行不到,属于无效代码
方法的重载
在同一个类中,定义了多个同名的方法,这些同名的方法具有同种的功能,
每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系
简单记:同一个类中,方法名相同,参数不同的方法。与返回值无关。
参数不同:个数不同、类型不同、顺序不同
参数不同:个数不同、类型不同、顺序不同
全局变量 是在类中声明的变量,
局部变量 是在方法中声明的
局部变量 是在方法中声明的
作用范围不同: 全局变量作用范围是整个类,局部变量作用范围是当前方法
局部变量的优先级高于全局变量;
初始值:全局变量有初始值,局部变量没有
局部变量的优先级高于全局变量;
初始值:全局变量有初始值,局部变量没有
类
定义类有哪些建议:
类名首字母建议大写,英文,有意义,满足驼峰模式,不能用关键字,满足标志符规定;
一个代码文件中可以定义多个类,但是只能有一个类是public修饰的,public修饰的类名必须是java代码的文件名称。
一个代码文件中可以定义多个类,但是只能有一个类是public修饰的,public修饰的类名必须是java代码的文件名称。
成员变量的格式,特点
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;
一般无需指定初始化值。
一般无需指定初始化值。
类:是共同特征的描述;对象:是真实存在的具体案例。
如何得到对象
拿到对象后能做什么?
对象.成员变量;
对象.成员方法();
返回值
什么时候用到有返回值的方法?
在调用处要根据方法的结果去编写另外一段代码
有返回值方法的定义格式
public static 返回值类型 方法名 (参数){
方法体;
return 返回值}
有返回值方法的调用格式
直接调用,赋值调用,输出调用
有返回值方法中参数的运行过程
return关键字
方法没有返回值:可以省略不写。如果书写,表示结束方法
方法有返回值,必须要写、表示结束方法和返回结果
构造方法
特点:方法名与类名相同;没有返回值
调用:在实例化时
说明:任何类都有一个隐式默认不带参的构造方法;
写了构造方法,就无默认不带参的构造方法;
写了构造方法,就无默认不带参的构造方法;
this
1.功能:代表当前对象
2.使用:this.成员名调用属性和方法
3.功能:解决局部变量与全局变量同名时,如果要访问全局变量在前加this
2.使用:this.成员名调用属性和方法
3.功能:解决局部变量与全局变量同名时,如果要访问全局变量在前加this
参数
1.参数分为:形参,实参
1)形参:定义方法中声明的变量
2)实参:调用方法中的参数
2.方法调用时, 实参要与形参一一对应;实参与形参的类型、数量、顺序一一对应
给成员变量赋值方法:
1.成员变量声明时初始化
2.通过构造方法给成员变量赋值
3.通过对象名.属性名给成员变量赋值
2.通过构造方法给成员变量赋值
3.通过对象名.属性名给成员变量赋值
内存
基本数据类型:数据值是存储在自己空间中
特点:赋值给其他变量,也是赋的是真实的值。
引用数据类型:数据值是存储在其他空间中。自己空间中存储的是地址值
特点:赋值给其他变量,赋的地址值。
static(静态的)
1. 修饰方法
1) 在本类中:静态方法只能调用静态成员
2)在不同类中:
静态成员访问方式:
1)对象名.成员名(不推荐)
2)类名.成员名
2. 修饰属性
1)静态属性是所有实例共享
2)静态属性生命周期为整个应用程序
3. 静态块和非静态块
1)静态块在整个应用程序中被执行一次
类文件加载在整个应用程序中也只会被加载一次
非静态块在实例化之前被执行
2)应用:初始化
1) 在本类中:静态方法只能调用静态成员
2)在不同类中:
静态成员访问方式:
1)对象名.成员名(不推荐)
2)类名.成员名
2. 修饰属性
1)静态属性是所有实例共享
2)静态属性生命周期为整个应用程序
3. 静态块和非静态块
1)静态块在整个应用程序中被执行一次
类文件加载在整个应用程序中也只会被加载一次
非静态块在实例化之前被执行
2)应用:初始化
封装
1)为什么要封装,提高安全性
2) 定义:将属性和实现细节隐藏,提供外面可访问接口
3)封装的基本单元是类
2. toString方法
1)默认返回的类的全路径和对象在内存中的地址
2)输出一个对象时会自动调用toString方法
3. 数据类型(值类型和引用类型)
1)值类型: 8种基本数据类型; 枚举
引用类型: 数组、类、接口
2)值类型变量中保存的是“值”
引用类型变量中保存的是“地址”
3)赋值后 值类型变量无关系
引用类型变量有关系
4. String类型
1) 特点:不可更改
2) 定义:将属性和实现细节隐藏,提供外面可访问接口
3)封装的基本单元是类
2. toString方法
1)默认返回的类的全路径和对象在内存中的地址
2)输出一个对象时会自动调用toString方法
3. 数据类型(值类型和引用类型)
1)值类型: 8种基本数据类型; 枚举
引用类型: 数组、类、接口
2)值类型变量中保存的是“值”
引用类型变量中保存的是“地址”
3)赋值后 值类型变量无关系
引用类型变量有关系
4. String类型
1) 特点:不可更改
1.什么是封装?
告诉我们,如何正确设计对象的属性和方法。
原则:对象代表什么,就得封装对应的数据,并提供数据对应的方法
2.理解封装思想的好处?
让编程变得很简单,有什么事,找对象,调方法就行。
降低我们学习成本,可以少学,少记,或者说压根不用学,不用记对象有那些方法,有需要时去找就行
告诉我们,如何正确设计对象的属性和方法。
原则:对象代表什么,就得封装对应的数据,并提供数据对应的方法
2.理解封装思想的好处?
让编程变得很简单,有什么事,找对象,调方法就行。
降低我们学习成本,可以少学,少记,或者说压根不用学,不用记对象有那些方法,有需要时去找就行
包
1) 定义包: package 包名1.包名2;
2)说明:
a)必须位于程序第一行
b)包名要与文件夹一一对应
c)包名小写
3)功能: 命名机制和安全机制
命名机制:在同一个包中的类名不能相同
2)说明:
a)必须位于程序第一行
b)包名要与文件夹一一对应
c)包名小写
3)功能: 命名机制和安全机制
命名机制:在同一个包中的类名不能相同
private关键字
1.private关键字是一个权限修饰符
2.可以修饰成员(成员变量和成员方法)
3.被private修饰的成员只能在本类中才能访问
4.针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
5.提供“setXxx(参数)”方法,用于给成员变量赋值,方法用public修饰
6.提供“getXxx()”方法,用于获取成员变量的值,方法用public修饰
2.可以修饰成员(成员变量和成员方法)
3.被private修饰的成员只能在本类中才能访问
4.针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
5.提供“setXxx(参数)”方法,用于给成员变量赋值,方法用public修饰
6.提供“getXxx()”方法,用于获取成员变量的值,方法用public修饰
继承
继承中:构造方法的访问特点
·父类中的构造方法不会被子类继承。
·子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。
为什么?
子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。
子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化
怎么调用父类构造方法的?
子类构造方法的第一行语句默认都是:superO,不写也存在,且必须在第一行。
如果想调用父类有参构造,必须手动写super进行调用。
子类不能继承父类的构造方法,但是可以通过super调用
总结
子类构造方法的第一行,有一个默认的super();
默认先访问父类中无参的构造方法,再执行自己。
如果想要方法文父类有参构造,必须手动书写。
·父类中的构造方法不会被子类继承。
·子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。
为什么?
子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。
子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化
怎么调用父类构造方法的?
子类构造方法的第一行语句默认都是:superO,不写也存在,且必须在第一行。
如果想调用父类有参构造,必须手动写super进行调用。
子类不能继承父类的构造方法,但是可以通过super调用
总结
子类构造方法的第一行,有一个默认的super();
默认先访问父类中无参的构造方法,再执行自己。
如果想要方法文父类有参构造,必须手动书写。
重写
方法的重写
当交类的方法不能满足子类现在的需求时,需要进行方法重写
书写格式
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
当交类的方法不能满足子类现在的需求时,需要进行方法重写
书写格式
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
方法的重写
当父类的方法不能满足子类现在的需求时,需要进行方法重写
书写格式
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
@override重写注解
1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。
2.加上注解后如果有红色波浪线,表示语法错误。
3.建议重写方法都加@Override注解,代码安全,优雅!
当父类的方法不能满足子类现在的需求时,需要进行方法重写
书写格式
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。
@override重写注解
1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。
2.加上注解后如果有红色波浪线,表示语法错误。
3.建议重写方法都加@Override注解,代码安全,优雅!
方法重写注意事项和要求
1.重写方法的名称、形参列表必须与交类中的一致。
2.子类重写父类方法时,访问权限子类必须大于等于父类(暂时了解:空看不写<protected<public)
3.子类重写父类方法时,返回值类型子类必须小于等于父类
4.建议:重写的方法尽量和交类保持一致。
5.私有方法不能被重写。
6.子类不能重写交类的静态方法,如果重写会报错的。
1.重写方法的名称、形参列表必须与交类中的一致。
2.子类重写父类方法时,访问权限子类必须大于等于父类(暂时了解:空看不写<protected<public)
3.子类重写父类方法时,返回值类型子类必须小于等于父类
4.建议:重写的方法尽量和交类保持一致。
5.私有方法不能被重写。
6.子类不能重写交类的静态方法,如果重写会报错的。
1.继承中成员方法的访问特点:
this调用:就近原则,
super调用:直接找父类。
2.什么是方法重写?
在继承体系中,子类出现了和父类中一模一样的方法声明
我们就称子类的这个方法是重写的方法。
3.方法重写建议加上哪个注解,有什么好处?
@Override注解可以校验重写是否正确,同时可读性好。
4,重写方法有哪些基本要求?
子类重写的方法尽量跟父类中的方法保持一致。
只有虚方法表里面的方法可以被重写
5.方法重写的本质?
覆盖虚方法表中的方法
this调用:就近原则,
super调用:直接找父类。
2.什么是方法重写?
在继承体系中,子类出现了和父类中一模一样的方法声明
我们就称子类的这个方法是重写的方法。
3.方法重写建议加上哪个注解,有什么好处?
@Override注解可以校验重写是否正确,同时可读性好。
4,重写方法有哪些基本要求?
子类重写的方法尽量跟父类中的方法保持一致。
只有虚方法表里面的方法可以被重写
5.方法重写的本质?
覆盖虚方法表中的方法
多态
什么是多态?
同类型的对象,表现出的不同形态。
多态的表现形式
父类类型 对象名称=子类对象;
多态的前提
有继承关系
有父类引用指向子类对象
Fu f= new Zi ();
有方法重写
同类型的对象,表现出的不同形态。
多态的表现形式
父类类型 对象名称=子类对象;
多态的前提
有继承关系
有父类引用指向子类对象
Fu f= new Zi ();
有方法重写
创建对象(多态方式)
调用成员变量:编译看左边,运行也看左边
编译看左边:javac编译代码的时候,会看左边的交类中有没有这个变量,如果有,编译成功,如果没有编译失败。
运行也看左边:java运行代码的时候,实际获取的就是左边交类中成员变量的值
调用成员方法:编译看左边,运行看右边
编译看左边:javac编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。
理解:
Animal a = new Dog();
现在用a去调用变量和方法的呀?是的
而a是Animal类型的,所以默认都会从Anima1这个类中去找
成员变量:在子类的对象中,会把父类的成员变量也继承下的。父:name子:name
成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法进行覆盖的。
调用成员变量:编译看左边,运行也看左边
编译看左边:javac编译代码的时候,会看左边的交类中有没有这个变量,如果有,编译成功,如果没有编译失败。
运行也看左边:java运行代码的时候,实际获取的就是左边交类中成员变量的值
调用成员方法:编译看左边,运行看右边
编译看左边:javac编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。
理解:
Animal a = new Dog();
现在用a去调用变量和方法的呀?是的
而a是Animal类型的,所以默认都会从Anima1这个类中去找
成员变量:在子类的对象中,会把父类的成员变量也继承下的。父:name子:name
成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法进行覆盖的。
抽象
抽象类的作用:当创建子类对象时,给属性进行赋值的。
抽象类不能实例化
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
可以有抽象方法
抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
可以有抽象方法
抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类
抽象的关键字:abstract
对象数组
一.什么是对象数组
1.顾名思义就是当数组元素是类对象时,这样的数组称之为对象数组,在这种情况下,数组的每一个元素都是一个对象的引用。
2.对象数组,就是指包含了一组相关的对象。
1.顾名思义就是当数组元素是类对象时,这样的数组称之为对象数组,在这种情况下,数组的每一个元素都是一个对象的引用。
2.对象数组,就是指包含了一组相关的对象。
二.对象数组的作用
1.数组就是一个容器,当创建了多个相同的类对象时,并且需要将这些类对象储存时,这个时候对象数组的作用就体现出来了。
2.通俗的说就是用来存多个对象的数组,将对象看成一个个数组元素
1.数组就是一个容器,当创建了多个相同的类对象时,并且需要将这些类对象储存时,这个时候对象数组的作用就体现出来了。
2.通俗的说就是用来存多个对象的数组,将对象看成一个个数组元素
三.对象数组的语法定义
一、先定义,再开辟数组空间
类名称 对象数组名[] = null;
对象数组名 = new 类名称[长度];
二、定义并开辟数组空间
类名称 对象数组名[] = new 类名称[长度];
一、先定义,再开辟数组空间
类名称 对象数组名[] = null;
对象数组名 = new 类名称[长度];
二、定义并开辟数组空间
类名称 对象数组名[] = new 类名称[长度];
异常
* 异常解决方式2:try方式
* 1.try块:监控可能发生异常的代码
* 2. catch块:捕获及处理异常
*1.如果发生异常,try块中,当前代码之后的代码不会被执行
*系统生成一个异常对象,赋值并给catch块中声明的异常类型
* 1.try块:监控可能发生异常的代码
* 2. catch块:捕获及处理异常
*1.如果发生异常,try块中,当前代码之后的代码不会被执行
*系统生成一个异常对象,赋值并给catch块中声明的异常类型
* 多重catch
* 1.catch声明异常类型捕获他本类或子类异常
* 2.多重catch中父类不能位于子类上方
* 1.catch声明异常类型捕获他本类或子类异常
* 2.多重catch中父类不能位于子类上方
* throwable是所有异常的基础类
*throwable有两个子类:error,exception
*error:jdk错误,程序无法处理的
* Exception:异常基类
* Exception异常分类:运行时异常(Runtime Exception子类);可以处理
* 也可以不处理和非运行时异常
* throw:抛出异常
* throws:声明异常
*throwable有两个子类:error,exception
*error:jdk错误,程序无法处理的
* Exception:异常基类
* Exception异常分类:运行时异常(Runtime Exception子类);可以处理
* 也可以不处理和非运行时异常
* throw:抛出异常
* throws:声明异常
* 自定义异常
*1.自定义异常的方法:继承Exception 或他的子类
*2.应用于:没有违反java语法规则但违反业务规则
*找不到合适的返回值通知调用者
*1.自定义异常的方法:继承Exception 或他的子类
*2.应用于:没有违反java语法规则但违反业务规则
*找不到合适的返回值通知调用者
RuntimeException类(非检查型异常)
由编译错误导致的异常属于RuntimeException异常。常常包括以下问题:
错误的强制类型转换
数组的越界访问
指针指向空指针,访问空指针
常见的RuntimeException异常 RuntimeException异常的全部类
ArithmeticException数字计算的异常。例如除数为0会抛出此异常
NullPointerException空指针异常
ArrayOutOfBoundsException数组越界产生的异常
ClassNotFoundException找不到类文件的异常
ClassCastException类文件强制转化的异常
由编译错误导致的异常属于RuntimeException异常。常常包括以下问题:
错误的强制类型转换
数组的越界访问
指针指向空指针,访问空指针
常见的RuntimeException异常 RuntimeException异常的全部类
ArithmeticException数字计算的异常。例如除数为0会抛出此异常
NullPointerException空指针异常
ArrayOutOfBoundsException数组越界产生的异常
ClassNotFoundException找不到类文件的异常
ClassCastException类文件强制转化的异常
0 条评论
下一页