专栏首页技术小屋-未分类Java——代码块(普通块、构造块、静态块)

Java——代码块(普通块、构造块、静态块)

代码块在实际开发中很少见,只需要了解即可,实际开发中也不需要使用它。

代码编写中,使用{}声明的程序块就属于代码块,而根据其出现的位置,及声明关键字的不同,分为四种:普通代码块、构造块、静态块、同步代码块(多线程中涉及)

1、普通代码块

在方法中使用{}定义起来的一段代码,利用普通代码块可以实现局部代码的拆分(实际基本用不上)。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        {
            int x =10; //局部
            System.out.println("x="+x); //输出10
        }
        int x =100; //全局
        System.out.println("x="+x); //输出100
    }
}

2、构造代码块

将普通代码块中提取到类中使用,就形成了构造代码块。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Person per1 = new Person();
        Person per2 = new Person();
    }
}

class Person{
    { //构造块
        System.out.println("构造块");
    }
    public Person() {
        System.out.println("构造方法");
    }
}

由以上程序运行可知,构造块优先于构造方法执行,每次实例化对象时构造快都会被重复调用(实际基本用不上)。

3、静态代码块

如果代码块中使用了static关键字定义,则该代码块为静态代码块:

  • 在非主类中定义的;
  • 在主类中定义的;

【举例】:非主类中定义的静态块

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Person per1 = new Person();
        Person per2 = new Person();

    }
}

class Person{

    public Person() {
        System.out.println("构造方法");
    }

    { //构造块
        System.out.println("构造块");
    }

    static { //静态块
        System.out.println("静态块");
    }
}

由以上运行可知,静态块最先执行,并且只执行一次。在非主类中定义 的静态块,可以用其为static属性初始化,如下:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Person per1 = new Person();
        Person per2 = new Person();

    }
}

class Person{
    private static String msg = "hello";
    private static String info =null;
    public Person() {
        System.out.println("构造方法");
    }

    { //构造块
        System.out.println("构造块");
    }

    static { //静态块
        System.out.println("静态块");
        info = msg+"张三";
        info = info +10;
        System.out.println(info);
    }
}

【举例】:主类中定义的静态块

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("hello");
    }

    static {
        System.out.println("竟然是我先执行??");
    }
}

以上可以发现,静态块优于主方法先执行。

4、总结

代码块对于现阶段开发意义不大,了解即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java——static关键字总结(含义、定义属性或方法、使用时机)

    static关键字,主要描述全局的概念,利用该属性可以定义属性和方法,但是90%情况下很少直接编写static。

    Winter_world
  • Java——集合工具类(Collections工具类、Stack子类)

    Collections是专为集合服务的工具类,可以进行List、Set、Map等集合的操作,比较有用 的方法如下:

    Winter_world
  • Java——Object类(基本概念、toString()方法、equals()方法、可以接收所有引用类型)

    虽然有对象的向上转型可以解决参数的统一问题,但是Java开发中有如此众多的开发类,所以面临这一的问题:参数类型怎么选择才能保存所有的类对象?为此Java为解决此...

    Winter_world
  • Java8---Stream的基本用法(2)

    下面列举了一些,Stream的一些基本的使用方法,比如去重,遍历,筛选,获取指定元素的等。

    IT云清
  • 强大的 Stream API(三)

    终端操作会从流的流水线生成结果。其结果可以是任何不是流的 值,例如:List、Integer,甚至是 void 。

    IT小马哥
  • Java日期格式化

    爱撒谎的男孩
  • 2018-10-03 ZonedDateTime转换时间

    https://www.mkyong.com/java/java-convert-date-and-time-between-timezone/

    Albert陈凯
  • 20个高级Java面试题汇总

    这是一个高级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。

    Java团长
  • java学习:日期的运算

    java.util.Date下的很多(构造)方法,已经被标识为"过时"方法,官方推荐使用Calendar类来处理日期的运算,下面是示例: import java...

    菩提树下的杨过
  • 20个高级Java面试题汇总

    这是一个高级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。

    Java后端工程师

扫码关注云+社区

领取腾讯云代金券