Java淺析代碼塊與構造塊及靜態(tài)塊三者之間的關系
更新時間:2022年07月25日 09:15:28 作者:陳亦康
所謂代碼塊是指用"{}"括起來的一段代碼,根據其位置和聲明的不同,可以分為普通代碼塊、構造塊、靜態(tài)塊、和同步代碼塊。如果在代碼塊前加上synchronized關鍵字,則此代碼塊就成為同步代碼塊
普通代碼塊(本地代碼塊)
定義在方法里面用{ }括起來的代碼塊(凡是用{ }括起來都叫代碼塊,只是沒有細分),就是普通代碼塊,也叫本地代碼塊。(不多見,也不常用)
例如:
public class Test {
public static void main(String[] args){
{
System.out.println("本地代碼塊!");
}
}
}構造塊(實例代碼塊)
實例代碼塊定義在類的內部,方法的外部,可以初始化實例的成員
例如:
class Student{
//成員變量
public String name;
public int score;
//類變量
public static String classes = "火箭6班";
//類方法
public static void fun1(){
Student stu = new Student();
stu.name = "jay"; //正確
System.out.println("類方法");
}
//成員方法
public void fun2(String name, int score){
this.name = name;
this.score = score;
}
//實例代碼塊
{
this.name = "jay";
System.out.println("實例代碼塊!");
}
}靜態(tài)塊(靜態(tài)代碼塊)
靜態(tài)代碼塊定義在類的內部,方法的外部,可以初始化實例的成員
例如:
class Student{
//成員變量
public String name;
public int score;
//類變量
public static String classes = "火箭6班";
//類方法
public static void fun1(){
Student stu = new Student();
stu.name = "jay"; //正確
System.out.println("類方法");
}
//成員方法
public void fun2(String name, int score){
this.name = name;
this.score = score;
}
//實例代碼塊
{
System.out.println("實例代碼塊!");
}
//靜態(tài)代碼塊
static{
classes = "16班";
System.out.println("靜態(tài)代碼塊!");
}他們之間有什么關系呢
例子
情況一:看如下代碼會執(zhí)行什么?
class Student{
//成員變量
public String name;
public int score;
//構造方法
public Student(){
System.out.println("構造方法!");
}
//類變量
public static String classes = "火箭6班";
//類方法
public static void fun1(){
Student stu = new Student();
stu.name = "jay"; //正確
System.out.println("類方法");
}
//成員方法
public void fun2(String name, int score){
this.name = name;
this.score = score;
}
//實例代碼塊
{
System.out.println("實例代碼塊!");
}
//靜態(tài)代碼塊
static{
System.out.println("靜態(tài)代碼塊!");
}
}
public class Test {
public static void main(String[] args){
Student stu = new Student();
}
}情況一運行結果:

情況二:看如下代碼會執(zhí)行什么?
class Student{
//成員變量
public String name;
public int score;
//構造方法
public Student(){
System.out.println("構造方法!");
}
//類變量
public static String classes = "火箭6班";
//類方法
public static void fun1(){
Student stu = new Student();
stu.name = "jay"; //正確
System.out.println("類方法");
}
//成員方法
public void fun2(String name, int score){
this.name = name;
this.score = score;
}
//實例代碼塊
{
System.out.println("實例代碼塊!");
}
//靜態(tài)代碼塊
static{
System.out.println("靜態(tài)代碼塊!");
}
}
public class Test {
public static void main(String[] args){
System.out.println(Student.classes);
}
}情況二運行結果:

分析
- 他們執(zhí)行的順序是:靜態(tài)代碼塊 -> 實例代碼塊 -> 構造方法(不論代碼塊的位置在哪,都是這個順序!若有多個靜態(tài),看定義順序即可)
- 只要加載了類,靜態(tài)代碼塊就會被執(zhí)行
- 若沒有實例化對象只會執(zhí)行靜態(tài)的
- 若有多個實例,須看定義順序
- 如果沒有實例化對象,靜態(tài)代碼塊只會執(zhí)行一次
到此這篇關于Java淺析代碼塊與構造塊及靜態(tài)塊三者之間的關系的文章就介紹到這了,更多相關Java 代碼塊 構造塊 靜態(tài)塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解JAVA抓取網頁的圖片,JAVA利用正則表達式抓取網站圖片
這篇文章主要介紹了詳解JAVA抓取網頁的圖片,JAVA利用正則表達式抓取網站圖片,非常具有實用價值,需要的朋友可以參考下。2016-12-12

