代码块
局部代码块(局部执行,例如局部变量)、构造代码块、静态代码块、同步代码块
(1)局部代码块
以”{}”划定的代码区域,此时只需要关注作用域的不同即可
方法和类都是以代码块的方式划定边界的
(2)构造代码块
构造代码块,提取构造方法中的共性,每次创建对象都会执行,并且在构造方法执行之前执行。
举例:
package shipin;
public class ShiuPin_12_09 {
public static void main(String[] args) {
student src = new student();
student src1 = new student("陈瑶",18);
}
}
//构造代码块,提取构造方法中的共性,
//每次创建对象都会执行,并且在构造方法执行之前执行
class student{
String name;
int set;
{
System.out.println("我勒个去!");
}
//无参构造,无参传入
public student() {
System.out.println("刘亦菲");
}
//有参构造,有参传入
public student(String name,int set) {
System.out.println(name+set);
this.name = name;
this.set = set;
}
}
(3)静态代码块
静态随着类的加载而加载,和对象没有关系,所以不管new多少个对象,都会只执行一次而已,加载类是需要做的初始化,比如驱动
举例:
package shipin;
public class ShiuPin_12_09 {
public static void main(String[] args) {
student src = new student();
student src1 = new student("陈瑶",18);
}
}
class student{
String name;
int set;
static{
System.out.println("我只会执行一次!");
}
{
System.out.println("我勒个去!");
}
//无参构造,无参传入
public student() {
System.out.println("刘亦菲");
}
//有参构造,有参传入
public student(String name,int set) {
System.out.println(name+set);
this.name = name;
this.set = set;
}
}
执行顺序的问题:
前提是已经创建好对象,实例代码与执行循序如下:
- Coder静态代码块执行 — Coder构造代码块执行 — Coder无参空构造执行
- BlockTest静态代码块执行 — BlockTest的主函数执行了 — Coder静态代码块执行 — Coder构造代码块执行 — Coder无参空构造执行
- Coder构造代码块执行 — Coder无参空构造执行
package com.itheima_04;
public class BlockTest {
static {
System.out.println("BlockTest静态代码块执行");
}
{
System.out.println("BlockTest构造代码块执行");
}
public BlockTest(){
System.out.println("BlockTest无参构造执行了");
}
public static void main(String[] args) {
System.out.println("BlockTest的主函数执行了");
Coder c = new Coder();
Coder c2 = new Coder();
}
}
class Coder {
static {
System.out.println("Coder静态代码块执行");
}
{
System.out.println("Coder构造代码块执行");
}
public Coder() {
System.out.println("Coder无参空构造执行");
}
}