20180318 java java面向对象-代码块语句
什么是代码块:
在类或方法中,直接使用花括号{}括起来的一块代码区域。
代码块里的变量属于局部变量,只在自己所在区域区域( 前后花括号{} )内有效。
根据代码块定义的位置不同,我们又分为三种形式:
1、局部代码块:直接定义在方法内部的代码块;
eg:
//代码块
class CodeBlockDemo
{
public static void main(String[] args)
{
//局部代码块
int age = 17;
System.out.println(age);//可以访问,输出17
}
System.out.println(age);//不可以访问,报错
}
2、初始化代码块(又叫 构造代码块):直接定义在类中。
eg:
//代码块
class CodeBlockDemo
{
{
System.out.println("这是一个初始化代码块");
}
public static void main(String[] args)
{
System.out.println("进入main函数");//
//创建三个CodeBlockDemo对象
new CodeBlockDemo();//匿名对象
new CodeBlockDemo();
new CodeBlockDemo();
}
}
上述代码执行结果为:
进入main函数
这是一个初始化代码块
这是一个初始化代码块
这是一个初始化代码块
//代码块
class CodeBlockDemo
{
{
System.out.println("这是一个初始化代码块");
}
CodeBlockDemo()
{
System.out.println("构造器...");
}
public static void main(String[] args)
{
System.out.println("进入main函数");//
//创建三个CodeBlockDemo对象
new CodeBlockDemo();
new CodeBlockDemo();
new CodeBlockDemo();
}
}
上述代码执行结果为:
进入main函数
这是一个初始化代码块
构造器...
这是一个初始化代码块
构造器...
这是一个初始化代码块
构造器...
结论:每次创建对象都会调用构造器,在调用构造器之前,,会先执行本类中的初始化代码块。
通过反编译软件查看class文件可知,初始化代码也作为构造器的最初的语句。
我们一般不使用初始化代码块,原因:1 难看;2 即使要做初始化操作,我们一般在构造器中进行。
若做初始化操作的代码比较多,此时构造器的结构比较混乱,此时专门定义一个方法做初始化操作,,再在构造器中调用即可。
3、静态代码块:使用static修饰的初始化代码块。
eg:
//代码块
class CodeBlockDemo
{
{
System.out.println("这是一个初始化代码块");
}
CodeBlockDemo()
{
System.out.println("构造器...");
}
{
System.out.println("这是一个静态初始化代码块");
}
public static void main(String[] args)
{
System.out.println("进入main函数");//
//创建三个CodeBlockDemo对象
new CodeBlockDemo();
new CodeBlockDemo();
new CodeBlockDemo();
}
}
执行结果:
这是一个静态初始化代码块
进入main函数
这是一个初始化代码块
构造器...
这是一个初始化代码块
构造器...
这是一个初始化代码块
构造器...
结论:在主方法执行之前执行静态代码块,而且只执行一次。main方法是程序的入口,为什么静态代码块优先于main方法执行呢? 原因是静态成员随着字节码的加载而加载(进JVM),此时main方法还没执行,因为方法需要JVM(java虚拟机)调用。
静态代码块一般我们用来做初始化操作,加载资源,如加载配置文件等。