Java中的类和对象之代码块
系列文章目录
Java中的类和对象系列
一、代码块的概念及分类
使用{}定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种
-
普通代码块 构造块 静态块 同步代码块(后面讲多线程再谈)
今天我们主要讲构造块和静态块。
1.普通代码块
这里,我们还是先提一嘴普通代码块:
public Class Main{ public static void main(String[] args) { { int x = 10; System.out.println(“这是一个普通代码块”); } System.out.println(x);//报错 } }
普通代码块仅仅起到一个限制变量作用域的问题。
2.构造代码块
也叫实例代码块,定义在类中,不加修饰符,一般用于初始化实例成员变量。
public class Student { private String name; private int num; private String sex; private static int Class = 1; public Student() { System.out.println("这是构造方法的第一句!"); this.num = 21; } public Student(int num) { System.out.println("这是构造方法的第一句!"); this.num = num; } { this.name = "Janssen"; //this.num = 21; this.sex = "man"; System.out.println("这是一个构造块!"); } public String toString(){ return "name:"+this.name+" num:"+this.num+" sex:"+this.sex+" class:"+ Class; } public static void main(String[] args) { Student a = new Student(); Student b = new Student(); System.out.println(a); System.out.println(b); } }
如下是输出结果: 这是一个构造块! 这是构造方法的第一句! 这是一个构造块! 这是构造方法的第一句! name:Janssen num:21 sex:man class:1 name:Janssen num:22 sex:man class:1
由输出结果我们不难看出,构造块优先于构造方法先执行,因为在编译完成后,编译器会将构造块中的代码拷贝到每一个构造方法的第一条语句前!
因此,构造块的意义在于简化多个构造方法的冗余量,简化重复代码量。构造代码块只有在创建对象时才会执行。
3.静态代码块
如果说构造块是用来初始化实例成员变量的,那么静态代码块就是用来初始化静态成员变量的。
代码块我们也用static来修饰:
public class Student { private String name; private int num; private String sex; private static int Class = 1; public Student() { System.out.println("这是构造方法的第一句!"); } { this.name = "Janssen"; this.num = 21; this.sex = "man"; System.out.println("这是一个构造块!"); } static{ Class = 2; System.out.println("这是一个静态代码块!"); } public static int getclass(){ return Class; } public String toString(){ return "name:"+this.name+" num:"+this.num+" sex:"+this.sex+" class:"+ Class; } public static void main(String[] args) { Student a = new Student(); System.out.println(a); } }
这是一个静态代码块! 这是一个构造块! 这是构造方法的第一句! name:Janssen num:21 sex:man class:2
由输出结果我们可以看出:
-
静态代码块在虚拟机加载类的时候就会加载执行,它优先于构造块 而且不管生成多少个对象,静态代码块都只执行一次! 如果静态变量已经初始化,静态代码块可以对其重新赋值(除非final定义)
下一篇:
Java程序员转行都可以做什么呢?