代码块:用大括号包括起来的一段代码。代码块内部的局部变量的最大作用域就是这个大括号,一旦执行出了大括号,局部变量就会JVM销毁释放。
1.局部代码块:
代码块写在方法内部,它在代码的执行顺序上就是顺序。
作用:限制局部变量的生命周期。
public class CodeBlock {
public static void main(String[] args) {
System.out.println("我是普通的打印----");
{
int a = 10;
System.out.println("----" + a);
}
System.out.println("我是普通的打印----");
}
}
打印结果:
我是普通的打印----
----10
我是普通的打印
2.构造代码块:
名如其实,构造代码块写在类中方法外,在构造方法调用的时候被调用,并且优先于构造方法调用前执行。
构造代码块的作用:可以把构造方法里存放共同的代码。
public class CodeBlock {
public static void main(String[] args) {
{
int a = 10;
System.out.println(a);
}
//
new Student();
new Student("张三", 23);
}
}
class Student {
String name;
int age;
public Student() {
System.out.println("空参构造方法");
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
System.out.println("有参构造方法");
}
{
System.out.println("我是构造代码块");
}
}
打印结果:
10
我是构造代码块
空参构造方法
我是构造代码块
有参构造方法
3.静态代码块:
和构造代码块的位置一样,不过是加了一个静态修饰词:static。
静态代码块随着类的加载而加载,并且只初始化一次。
作用:初始化类。
public class CodeBlock {
public static void main(String[] args) {
{
int a = 10;
System.out.println(a);
}
//
new Student();
new Student("张三", 23);
System.out.println("---------");
new Student();
new Student("李四", 20);
}
}
class Student {
String name;
int age;
public Student() {
System.out.println("空参构造方法");
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
System.out.println("有参构造方法");
}
{
System.out.println("我是构造代码块");
}
static {
System.out.println("我是静态代码块");
}
}
打印结果:
10
我是静态代码块
我是构造代码块
空参构造方法
我是构造代码块
有参构造方法
---------
我是构造代码块
空参构造方法
我是构造代码块
有参构造方法
ps:静态代码块优先于主函数执行!
public class CodeBlock {
public static void main(String[] args) {
{
int a = 10;
System.out.println(a);
}
//
new Student();
}
static {
System.out.println("我是主方法外的静态代码块");
}
}
class Student {
String name;
int age;
public Student() {
System.out.println("空参构造方法");
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
System.out.println("有参构造方法");
}
{
System.out.println("我是构造代码块");
}
static {
System.out.println("我是静态代码块");
}
}
打印结果:
我是主方法外的静态代码块
10
我是静态代码块
我是构造代码块
空参构造方法