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

posted @ 2018-07-24 10:24  Yokiia  阅读(134)  评论(0编辑  收藏  举报