所谓的java代码块是表示"普通的代码块","构造代码块",和“静态的代码块”
普通代码块:是指在类的方法里写的代码块,我们来看这个例子:
public class CodeBlock1 {
public static void main(String []args){
{
String normal_code="这个是一个普通的代码块1";
System.out.println(normal_code);
}
String string="我在普通代码块的外面";
System.out.println(string);
{
System.out.println("我是普通代码块3");
}
new CodeBlock1().functionTest();
}
public void functionTest()
{
{
System.out.println("我在函数functionTest中,我是普通的代码块1");
}
System.out.println("我是函数functionTest中的语句");
{
System.out.println("我是函数functionTest中,我是普通代码块2");
}
}
}
我们在主函数中和普通函数中都是可以自定义代码块的,普通的代码块有一个特点是按照定义的顺序来执行。
所以上面的执行结果是:
这个是一个普通的代码块1
我在普通代码块的外面
我是普通代码块3
我在函数functionTest中,我是普通的代码块1
我是函数functionTest中的语句
我是函数functionTest中,我是普通代码块2
上面是介绍的普通的代码块,下面我们来看看静态的代码块
静态的代码块是我们在在类中创建的代码块,
static{
。。。。
}
这样的形式来创建的代码块,静态的代码块和静态的方法有一点相似之处是,在创建的时候jvm会为它分配内存空间,所以在程序中当我们调用类的时候就可以执行,他的功能是用来初始化类的,因此不用创建对象就可以执行
我们看下面这个例子:
package code;
public class CodeBlock1 {
public static String static_init;
public String normal_string;
public static void main(String []args){
System.out.println("我是变量static_init="+static_init);
{
String normal_code="这个是一个普通的代码块1";
System.out.println(normal_code);
}
String string="我在普通代码块的外面";
System.out.println(string);
{
System.out.println("我是普通代码块3");
}
new CodeBlock1().functionTest();
}
public void functionTest()
{
System.out.println(normal_string);
{
System.out.println("我在函数functionTest中,我是普通的代码块1");
}
System.out.println("我是函数functionTest中的语句");
{
System.out.println("我是函数functionTest中,我是普通代码块2");
}
}
static{
System.out.println("这是一段静态的代码块,我执行的速度是非常的块的,在主函数之前我就"
+ "执行了");
static_init="在静态代码块中进行了初始化";
new CodeBlock1().normal_string="你好啊,我是normalString";
}
}
我们在这个类的最后创建了一个静态的代码块,我们来开一下运行的结果:
这是一段静态的代码块,我执行的速度是非常的块的,在主函数之前我就执行了
我是变量static_init=在静态代码块中进行了初始化
这个是一个普通的代码块1
我在普通代码块的外面
我是普通代码块3
null
我在函数functionTest中,我是普通的代码块1
我是函数functionTest中的语句
我是函数functionTest中,我是普通代码块2
我们可以看到的是在输出结果中静态代码块中代码是最先执行的,但是也就仅仅执行了一次,并且我们在静态代码中给静态变量赋值了,static_init得到了这个值,但是非静态的成员变量normal_string我们也试图在静态代码执行的时候进行赋值,但是最后还是输出了null可见是没有赋值成功的,这个是为什么,这个是因为我们在执行静态代码的的时候还没有实例化任何的对象,我们知道静态的成员变量和方法是属于类的,但是非静态的成员变量和方法却是属于对象的,既然在静态代码执行的时候还不存在对象,那么何来的对象的成员变量,也就是没有鸡,蛋从何来的到道理,不也不算是这个道理,因为我们也不知道蛋和鸡谁先来的,,
对还有构造代码块:我们来看下面的例子:
package code;
public class CodeBlock1 {
public static String static_init;
public String normal_string;
public static void main(String []args){
System.out.println("我是变量static_init="+static_init);
{
String normal_code="这个是一个普通的代码块1";
System.out.println(normal_code);
}
String string="我在普通代码块的外面";
System.out.println(string);
{
System.out.println("我是普通代码块3");
}
new CodeBlock1().functionTest();
}
public void functionTest()
{
System.out.println(normal_string);
{
System.out.println("我在函数functionTest中,我是普通的代码块1");
}
System.out.println("我是函数functionTest中的语句");
{
System.out.println("我是函数functionTest中,我是普通代码块2");
}
}
static{
System.out.println("这是一段静态的代码块,我执行的速度是非常的块的,在主函数之前我就"
+ "执行了");
static_init="在静态代码块中进行了初始化";
new CodeBlock1().normal_string="你好啊,我是normalString";
}
{
System.out.println("我是构造代码块");
}
}
我在这个class的最后创建的一个构造代码块,构造代码块是在初始化对象的执行,我们来看一下给程序的执行的结果
这是一段静态的代码块,我执行的速度是非常的块的,在主函数之前我就执行了
我是变量static_init=在静态代码块中进行了初始化
这个是一个普通的代码块1
我在普通代码块的外面
我是普通代码块3
我是构造代码块
null
我在函数functionTest中,我是普通的代码块1
我是函数functionTest中的语句
我是函数functionTest中,我是普通代码块2
构造代码块是我们在类中定义的,我们当我们实例化对象的时候会被自动的调用,但是因为我们有构造函数所以说构造代码的作用不是太大。。。