java的執行流程(轉)
java的執行流程(轉)[@more@]一,我們所看不到的:
1,如果java檔案沒有package,就預設給檔案加上"無名"package;
2,預設匯入java.lang包,所以我們的java程式中可以使用Sting,Math,Integer等類,包括一些異常類;
3,如果生成的類沒有父類,則為這個類隱式加上父類:Object;因此,包括Object中的許多方法可以使用;
4,欄位的初始化;
二,我們所看的到的:
既然看的到,就先看程式執行結果:
public class JRun1 {
public JRun1() {
System.out.println(" 建構函式");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
}
}
執行結果:
static{}
main()
顯然,程式執行時,先執行:
static
{
System.out.println("static{}");
}
再呼叫main();
注意: 我們可以得到一個副產品:不用main方法也能執行的程式:
public class JRun1 {
static
{
System.out.println("no main()");
System.exit(0);
}
}
如果我們在類中建立一個物件:
public class JRun1 {
public JRun1() {
System.out.println(" 建構函式");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
new JRun1();
}
}
執行結果:
static{}
main()
{}
建構函式
從而,我們得出:
建立一個非主類物件,順序為:靜態初始化塊static{}-->初始化塊{}-->建構函式constructor;
那麼,牽涉到繼承,執行流程又如何?
看程式:
class JRun1Father{
JRun1Father(){
System.out.println("父類建構函式");
}
static{
System.out.println("父類靜態初始化塊");
}
{
System.out.println("父類初始化塊");
}
}
public class JRun1 extends JRun1Father{
public JRun1() {
System.out.println("子類建構函式");
}
static
{
System.out.println("子類靜態初始化塊");
}
{
System.out.println("子類初始化塊");
}
public static void main(String[] args) {
//System.out.println("主方法)");
new JRun1();
}
}
執行結果:
父類靜態初始化塊
子類靜態初始化塊
父類初始化塊
父類建構函式
子類初始化塊
子類建構函式
所以,牽涉到父類:父靜態-->子靜態-->父初始化及構造-->子初始化及構造;
注意:初始化塊和構造是接連執行的,不會父類子類交替.
//////////////////////////////////////////////////////////////////////////
作者:laodie
1,如果java檔案沒有package,就預設給檔案加上"無名"package;
2,預設匯入java.lang包,所以我們的java程式中可以使用Sting,Math,Integer等類,包括一些異常類;
3,如果生成的類沒有父類,則為這個類隱式加上父類:Object;因此,包括Object中的許多方法可以使用;
4,欄位的初始化;
二,我們所看的到的:
既然看的到,就先看程式執行結果:
public class JRun1 {
public JRun1() {
System.out.println(" 建構函式");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
}
}
執行結果:
static{}
main()
顯然,程式執行時,先執行:
static
{
System.out.println("static{}");
}
再呼叫main();
注意: 我們可以得到一個副產品:不用main方法也能執行的程式:
public class JRun1 {
static
{
System.out.println("no main()");
System.exit(0);
}
}
如果我們在類中建立一個物件:
public class JRun1 {
public JRun1() {
System.out.println(" 建構函式");
}
static
{
System.out.println("static{}");
}
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
new JRun1();
}
}
執行結果:
static{}
main()
{}
建構函式
從而,我們得出:
建立一個非主類物件,順序為:靜態初始化塊static{}-->初始化塊{}-->建構函式constructor;
那麼,牽涉到繼承,執行流程又如何?
看程式:
class JRun1Father{
JRun1Father(){
System.out.println("父類建構函式");
}
static{
System.out.println("父類靜態初始化塊");
}
{
System.out.println("父類初始化塊");
}
}
public class JRun1 extends JRun1Father{
public JRun1() {
System.out.println("子類建構函式");
}
static
{
System.out.println("子類靜態初始化塊");
}
{
System.out.println("子類初始化塊");
}
public static void main(String[] args) {
//System.out.println("主方法)");
new JRun1();
}
}
執行結果:
父類靜態初始化塊
子類靜態初始化塊
父類初始化塊
父類建構函式
子類初始化塊
子類建構函式
所以,牽涉到父類:父靜態-->子靜態-->父初始化及構造-->子初始化及構造;
注意:初始化塊和構造是接連執行的,不會父類子類交替.
//////////////////////////////////////////////////////////////////////////
作者:laodie
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958161/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於java的執行流程Java
- 【java學習】控制執行流程Java
- Java類初始化執行流程Java
- JAVA執行緒建立底層流程Java執行緒
- javaWeb的執行流程JavaWeb
- MapReduce的執行流程概述
- Mysql 執行流程MySql
- HA執行流程
- MapReduce執行流程
- php執行流程PHP
- MyBatis執行流程MyBatis
- Seata的AT模式的執行流程模式
- 死磕 java執行緒系列之執行緒池深入解析——普通任務執行流程Java執行緒
- 深入理解執行緒池的執行流程執行緒
- Java執行緒的深入探討 (轉)Java執行緒
- JAVA 的多執行緒淺析(轉)Java執行緒
- java資料——執行緒(轉)Java執行緒
- [轉]Java執行緒詳解Java執行緒
- 死磕 java執行緒系列之執行緒池深入解析——未來任務執行流程Java執行緒
- WEB程式執行的基本流程Web
- Java基礎學習總結(121)——Java JVM執行流程JavaJVM
- 【轉】理解java執行緒的中斷(interrupt)Java執行緒
- Java程式中的多執行緒(1)(轉)Java執行緒
- Java程式中的多執行緒(2)(轉)Java執行緒
- Java servlet執行的完整流程(圖解含原始碼分析)JavaServlet圖解原始碼
- 「MySQL」 MySQL執行流程MySql
- SpringMVC執行流程SpringMVC
- MapReduce程式執行流程
- Struts框架執行流程框架
- PostgreSQL SQL執行流程SQL
- JAVA 執行緒狀態及轉化(轉)Java執行緒
- Java執行緒狀態轉換Java執行緒
- java--執行緒狀態【轉】Java執行緒
- mysql的sql語句執行流程MySql
- SpringMvc - SpringMvc的執行流程SpringMVC
- 房卡棋牌遊戲的執行流程遊戲
- 執行緒池的工作流程執行緒
- 徹底明白Java的多執行緒-執行緒間的通訊(2)(轉)Java執行緒