java中代码块有:局部代码块,构造代码块(初始化块),静态代码块
局部代码块存在于类中方法中比如
class test{
public static void main(String[] args){
{ //大括号包裹的局部代码块
int a = 10;
}
System.out.println(a); //运行报错,访问不到a=10
}
}
有上面可以看出来局部代码块限定了变量的生命周期,及早在内存中释放,提高了内存利用率(开发用不到,没啥意义。。。)
构造代码块存在于类中方法外比如
class Student{
private int age;
private String name;
public Student() {
System.out.println("无参构造");
} //无参构造
public Student(int age,String name) {
this.name = name;
this.age = age;
System.out.println("有参构造");
} //有参构造
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return name;
}
public void setName(int name ){
this.name=name;
//下面是构造代码块
{
System.out.println("我是构造代码块");
}
}
在创建学生对象的时候会先执行构造代码块
class Test {
Student s1 = new Student();
System.out.println("-----------------");
Student s2 = new Student(18,"小明");
}
输出结果:
我是构造代码块
无参构造
-----------
我是构造代码块
有参构造
由此可见,每创建一次对象就会执行一次构造代码块,优先于构造函数执行
静态代码块 也是在类中方法外,但是多了个static修饰
class Student{
private int age;
private String name;
public Student() {
System.out.println("无参构造");
} //无参构造
public Student(int age,String name) {
this.name = name;
this.age = age;
System.out.println("有参构造");
} //有参构造
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return name;
}
public void setName(int name ){
this.name=name;
//下面是构造代码块
{
System.out.println("我是构造代码块");
}
//下面是静态代码块
static{
System.out.println("我是静态代码块");
}
}
class Test {
Student s1 = new Student();
System.out.println("-----------------");
Student s2 = new Student(18,"小明");
}
输出结果:
我是静态代码块
我是构造代码块
无参构造
-----------
我是构造代码块
有参构造
静态代码块随着类的加载而加载,且只执行一次,用于给类进行初始化,一般用来加载驱动
再看
class Test {
public static void main(String []args){
System.out.println("我是主方法");
}
Student s1 = new Student();
System.out.println("-----------------");
Student s2 = new Student(18,"小明");
static{
System.out.println("我是主方法静态代码块");
}
}
输出结果:
我是主方法静态代码块
我是主方法
我是静态代码块
我是构造代码块
无参构造
-----------
我是构造代码块
有参构造
静态代码块还优先于main方法执行哦~
开发中好像很少遇到用这个知识的 ,小白第一次写博客,很多不会,望见谅。