Java中的代码块就是 被{}包含的代码。从类的加载和对象的创建方面考虑,可以有如下分类:
1 、静态代码块
静态代码块:随着类的加载而加载的代码块
静态代码块的格式:
static
//代码
}
静态代码块的作用:
在开发中,有一些代码需要在创建对象之前,就已经执行完了,这样的代码就可以书写在静态代码块中
例:在JDBC技术(使用java程序连接数据库)
静态代码块的特点:
1、 静态代码块是随着类的加载而执行
2、 类只会被加载一次,所以静态代码块也只会执行一次
案例:静态代码块的应用
package com.hmtest.demo;
class Demo{
String name;
static String password;
//构造函数
Demo(String name,String pwd){
this. name= name;
this.password = pwd;
}
//静态代码块
static{
System.out.println("执行静态代码块1"+password);
password = "666666";
}
static{
System.out.println("执行静态代码块2"+password);
}
static{
System.out.println("执行静态代码块3"+password);
}
}
public class StaticDemo {
public static void main(String[] args) {
//创建匿名对象
new Demo("user","admin");
}
}<span style="color:#ff0000;">
</span>
从上面运行结果可以看出:
注意:在一个类中如果存在多个静态代码块时,静态代码块的执行顺序是按照静态代码块在类中的书写先后顺序执行的
2 、构造代码块
构造代码块:随着对象的创建而执行的代码块
注意:构造代码块必须是书写在类中的成员位置
{
//代码块
}
构造代码块的作用:
当一个类中的多个构造方法中存在相同的代码要执行时,可以把这些相同的代码放到构造代码块中执行
构造代码块的特点:
1、 随着对象的创建而执行的代码
2、 只要创建对象,就会执行一次构造代码块
package com.hmtest.demo;
class Demo1{
String name;
String password;
Demo1(String name,String pwd){
this(pwd);
System.out.println("执行构造函数1");
this.name = name;
password = "888888";
}
Demo1(String pwd) {
System.out.println("执行构造函数2");
password = "888888";
}
Demo1(){
password = "888888";
}
//构造代码块
{
System.out.println("执行构造代码块1.......");
password = "888888";
}
//构造代码块
{
System.out.println("执行构造代码块2........");
password = "888888";
}
}
public class ConstructorDemo {
public static void main(String[] args) {
new Demo1("user",null);
new Demo1("user");
new Demo1();
}
}
运行结果:
根据结果我们可以得出以下结论:
注意:
1、 在构造方法中使用this()语句调用其它构造函数,不会再重新执行构造代码块
2、 构造代码块的执行是在构造函数之前执行
3、 当一个类中有多个构造代码块时,是按照构造代码块在类中书写的顺序执行的
3 、局部代码块
局部代码块:定义在函数中的代码块,随着函数的入栈执行而执行
注意:是书写在函数中的
{
//代码
}
局部代码块的作用:就是为了控制变量的使用范围(变量的作用域)
案例:局部代码块的使用