代码块这部分的只是有一些超前的地方,没有其他语言基础的同学可能是无法理解。
看不懂的话,就跳过吧,学习了后边的知识之后,再回来看这部分,也许能更好的理解她。
什么是代码块?
由一对花括号括起来的,就称为代码块
{
代码
}
Java代码块主要有以下几个类型:
一:静态代码块
使用static关键字定义的构造代码块。
在项目启动就需要运行的代码,可以放在静态代码块中。
静态代码块只会在当.c1ass文件从本地磁盘加载到方法区中形成字节码文件对象的时候,静态代码块会随之执行
静态代码块的作用是给数据进行初始化,当数据只需要被初始化一次的时候,之后可以重复使用的时候,就可以使用静态代码块
/** * 静态代码块 */ static{ System.out.println("进入了静态代码块~"); }
二:构造代码块
在类中方法外定义的代码块。
构造代码块的作用是什么?
构造代码块是在创建对象的时候执行,并且是优先于构造方法先执行
可以将构造方法中的共性内容进行抽取,放入到构造代码块中,节省代码的编写
每创建一次对象,都会被调用一次。
/** * 构造代码块 */ { System.out.println("进入了构造代码块~"); }
三:构造函数
命名和类名完全一致
没有返回值,不需要用void关键字来修饰
不能被直接调用,必须通过new关键词创建对象的时候才能调用
定义一个类的时候,构造函数不是必须的
/** * 构造函数代码块 */ public one() { System.out.println("进入了构造函数~"); }
四:普通代码块(局部代码块)
在方法内定义的代码块
没调用一次方法,就会调用一次代码块
能够让变量更早的在内存中消失,节省内存空间
For循环其实就是一个局部代码块,在循环中定义的变量key就是只在这个代码块中生效。循环结束之后,变量key在内存中也随之消失。
使用循环来做代码块节省内存的例子有点超纲,但这个应该是最好理解的。
/** * 构造函数 * @param args */ public static void main(String[] args) { for(int x = 1; x < 3; x = x+1) // 下边的一对大括号中间,其实就是一个代码块 { // 输出key值 System.out.print("key值 : " + x ); // 换行 System.out.print("\n"); } // 在循环外输出x变量是报错的。 // System.out.println(x); }
最后,我们通过一个实例,来测试一下,各个代码块在程序执行的过程中执行的先后顺序:
public class one { /** * 静态代码块 */ static{ System.out.println("进入了静态代码块~"); } /** * 构造代码块 */ { System.out.println("进入了构造代码块~"); } /** * 构造函数 * @param args */ public static void main(String[] args) { System.out.println("进入了构造函数~"); // 第一次调用普通代码块 (new one()).sayHello(); System.out.println("---------------"); // 第二次调用普通代码块 (new one()).sayHello(); } /** * 普证代码块 */ public void sayHello() { { System.out.println("进入了普证代码块"); } } }
输出:
进入了静态代码块~
进入了main函数~
进入了构造代码块~
进入了构造函数~
进入了普通代码块
进入了构造代码块~
进入了构造函数~
进入了普通代码块
通过上方代码执行的输出结果,我们可以发现:
首先进入静态代码块
再进入了main函数
再进入了构造代码块
再进入了构造函数
再进入了普通代码块
这里需要注意,静态代码块,main函数只在项目启动时执行一次。
构造代码块、构造函数、普通代码块 是实例化几个对象就调用几次。
以上大概就是代码块部分基本的理解,有好的建议,请在下方输入你的评论。