java代码块的定义_Java几种代码块的定义与常见问题
Java幾種代碼塊的定義與常見問題
代碼塊,通俗的說就是用一對“{}”括起來的一段代碼,代碼塊可以根據位置分為以下幾類:
局部代碼塊:局部代碼塊就是指直接在方法或是語句中定義的代碼塊,請看如下范例:
package org.qty.demo1;
public class Demo1 {
public static void main(String[] args) {
{
int i= 10;
System.out.println(i+",我是局部代碼塊");
}
int i = 20;
System.out.println(i);
}
}
結果打印:
10,我是局部代碼塊
20
以上就是利用了局部代碼塊對主方法進行了“分隔”,局部代碼塊起到了限定的作用,即使變量重名,在這里變量i的作用域只限定于局部代碼塊之內,而不會影響代碼塊以外,所以局部代碼塊主要作用是分隔。
構造代碼塊:構造代碼塊就是指定義在成員位置的代碼塊,或者說就是直接寫在類中的代碼塊。
觀察如下范例:
class A{
String name; //成員屬性
{
System.out.println("我是構造代碼塊"); //與構造方法同級
}
public A(){ //構造方法
System.out.println("我是A類的構造方法");
}
}
public class Demo {
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
}
}
結果打印:
我是構造代碼塊
我是A類的構造方法
我是構造代碼塊
我是A類的構造方法
在類中可以看到代碼塊是定義在成員位置的,與構造方法、成員屬性同級,這就是構造塊,也就是直接定義在類中的代碼塊。
從結果很容易可以看出以下兩點:
在實例化A類對象a1、a2時,構造塊的執行順序是大于構造方法的(這里和構造塊寫前寫后沒關系,將構造塊寫在構造方法后面也是一樣的結果)
每當實例化一次A類對象時,都會在執行構造方法之前優先執行構造代碼塊。
靜態代碼塊:靜態代碼塊就是指用static關鍵字修飾的代碼塊。
觀察如下范例:
class A{
String name; //成員屬性
{
System.out.println("我是構造代碼塊");
}
static {
System.out.println("我是靜態代碼塊");
}
public A(){ //構造方法
System.out.println("我是A類的構造方法");
}
}
public class Demo {
public static void main(String[] args) {
A a = new A();
A b = new A();
A c = new A();
}
}
輸出打印:
我是靜態代碼塊
我是構造代碼塊
我是A類的構造方法
我是構造代碼塊
我是A類的構造方法
我是構造代碼塊
我是A類的構造方法
從結果能看出,執行順序:靜態代碼塊>構造代碼塊>構造方法,這從static關鍵字的含義也能得知,因為static修飾過后的量會隨著class文件一同加載,屬于優先級最高的。
說到執行順序再來看一個范例:
class A {
public A() {
System.out.println("class A");
}
{
System.out.println("I'm A class");
}
static {
System.out.println("class A static");
}
}
class B extends A {
public B() {
System.out.println("class B");
}
{
System.out.println("I'm B class");
}
static {
System.out.println("class B static");
}
}
public class Demo {
public static void main(String[] args) {
B b = new B();
}
}
結果打印:
class A static
class B static
I’m A class
class A
I’m B class
class B
當實例化子類對象時,首先要加載父類的class文件進內存,靜態代碼塊由于有static修飾,所以是隨著類的創建而執行,所以父類靜態代碼塊最先被執行,子類class文件再被加載,同理靜態代碼塊被先執行;實例化子類對象要先調用父類的構造方法,而調用父類構造方法前會先執行父類的構造代碼塊,因此就有如下順序:
父類靜態代碼塊——>子類靜態代碼塊——>父類構造塊——>父類構造方法——>子類構造塊——>子類構造方法
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java代码块的定义_Java几种代码块的定义与常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop生态系统学习路线
- 下一篇: java bean工厂_从零构建轻量级J