010.day08
day08笔记
目录
一、二维数组
一维数组中的元素为一维数组,需要借助双重for循环结构进行遍历
1. 声明方式
// 数据(引用)类型[][] 变量名称
int[][] a;
int a[][];
2. 初始化方式
- 动态初始化:必须为一维数组指定长度,第二维(内部数组元素)可以在使用时再进行初始化,长度不需要完全相等
// 等长情况
int[][] a = new int[3][3];
// 不等长情况
int[][] a = new int[3][];
// 上述写法不会造成空间浪费,在使用前必须进行初始化
a[0] = new int[1];
a[1] = new int[2];
a[2] = new int[3];
- 静态初始化:需要使用嵌套的大括号形式进行赋值,会根据元素个数自动计算长度
int[][] a = new int[][] {{1,2,3},{6,2,8},{4,5}};
二、foreach
类似于迭代器的方式实现,其中的元素为引用的传递
- 主要用于集合的遍历
- 尽量避免修改(删除/新增)集合元素
- 可以嵌套使用
- 对于临时变量的操作不会作用在集合本身
- foreach中获取到的元素为一个传递后的对象,不会对原始元素产生影响
三、继承
将某些类中的共同属性抽取出来,作为基类(父类),然后继承这个类,子类可以直接使用父类中的属性及方法(protected声明)
1. 关键字:extends
2. 父类的实例化
当成一个普通的类,只能调用自身的属性和方法
Person person = new Person;
3. 子类的实例化
可以调用父类中提供的属性或方法,也可以调用自身的属性和方法,在内存中会开辟一整块空间(含父类和子类),在实例化子类对象时,也会执行父类的构造方法
// Teacher类和Student类继承Person
Teacher teacher = new Teacher();
Student student = new Student();
- 子类对象实例化时会调用父类的构造方法
- 子类的引用可以直接赋值(传递)给父类引用
4.父类引用指向子类对象
使用父类的对象进行声明,指向子类的实例,在编写代码时,遵从父类的定义约束,执行方法时以实例为准,如果存在同名的方法,执行子类中的方法
Person person = new Teacher();
5. 子父类间的类型转换
只需要看等号左边占用的内存是否小于等号右边占用的内存
6.传参灵活
// Teacher类继承Person类
Teacher teacher = (Teacher)person;
// 当person向下转型为Teacher之后,如果要用person中私有的属性不能直接·,但是可以通过getxxx方法获得
System.out.println(teacher.getName());
四、异常分类
1. 编译时异常
编译时能够校验的异常,通常只能根据类型和定义(等号左侧的声明)进行校验
short a = 5;
short b = a + 5;//此时认为等号右侧为int类型,无法隐式转换为short类型
short b = (short)(a + 5);// 需要强制转换为short类型,可以消除编译时异常,如果出现异常,则出现在运行期
2. 运行时异常
程序运行时出现的异常,通常为严重错误,如空指针,越界,类型转换异常
Father father = new Father();
Child child = new Child();
child = (Child)father;// 使用强制转换可以消除编译时异常,但在运行时仍然会抛出异常,一个子类的引用无法指向一个父类的实例
五丶instanceof
我们可以通过instanceof关键字来判断某个对象是否属于某种数据类型。如学生的对象属于学生类,学生的对象也属于人类。
使用格式:
boolean b = 对象 instanceof 数据类型;
Person p1 = new Student(); // 前提条件,学生类已经继承了人类
Person p2 = new Student();
boolean flag = p1 instanceof Student; //flag结果为true
boolean flag2 = p2 instanceof Teacher; //flag结果为false
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步