二维数组:
数据类型[ ] [ ] 数组名 = new 数据类型[m][n] ;
m:代表当前二维数组中有多少个一维数组
n:代表每一个一维数组中的长度
定义的方式还有以下两种情况:
数据类型[ ] 数组名[ ] = new 数据类型[m][n];
数据类型 数组名[ ][ ] = new 数据类型[m][n];
例如定义的具体类型:
int x;
int x,y ;
int[ ] x ;
int [ ] x,y[ ];
二维数组定义的第二种格式:
数据类型[ ][ ] 数组名 = new 数据类型[m][ ];
只给定有m个一维数组,每一个一维数组长度动态给定。
二维数组的格式3
静态初始化
数据类型[ ][ ] 数组名称 = {{元素1,元素2,元素3},{....}};
给定一个二维数组,静态初始化,遍历其中每个元素
for(int x = 0 ; x < arr.length ; x ++) {
for(int y = 0 ; y < arr[x].length ; y++) {
System.out.print(arr[x][y]+" ");
}
}
关于代码块的概述:
用{ }括起来的代码,统称为代码块;
根据其位置以及声明不同,分为以下分为以下:
局部代码块:在main()里面,给变量限定它的生命周期
构造代码块:在一个类中的成员位置中,用{}括起来,
作用:可以将多个构造方法中的相同的代码放到构造代码块中,对对象进行初始化.在每次执行构造方法之前,先执行构造代码块。
静态代码块:在一个类的成员位置,也是用{}包起来,但是他被static修饰。
作用:一般情况它的作用是给类进行初始化。
这里有一个面试题:
构造代码块,构造方法,静态代码的优先级?
静态代码块>构造代码块>构造方法
静态代码:只能执行一次。
构造代码块在每次执行构造方法之前都会被执行。
方法重写:
由于子类继承父类的时候,提供一模一样的方法声明,所以会将父类该方法覆盖掉(重写,复写)
有时候(具体的需求),不需要子类重写父类的功能,针对这种情况,Java提供了一个关键字:final最终的,终态的意思
final不仅可以修饰基本数据类型,还可以修饰引用类型
如果final修饰的是一个基本数据类型: 基本数据类型的值不能再改变了,
如果final修饰的是一个引用类型数据: 引用类型的地址值不能再改变了,但是堆内存中的成员变量的值可以改变。
final的初始化时机:
1)被final只能被赋值一次(final int a = 10 )
final int a ;
在使用之前进行初始化,赋值(在构造方法之前赋值) (非静态的...)