本文目錄一覽:
java學習需要哪些步驟呢?
你的j2se只學了一點而已,不管怎樣,都要先把j2se學好,這是基礎。j2se的學習順序一般是這樣的:基礎語法 – 面向對象入門 – 異常處理 – 數組 – 常用類 – 容器(相當重要) – IO – 線程 – 網絡 – GUI。
既然你io,thread都學了,其餘那些還有沒學的,建議去看看馬士兵的j2se視頻,其實我覺得如果想打好基礎的話,這套視頻應該全部過過,特別是開始的內存分析和面向對象分析。學完j2se要做做幾個基礎的桌面項目,像什麼貪吃蛇啊、俄羅斯方塊、簡單的聊天器等等,這樣才能把知識整合起來,加深對j2se的理解。
如果想走j2ee路線的話,接下來應該學數據庫,再學html、css、JavaScript、jsp/servlet,也就是web的入門,之後做做web項目,比如小bbs、網上商城等等。學通了就學框架,這期間會穿插很多東西,例如xml、uml、log4j、jUnit等等,最後學設計模式和面向對象的分析。計算機的東西是很多的,不要學死,也不要想着學完,最重要的是學會解決問題的方法。開始肯定要模仿別人的代碼,不斷模仿,多看,看完一定要自己寫幾遍,只有能寫出來了的,才是自己的東西,建議開始時多背點東西,包括一些常用類啊、一些概念性的東西,因為背多了自己就熟悉了。
數據庫的要另找,網上能找到馬士兵的Oracle,講的很不錯的!!
shopping這個項目也有從頭帶到尾的,也是馬士兵的,要找找
做項目是很重要的,從簡單的做起,慢慢體會其中的分析與設計
學java還是從視頻入門的好,千萬不要一開始就去看《Thinking in java》,吃力不討好,學到web時可以看看張孝祥的《深入體驗JAVA Web開發內幕——核心基礎》,寫的很詳細,不過他的視頻一般,JavaScript就看《JavaScript高級程序設計》,html比較簡單,css也比較簡單,不過css布局因人而異,有人覺得很好理解,有人覺得很難,搞個Dreamweaver多練練也就熟悉了。設計模式可以看《大話設計模式》,入門很好!
你的j2se只學了一點而已,不管怎樣,都要先把j2se學好,這是基礎。j2se的學習順序一般是這樣的:基礎語法 – 面向對象入門 – 異常處理 – 數組 – 常用類 – 容器(相當重要) – IO – 線程 – 網絡 – GUI。
既然你io,thread都學了,其餘那些還有沒學的,建議去看看馬士兵的j2se視頻,其實我覺得如果想打好基礎的話,這套視頻應該全部過過,特別是開始的內存分析和面向對象分析。學完j2se要做做幾個基礎的桌面項目,像什麼貪吃蛇啊、俄羅斯方塊、簡單的聊天器等等,這樣才能把知識整合起來,加深對j2se的理解。
如果想走j2ee路線的話,接下來應該學數據庫,再學html、css、JavaScript、jsp/servlet,也就是web的入門,之後做做web項目,比如小bbs、網上商城等等。學通了就學框架,這期間會穿插很多東西,例如xml、uml、log4j、jUnit等等,最後學設計模式和面向對象的分析。計算機的東西是很多的,不要學死,也不要想着學完,最重要的是學會解決問題的方法。開始肯定要模仿別人的代碼,不斷模仿,多看,看完一定要自己寫幾遍,只有能寫出來了的,才是自己的東西,建議開始時多背點東西,包括一些常用類啊、一些概念性的東西,因為背多了自己就熟悉了。
數據庫的要另找,網上能找到馬士兵的Oracle,講的很不錯的!!
shopping這個項目也有從頭帶到尾的,也是馬士兵的,要找找
做項目是很重要的,從簡單的做起,慢慢體會其中的分析與設計
學java還是從視頻入門的好,千萬不要一開始就去看《Thinking in java》,吃力不討好,學到web時可以看看張孝祥的《深入體驗JAVA Web開發內幕——核心基礎》,寫的很詳細,不過他的視頻一般,JavaScript就看《JavaScript高級程序設計》,html比較簡單,css也比較簡單,不過css布局因人而異,有人覺得很好理解,有人覺得很難,搞個Dreamweaver多練練也就熟悉了。設計模式可以看《大話設計模式》,入門很好!
java怎麼學
Java學習過程分為3個階段分別解釋一下:
1、首先要學習Java語言基礎,數據類型、基本語法、常用數據結構、常用類,等等,網上資源很多。
2、結合工作內容或者興趣方向,學習常用框架,比如Web開發常用SpringBoot,注意框架學習時要挑選當前的Top3,已經過時的或者太新還看不清楚未來的,都不適合新手學習。
3、隨着學習進階,逐步可以獨當一面,在工作中積累項目經驗、提高技術水平,現在技術發展迭代很快,終身學習。
Java知識點主要有以下這些。
1、Java歸類總結
開發不同類別的應用會用到不同的知識點,以Web服務為例,總結如下表
藉助於IT技術發展給予我們的便利,使得我們更能把有限的精力集中在業務開發上,通過實際項目歷練,積累經驗。
1)開發運行環境屬於安裝配置方面的基礎工作,藉助於Docker自動化一鍵部署,秒啟這些依賴環境。
2)組件集成工作量比較大,也經常會遇到各種各樣的奇葩問題,好在基本上都是一次性的工作,個人和團隊經驗也能逐步積累起來。
3)功能開發是每個行業和項目都不太一樣的地方,開發過程中遵守軟件工程規範,保證代碼質量,少挖坑,穩紮穩打,逐步構築起運行穩定的業務系統。
4)部署運維是日常工作,貫穿系統整個生命周期。雲服務已經成為IT技術的中心,充分利用雲服務和DevOps自動化,將有效提升工作效率。
2、Java詳細知識點
1)Java語言基礎:數據類型、語法、數據結構、常用類,等等
2)SpringBoot開發框架:項目基本架構,常用類,比如Controller,Service
3)數據庫開發,MySQL,MyBatis,Flyway,AliDruid等框架
4)緩存系統,最常使用的Redis
5)消息隊列,ActiveMQ,RocketMQ,RabbitMQ都比較常用,學習一個就夠了。
6)文件服務,上傳下載,雲存儲服務接入方法,調用SDK
7)鑒權認證,控制接口訪問權限,用戶登錄等。
8)異步任務調度,使用Quartz框架異步執行複雜耗時任務
9)日誌系統,LogBack,LogStash的集成配置方法
10)服務監控,集成Actuator,ZooKeeper等框架實現信息收集
11)更多具體行業應用開發,比如大數據、AI、IoT、區塊鏈等
以上是本文介紹的Java學習攻略,希望對於學習Java的你有所幫助。
java運行的五個步驟?
Java程序從源文件創建到程序運行要經過兩大步驟:1、源文件由編譯器編譯成位元組碼(ByteCode)
2、位元組碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言( “semi-interpreted” language)。
下面通過以下這個java程序,來說明java程序從編譯到最後運行的整個流程。代碼如下:
//MainApp.java
public class MainApp {
public static void main(String[] args) {
Animal animal = new Animal(“Puppy”);
animal.printName();
}
}
//Animal.java
public class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void printName() {
System.out.println(“Animal [“+name+”]”);
}
}
第一步(編譯): 創建完源文件之後,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用,這個有點象make。如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報「cant find symbol」的錯誤。
編譯後的位元組碼文件格式主要分為兩部分:常量池和方法位元組碼。常量池記錄的是代碼出現過的所有token(類名,成員變量名等等)以及符號引用(方法引用,成員變量引用等等);方法位元組碼放的是類中各個方法的位元組碼。下面是MainApp.class通過反彙編的結果,我們可以清楚看到.class文件的結構:
第二步(運行):java類運行的過程大概可分為兩個過程:1、類的加載 2、類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去加載該類。也就是說,JVM並不是在一開始就把一個程序就所有的類都加載到內存中,而是到不得不用的時候才把它加載進來,而且只加載一次。
下面是程序運行的詳細步驟:
在編譯好java程序得到MainApp.class文件後,在命令行上敲java AppMain。系統就會啟動一個jvm進程,jvm進程從classpath路徑中找到一個名為AppMain.class的二進制文件,將MainApp的類信息加載到運行時數據區的方法區內,這個過程叫做MainApp類的加載。
然後JVM找到AppMain的主函數入口,開始執行main函數。
main函數的第一條命令是Animal animal = new Animal(“Puppy”);就是讓JVM創建一個Animal對象,但是這時候方法區中沒有Animal類的信息,所以JVM馬上加載Animal類,把Animal類的類型信息放到方法區中。
加載完Animal類之後,Java虛擬機做的第一件事情就是在堆區中為一個新的Animal實例分配內存, 然後調用構造函數初始化Animal實例,這個Animal實例持有着指向方法區的Animal類的類型信息(其中包含有方法表,java動態綁定的底層實現)的引用。
當使用animal.printName()的時候,JVM根據animal引用找到Animal對象,然後根據Animal對象持有的引用定位到方法區中Animal類的類型信息的方法表,獲得printName()函數的位元組碼的地址。
開始運行printName()函數。
特別說明:java類中所有public和protected的實例方法都採用動態綁定機制,所有私有方法、靜態方法、構造器及初始化方法都是採用靜態綁定機制。而使用動態綁定機制的時候會用到方法表,靜態綁定時並不會用到。
誰能簡單闡述下java編譯執行的過程
Java虛擬機(JVM)是可運行Java代碼的假想計算機。
只要根據JVM規格描述將解釋器移植到特定的計算機上,就能保證經過編譯的任何Java代碼能夠在該系統上運行。
本文首先簡要介紹從Java文件的編譯到最終執行的過程,隨後對JVM規格描述作一說明。
一.Java源文件的編譯、下載、解釋和執行
Java應用程序的開發周期包括編譯、下載、解釋和執行幾個部分。
Java編譯程序將Java源程序翻譯為JVM可執行代碼?位元組碼。
這一編譯過程同C/C++的編譯有些不同。
當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬件平台運行而產生的。
因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。
Java編譯器卻不將對變量和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將這些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址。
這樣就有效的保證了Java的可移植性和安全性。
運行JVM位元組碼的工作是由解釋器來完成的。
解釋執行過程分三部進行:代碼的裝入、代碼的校驗和代碼的執行。
裝入代碼的工作由”類裝載器”(classloader)完成。
類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被其調用的類。
當類裝載器裝入一個類時,該類被放在自己的名字空間中。
除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。
在本台計算機上的所有類都在同一地址空間內,而所有從外部引進的類,都有一個自己獨立的名字空間。
這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。
當裝入了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。
解釋器為符號引用同特定的地址空間建立對應關係及查詢表。
通過在這一階段確定代碼的內存布局,Java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。
隨後,被裝入的代碼由位元組碼校驗器進行檢查。
校驗器可發現操作數棧溢出,非法數據類型轉化等多種錯誤。
通過校驗後,代碼便開始執行了。
Java位元組碼的執行有兩種方式:
1.即時編譯方式:解釋器先將位元組碼編譯成機器碼,然後再執行該機器碼。
2.解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成Java位元組碼程序的所有操作。
通常採用的是第二種方法。
由於JVM規格描述具有足夠的靈活性,這使得將位元組碼翻譯為機器代碼的工作
具有較高的效率。
對於那些對運行速度要求較高的應用程序,解釋器可將Java位元組碼即時編譯為機器碼,從而很好地保證了Java代碼的可移植性和高性能。
二.JVM規格描述
JVM的設計目標是提供一個基於抽象規格描述的計算機模型,為解釋程序開發人員提很好的靈活性,同時也確保Java代碼可在符合該規範的任何系統上運行。
JVM對其實現的某些方面給出了具體的定義,特別是對Java可執行代碼,即位元組碼(Bytecode)的格式給出了明確的規格。
這一規格包括操作碼和操作數的語法和數值、標識符的數值表示方式、以及Java類文件中的Java對象、常量緩衝池在JVM的存儲映象。
這些定義為JVM解釋器開發人員提供了所需的信息和開發環境。
Java的設計者希望給開發人員以隨心所欲使用Java的自由。
JVM定義了控制Java代碼解釋執行和具體實現的五種規格,它們是:
JVM指令系統
JVM寄存器
JVM棧結構
JVM碎片回收堆
JVM存儲區
2.1JVM指令系統
JVM指令系統同其他計算機的指令系統極其相似。
Java指令也是由操作碼和操作數兩部分組成。
操作碼為8位二進制數,操作數進緊隨在操作碼的後面,其長度根據需要而不同。
操作碼用於指定一條指令操作的性質(在這裡我們採用彙編符號的形式進行說明),如iload表示從存儲器中裝入一個整數,anewarray表示為一個新數組分配空間,iand表示兩個整數的”與”,ret用於流程控制,表示從對某一方法的調用中返回。
當長度大於8位時,操作數被分為兩個以上位元組存放。
JVM採用了”bigendian”的編碼方式來處理這種情況,即高位bits存放在低位元組中。
這同Motorola及其他的RISCCPU採用的編碼方式是一致的,而與Intel採用的”littleendian”的編碼方式即低位bits存放在低位位元組的方法不同。
Java指令系統是以Java語言的實現為目的設計的,其中包含了用於調用方法和監視多先程系統的指令。
Java的8位操作碼的長度使得JVM最多有256種指令,目前已使用了160多種操作碼。
2.2JVM指令系統
所有的CPU均包含用於保存系統狀態和處理器所需信息的寄存器組。
如果虛擬機定義較多的寄存器,便可以從中得到更多的信息而不必對棧或內存進行訪問,這有利於提高運行速度。
然而,如果虛擬機中的寄存器比實際CPU的寄存器多,在實現虛擬機時就會佔用處理器大量的時間來用常規存儲器模擬寄存器,這反而會降低虛擬機的效率。
針對這種情況,JVM只設置了4個最為常用的寄存器。
它們是:
pc程序計數器
optop操作數棧頂指針
frame當前執行環境指針
vars指向當前執行環境中第一個局部變量的指針
所有寄存器均為32位。
pc用於記錄程序的執行。
optop,frame和vars用於記錄指向Java棧區的指針。
2.3JVM棧結構
作為基於棧結構的計算機,Java棧是JVM存儲信息的主要方法。
當JVM得到一個Java位元組碼應用程序後,便為該代碼中一個類的每一個方法創建一個棧框架,以保存該方法的狀態信息。
每個棧框架包括以下三類信息:
局部變量
執行環境
操作數棧
局部變量用於存儲一個類的方法中所用到的局部變量。
vars寄存器指向該變量表中的第一個局部變量。
執行環境用於保存解釋器對Java位元組碼進行解釋過程中所需的信息。
它們是:上次調用的方法、局部變量指針和操作數棧的棧頂和棧底指針。
執行環境是一個執行一個方法的控制中心。
例如:如果解釋器要執行iadd(整數加法),首先要從frame寄存器中找到當前執行環境,而後便從執行環境中找到操作數棧,從棧頂彈出兩個整數進行加法運算,最後將結果壓入棧頂。
操作數棧用於存儲運算所需操作數及運算的結果。
2.4JVM碎片回收堆
Java類的實例所需的存儲空間是在堆上分配的。
解釋器具體承擔為類實例分配空間的工作。
解釋器在為一個實例分配完存儲空間後,便開始記錄對該實例所佔用的內存區域的使用。
一旦對象使用完畢,便將其回收到堆中。
在Java語言中,除了new語句外沒有其他方法為一對象申請和釋放內存。
對內存進行釋放和回收的工作是由Java運行系統承擔的。
這允許Java運行系統的設計者自己決定碎片回收的方法。
在SUN公司開發的Java解釋器和HotJava環境中,碎片回收用後台線程的方式來執行。
這不但為運行系統提供了良好的性能,而且使程序設計人員擺脫了自己控制內存使用的風險。
2.5JVM存儲區
JVM有兩類存儲區:常量緩衝池和方法區。
常量緩衝池用於存儲類名稱、方法和字段名稱以及串常量。
方法區則用於存儲Java方法的位元組碼。
對於這兩種存儲區域具體實現方式在JVM規格中沒有明確規定。
這使得Java應用程序的存儲布局必須在運行過程中確定,依賴於具體平台的實現方式。
JVM是為Java位元組碼定義的一種獨立於具體平台的規格描述,是Java平 *** 立性的基礎。
目前的JVM還存在一些限制和不足,有待於進一步的完善,但無論如何,JVM的思想是成功的。
對比分析:如果把Java原程序想像成我們的C++原程序,Java原程序編譯後生成的位元組碼就相當於C++原程序編譯後的80×86的機器碼(二進制程序文件),JVM虛擬機相當於80×86計算機系統,Java解釋器相當於80x86CPU。
在80x86CPU上運行的是機器碼,在Java解釋器上運行的是Java位元組碼。
Java解釋器相當於運行Java位元組碼的「CPU」,但該「CPU」不是通過硬件實現的,而是用軟件實現的。
Java解釋器實際上就是特定的平台下的一個應用程序。
只要實現了特定平台下的解釋器程序,Java位元組碼就能通過解釋器程序在該平台下運行,這是Java跨平台的根本。
當前,並不是在所有的平台下都有相應Java解釋器程序,這也是Java並不能在所有的平台下都能運行的原因,它只能在已實現了Java解釋器程序的平台下運行。
Java程序開發步驟是什麼?
具體操作步驟如下:
第一步:安裝JDK。
要下載Oracle公司的JDK可以百度「JDK」進入Oracle公司的JDK下載頁面,選擇自己電腦系統的對應版本即可。
第二步:配置Windows上JDK的變量環境 。
JAVA_HOME
先設置這個系統變量名稱,變量值為JDK在電腦上的安裝路徑:C:\Program Files\Java\jdk1.8.0_20。創建好後則可以利用%JAVA_HOME%作為JDK安裝目錄的統一引用路徑。
Path
PATH屬性已存在,可直接編輯,在原來變量後追加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 。
CLASSPATH
設置系統變量名為:CLASSPATH 變量值為:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 。
注意變量值字符串前面有一個”.”表示當前目錄,設置CLASSPATH 的目的,在於告訴Java執行環境,在哪些目錄下可以找到所要執行的Java程序所需要的類或者包。
第三步: 下載安裝Eclipse(已上傳附件,電腦打開可下載) 。
Eclipse為Java應用程序及Android開發的IDE(集成開發環境)。Eclipse不需要安裝,下載後把解壓包解壓後,剪切eclipse文件夾到你想安裝的地方,打開時設置工作目錄即可。
第四步:下載安裝Android SDK 。
配置了JDK變量環境,安裝好了Eclipse,這個時候如果只是開發普通的JAVA應用程序,那麼Java的開發環境已經準備好了。要通過Eclipse來開發Android應用程序,那麼需要下載Android SDK(Software Development Kit)和在Eclipse安裝ADT插件,這個插件能讓Eclipse和Android SDK關聯起來。
第五步:為Eclipse安裝ADT插件。
前面已經配置好了java的開發環境,安裝了開發Android的IDE,下載安裝了Android SDK,但是Eclipse還沒有和Android SDK進行關聯,也就是它們現在是互相獨立的,就好比槍和子彈分開了。為了使得Android應用的創建,運行和調試更加方便快捷,Android的開發團隊專門針對Eclipse IDE定製了一個插件:Android Development Tools(ADT)。
學習Java的過程是?
一、Java編程入門類
對於沒有Java編程經驗的程序員要入門,隨便讀什麼入門書籍都一樣,這個階段需要你快速的掌握Java基礎語法和基本用法,宗旨就是「囫圇吞棗不求甚解」,先對Java熟悉起來再說。用很短的時間快速過一遍Java語法,連懵帶猜多寫寫代碼,要「知其然」。
1、《Java編程思想》
在有了一定的Java編程經驗之後,你需要「知其所以然」了。這個時候《Java編程思想》是一本讓你知其所以然的好書,它對於基本的面向對象知識有比較清楚的交待,對Java基本語法,基本類庫有比較清楚的講解,可以幫你打一個良好的Java編程基礎。這本書的缺點是實在太厚,也比較羅嗦,不適合現代人快節奏學習,因此看這本書要懂得取捨,不是每章每節都值得一看的,挑重點的深入看就可以了。
2、《Agile Java》中文版
這本書是出版社送給我的,我一拿到就束之高閣,放在書櫃一頁都沒有翻過,但是前兩天整理書櫃的時候,拿出來一翻,竟然發現這絕對是一本好書!這本書一大特點是以單元測試和TDD來貫穿全書的,在教你Java各種重要的基礎知識的過程中,潛移默化的影響你的編程思維走向敏捷,走向TDD。另外這本書成書很新,以JDK5.0的語法為基礎講解,要學習JDK5.0的新語法也不錯。還有這本書對於內容取捨也非常得當,Java語言畢竟類庫龐大,可以講的內容太多,這本書選擇的內容以及內容的多寡都很得當,可以讓你以最少的時間掌握Java最重要的知識,順便培養出來優秀的編程思路,真是一本不可多得的好書。
雖然作者自己把這本書定位在入門級別,但我不確定這本書用來入門是不是稍微深了點,我自己也準備有空的時候翻翻這本書,學習學習。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/188747.html