這節我們簡單學習java函數在內存中的加載和運行過程.
現在我們應該都知道,在dos命令行中我們運行一個java文件:
比如我們運行一個名為FunctionDemo3.java的文件,我們在dos是這樣操作的:
~~~
/> javac FunctionDemo3.java --> FunctionDemo3.class
/> java FunctionDemo3
~~~
javac命令對FunctionDemo.java進行編譯,如果編譯通過,則會生成字節碼文件FunctionDemo3.class文件,這也就是java的運行程序.
java命令啟動了JVM,當啟動JVM之后,會自動尋找main方法,如果沒有就報錯.
這就是說如果沒有main方法,編譯是可能通過的,但是在運行時會找到錯誤.
我們就簡單的說說java運行程序是怎么樣在內在中執行的,以下面的例子為例
~~~
class FunctionDemo3
{
public static int add(int a,int b)
{
return a+b;
}
public static void main(String[] args)
{
int x = add(3,5);//調用add方法,同時把3,5賦給形式參數a和b,然后把a和b的和賦給x
System.out.println("x="+x);
}
}
~~~
我們可以這樣簡單說一說這個過程:
虛擬機在啟動之后,然后在棧內存中劃分一部分空間;
先分配一個內存存放main方法,執行main函數,執行主函數中的第一句語句:x=add(3,5)
內存中變量x暫時未知,調用add方法;
內存再分配一個存放add方法的空間,同時把實際參數a和b進行運算;
然后把a+b的結果賦給變量x;
內存釋放add方法內存;
然后再繼續執行main函數中的第二名語句進行輸出;
最后內存釋放main方法的內存.
以后我們還會更加詳細的學習java運行程序在內存中的執行過程.
- 前言
- 1.1 基本常識
- 1.2 Java語言概述
- 1.3 Java語言的環境搭建
- 1.4 Java程序開發之初體驗--Hello World
- 2.1 關鍵字
- 2.2 標識符
- 2.3 注釋
- 2.4 常量
- 2.5 進制掃盲
- 2.6 變量和數據類型(1)
- 2.7 變量和數據類型(2)
- 2.8 運算符
- 3.1 if語句
- 3.2 switch語句
- 3.3 while和do-while語句
- 3.4 for語句
- 3.5 for循環的嵌套
- 3.6 break語句與continue語句
- 4.1 函數的定義
- 4.2 定義函數的兩個明確
- 4.3 函數的內存加載過程
- 4.4 函數的重載
- 5.1 數組的定義
- 5.2 數組的內存分配及特點
- 5.3 數組操作中常見問題
- 5.4 數組常用操作(1)
- 5.5 數組常用操作(2)
- 5.6 二維數組
- 6.1 面向對象的概述
- 6.2 類與對象的關系
- 6.3 對象的內存體現
- 6.4 成員變量與局部變量
- 6.5 類類型參數與匿名對象
- 6.6 基本數據類型參數與引用數據類型參數的傳遞過程
- 6.7 封裝
- 7.1 構造函數概述與默認構造函數
- 7.2 構造函數與一般函數的區別
- 7.3 構造函數的重載
- 7.4 構造函數的內存加載
- 7.5 構造函數需要注意的幾個細節
- 7.6 this關鍵字的原理
- 7.7 this關鍵字的細節與應用
- 8.1 static關鍵字之特點
- 8.2 成員變量與靜態變量的區別
- 8.3 static關鍵字使用的注意細節
- 8.4 main函數的解析與細節
- 8.5 static關鍵字的使用場景
- 8.6 靜態的內存加載
- 8.7 靜態代碼塊
- 8.8 構造代碼塊
- 9.1 繼承
- 9.2 單繼承與多重繼承
- 9.3 子父類中成員變量特征體現