一般來說,sun官方網站下載的時候,他會提示你下載何種類型的JDK,適合在什麼操作系統,和平台沒有關系的,你重新去那個網站上看看去,有提示你選擇操作系統。
『貳』 如何查看javaJDK中底層源碼
在初次使用java時,往往我們對最基本的java類會忽略對其內部基本的實現的了解,也往往不屑於了解其內部實現機制,以為它們本來就是這樣子。而其實貫穿java的整個過程,所有上層的使用,都是源於對底層的擴展,所以要真正去了解這門語言,就必須得從其底層開始認真去了解它。而要深入了解,就需要更多去關注其內部的實現是怎樣子的。
在使用IDE的過程中,我們經常會需要能在IDE中就可以便捷的去查看java的源碼,但若沒有做相關設置,一般在IDE是查看不了java源碼的,此次提供在eclipse中設置查看java源碼的方式。
設置步驟如下:
1.點 「window」-> "Preferences" -> "Java" -> "Installed JRES"
2.此時"Installed JRES"右邊是列表窗格,列出了系統中的 JRE 環境,選擇你的JRE,然後點邊上的 "Edit...", 會出現一個窗口(Edit JRE)
3.選中rt.jar文件的這一項:「c:program filesjavajre_1.8lib
t.jar」
點 左邊的「+」 號展開它,
4.展開後,可以看到「Source Attachment:(none)」,點這一項,點右邊的按鈕「Source Attachment...」, 選擇你的JDK目錄下的 「src.zip」文件(該文件在JDK安裝目錄的根目錄下)
5.一路點"ok",設置完成
設置完成後,按住ctrl鍵再用滑鼠單擊某一個jdk方法名或類名,便能看到該方法的源代碼了。此外按F3也能實現。
PS:rt.jar包含了jdk的基礎類庫,也就是你在java
doc裡面看到的所有的類的class文件;src.zip文件裡面放著的正是基本類所對應的源文件(即*.java格式的文件);同理,我們可以去網上下載各個JAVA開源框架所對應的源代碼包,比如spring-src.zip,然後再按照上面的設置步驟設置,就可以查看到對應的JAVA框架源代碼了。
轉自:網頁鏈接
『叄』 學習到底是先深而後廣,還是先廣而後深呢
通過這么多年的學習和思考,我的建議先深後廣,因為當技術學到一定深度後,就會有觸類旁通的能力,自己掌握的廣度也自然有了深度。 但是在實際學習過程中,深度和廣度是相互穿插著學習,比如學習並發編程時,首先學習 JDK 源碼,然後學進去之後,開始看 JVM 源碼,最後看 CPU 架構,在技術點逐漸深度研究的過程中,廣度也得到了完善。
『肆』 有沒有什麼Java底層方面的書籍
JAVA 虛擬機規范
JAVA 深度歷險
都可以,你可以網路一下,想飛社區,在資源里有,你可以參考一下。有很多經典書籍和教程。
『伍』 零基礎如何學習Java
首先告訴你的是,作為一個初學者想轉行學習Java並不是很容易,Java本身是具有一定難度的,雖然說興趣這東西可以讓我們學習不累,但是有多少人學習是因為興趣,或者有多少人知道自己的興趣在哪?所以我很明確的告訴你學習這事本來就是一件非常煎熬的事情,沒有多少人願意學習,但是或許你現在是身為一個應屆生或者你是一個本職工作沒有發展的,想轉行的,所以對於學習任何東西開始,必須逼著自己學,不然可能你學什麼都學不進去,我看了其他答主的回答,我個人並不是認為說那些專業術語是對零基礎有好處,因為他們根本看不懂,一下是我的白話文,可以讓零基礎的同學有一個明確的學習方向,和剛開始應該去做的事情。
1.學Java的大多肯定是為了找工作,所以你作為一個零基礎的新手,必然知道你找工作需要達到什麼標准,所以你的首要方向就是在各種招聘網站上看一下招聘信心,這就是你學習的目標。
2.Java需要循序漸進而且系統的學習方案,不要想著天上掉餡餅的速成方式,給自己制定一個半年的學習計劃,能不能學成就看你這半年的執行力如何。制定好每天學習的新知識,然後用什麼案例和練習鞏固你每天學習的新東西,不然學了之後你肯定忘。
3.學習Java並不是像我們上學學習數學語文那種方式,所以學習Java的時候必定是有一套學習方法的,你作為一個初學者沒有了解過,必然會走很多彎路,而你要做的就是盡量跨過「前輩」們曾經走過的彎路,不要去做重復無意義的事情,如果你對於Java學習沒有一個好的學習方法,可以加的Java學習君羊:前面六一五中間七四一最後六三六,希望幫助大家少走彎路。
4.根據我的學習經歷來看,學習編程是需要引路人,很多問題作為初學者是無法解決的,很浪費時間,例如有很多初學者配置JDK就能用上一天的時間,所以我們完全沒有必要在這方面問題浪費時間,別人告訴我們一下,下次就記住了,所以學習編程一定有一個指導你的人。
5.系統的學習教程,自學Java肯定是主視頻,副書籍,因為書大多數人是看不下去的,所以視頻要新穎,要系統,不要雜亂不精,如果沒有可以管我要。唯一初學者推薦書籍《Java核心技術》
下面我簡單聊一下關於培訓的事情:
很多人不推薦培訓,我個人保持中立的態度,因為培訓就好比上學一樣,有人帶著自然好很多,但是你必須明確一點,學習永遠都是自己的事情,如果你自己課後不用功什麼都白搭,如果有條件的可以選擇去培訓,學成概率會高,如果條件一般的可以選擇自學,只要你每天能堅持去整,最後都可以獲得回報,這是一定的,我本身就是自學的,但是我也知道自學的痛苦,所以在這里回答一下,也希望新手避免走太多彎路然後放棄。
學習注意點:
1.在沒有人教你的情況很多東西你自然不會知道,所以第一點就是代碼規范,我看過很多人寫代碼都是頂格的,這樣開始就走錯了路,很容易放棄。
2.多動手,勤練習,多看API。
3.先嘗試自己解決問題,實在弄不懂,去找別人解答,鍛煉自己解決問題的能力。
4.提高學習效率,一個問題不要在意太久,規劃好每天做的事情,完成就行,記住哥的一句話:貪多嚼不爛。
好了,專業術語我不會說太多,這樣新手也看不懂,以上就是我對於零基礎學習Java的一些建議,根據我之前幾年包括目前工作的學習,初學者做到我上面說的,找到工作沒有任何問題,有問題隨時咨詢我,覺得不錯的,希望給我點個贊,採納一下,謝謝。
『陸』 jdk 是開源的嗎
JDK是開源的,從JDK6開始,你在JDK安裝目錄下可以找到src.zip這個文件,就是其源代碼,可以導入eclipse的。
導入JDK源代碼後,在你的代碼里按住Ctrl並點類名或方法名就看到源代碼了。
但是JDK底層實際上為了跨平台用的是C/C++調用平台本身的功能,這部分JDK的src.zip不包含,但是在Oracle領導的OpenJDK這個項目裡面可以看到其開源實現。
『柒』 求request.setAttribute()的jdk 實現源碼沒找到,還有jdk 源碼中有的屬性
packagejavax.servlet;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.util.Enumeration;
importjava.util.Locale;
importjava.util.Map;
implementsServletRequest
{
privateServletRequestrequest;
publicServletRequestWrapper(ServletRequestrequest)
{
if(request==null){
("Requestcannotbenull");
}
this.request=request;
}
()
{
returnthis.request;
}
publicvoidsetRequest(ServletRequestrequest)
{
if(request==null){
("Requestcannotbenull");
}
this.request=request;
}
publicObjectgetAttribute(Stringname)
{
returnthis.request.getAttribute(name);
}
()
{
returnthis.request.getAttributeNames();
}
()
{
returnthis.request.getCharacterEncoding();
}
(Stringenc)
{
this.request.setCharacterEncoding(enc);
}
publicintgetContentLength()
{
returnthis.request.getContentLength();
}
publicStringgetContentType()
{
returnthis.request.getContentType();
}
()
throwsIOException
{
returnthis.request.getInputStream();
}
publicStringgetParameter(Stringname)
{
returnthis.request.getParameter(name);
}
publicMapgetParameterMap()
{
returnthis.request.getParameterMap();
}
()
{
returnthis.request.getParameterNames();
}
publicString[]getParameterValues(Stringname)
{
returnthis.request.getParameterValues(name);
}
publicStringgetProtocol()
{
returnthis.request.getProtocol();
}
publicStringgetScheme()
{
returnthis.request.getScheme();
}
publicStringgetServerName()
{
returnthis.request.getServerName();
}
publicintgetServerPort()
{
returnthis.request.getServerPort();
}
publicBufferedReadergetReader()
throwsIOException
{
returnthis.request.getReader();
}
publicStringgetRemoteAddr()
{
returnthis.request.getRemoteAddr();
}
publicStringgetRemoteHost()
{
returnthis.request.getRemoteHost();
}
publicvoidsetAttribute(Stringname,Objecto)
{
this.request.setAttribute(name,o);
}
publicvoidremoveAttribute(Stringname)
{
this.request.removeAttribute(name);
}
publicLocalegetLocale()
{
returnthis.request.getLocale();
}
publicEnumerationgetLocales()
{
returnthis.request.getLocales();
}
publicbooleanisSecure()
{
returnthis.request.isSecure();
}
(Stringpath)
{
returnthis.request.getRequestDispatcher(path);
}
publicStringgetRealPath(Stringpath)
{
returnthis.request.getRealPath(path);
}
publicintgetRemotePort()
{
returnthis.request.getRemotePort();
}
publicStringgetLocalName()
{
returnthis.request.getLocalName();
}
publicStringgetLocalAddr()
{
returnthis.request.getLocalAddr();
}
publicintgetLocalPort()
{
returnthis.request.getLocalPort();
}
}
橫線表示鏈接,可以鏈接找到相應的類
『捌』 java中的封裝學習難不難
java中的封裝就是對某些邏輯進行再次重寫。達到重用的狀態,提高開發速度和能力。我們也可以從下面幾個方面進行學。
第一:先學習Java的核心庫(JavaSE)
JavaSE的內容包括:環境搭建、基礎語法、面向對象、數組、集合、常用類、IO流、反射機制、網路編程……..
第二:MySQL資料庫
搞定一門資料庫相關的課程,例如:MySQL、Oracle,搞定一個就可以了,目前互聯網公司,例如:京東、阿里等,他們都在使用MySQL,所以建議大家學習MySQL資料庫,小巧輕盈,免費。
由於互聯網公司的項目訪問量比較大,所以一般會搭建資料庫的集群,可以一個資料庫不夠,所以需要搭建資料庫集群,為了應付高並發。(搭建的比較多的時候,免費就很重要了。)
第三:WEB前端
以後從事Java開發,從事JavaEE開發,主要開發的系統結構是B/S結構的,B指的是Browser,S指的是Server。要開發這種系統,B端要會,S端也要精通。WEB前端的學習就是學習B端技術。
包括:HTML 、CSS、JavaScript(JS)、jQuery框架(底層對JS進行了封裝)…
第四:JavaWEB
WEB後端其實可以是很多種不同的編程語言,例如:php、C、C++、Java,他們都可以進行WEB後端的開發,我們既然選擇了比較火爆的Java,那麼我們學習的後端一定是基於Java語言實現的。
包括:Servlet、Filter、Jsp、EL、JSTL、MVC架構模式、資料庫連接池(阿里巴巴的Druid連接池)、代理模式(動態代理)。另外後端學習了之後,還要學習一個非同步編程技術AJAX。(完成網頁的局部刷新,AJAX其實不屬於後端,是前端瀏覽器上的程序。)
學習到這里為止,表示Java基本/基礎的技術已經學完了。但是這些最基層的技術在實際的開發中不會使用的,一般為了開發效率,都會使用大量的提前封裝好的框架。
第五:最好能夠停留下來,做一個項目。
這個項目最好能將之前所學全部串起來。(對以前的知識點進行鞏固。)
這個項目最好是基於:Servlet + Jsp+AJAX+jQuery+MySQL….
在這個項目的開發過程中:大家一定要記住,目前比較好的項目自動構建工具:Maven是一定要精通的。還有一個就是團隊協作開發:Git/SVN是一定要會用的。(目前使用Git比較多一些。)
第六:學習高級框架
Spring、SpringMVC、MyBatis(持久層框架,這個框架互聯網公司使用比較多,因為互聯網項目需要進行SQL優化,MyBatis的SQL優化很方便,所以大部分都是使用MyBatis)
Struts2(很少使用了,使用這個的肯定是很老的項目)、Hibernate(傳統企業,還有政府等可能會使用Hibernate。)
SpringBoot(新項目大部分使用的都是boot了。所以在項目中遇到還在使用SSM的一般都是遺留項目。)
當你走到這里之後,基本上你可以出山了。(去找工作應該問題不大,但前提是你學得好。學習的深度夠了,廣度夠了。)
第七:最好能有一個大型項目是使用框架來完成的。
SpringBoot做一個項目。
Spring SpringMVC MyBatis做一個項目。
這個項目最好是找幾個人搭夥做一下。體驗一下團隊協作。(尤其是使用一些協作的工具。怎麼溝通,怎麼寫日報,怎麼開會,怎麼使用Git,等等….)
第八:如果你的薪資想達到15K的話,你可能需要還要學習一些分布式相關的一些技術。
能夠應付高並發的一些技術,例如:分布式框架Dubbo、SpringCloud、MQ、Nginx、Redis…..
最後在啰嗦一下,一定要形成自己的編程思想。
編程思想的形成很難。需要大量代碼的堆積才可以。怎麼形成編程思想呢?
千萬別死抄代碼。不要像行屍走肉般的抄代碼,沒有用。只能提高指法速度,無法形成編程思路。
1、打好基礎是重中之重
基礎部分可能很枯燥,但是一定要耐心堅持下去。因為打基礎好比是在造輪子造汽車,沒有打好基礎在後面的學習就好比走路,可以說後面遇到的百分之七八十的問題都是基礎沒學好造成的。
2、多看官方文檔多讀源碼
一定要看JDK相關類庫、常用框架各種功能的源碼,去了解其底層實現的原理。總的來說這個也是在打基礎的部分,Java基礎非常扎實才能看懂,在我們學習一個類的源碼時,肯定會衍生出其他各種各樣的問題,供我們來了解和學習,這也就是我們下一步學習的目標和方向。慢慢的,我們就會學習更多的知識,並積累更多的經驗。
3、系統性學習,循序漸進
不要急於求成,每個知識點都要看,並且每個知識點都要勤加練習。有的同學在學習過程中覺得這個知識點簡單,就跳著學習,其實這是個很大的問題,知識點細節必須要了解。我們學習Java需要循序漸進,一步一步來,不能操之過急。
4、遇到問題
遇到不會做的問題,當然不能置之不理。先在網上查,目前網路上針對很多問題都有完美的解決方案,如果網上沒有類似的問題,那可能是你犯了什麼小錯誤。也不要在這個問題上花費太多時間,這需要一定的學習技巧。Java中的知識有很強的相關性,有不懂的地方,可以用其他周邊相關知識再回過頭來理解,這樣既不會耽誤學習進度,又能理解自己不懂的地方
1)jvm有很多種,其實jvm是一個標准,sun做的那個叫hotspot,作者就是後來v8的作者lars bak,其他公司也做過jvm,其中做得比較好的有bea的jrockit,其他的包括ibm的r9,apple的jvm等在內,都做得不行,所以jvm主要是整合淘汰掉這些做得不好的jvm(s),整合成一個統一的openjdk。
2)java是典型的oop語言,其執行效率的優化,最早就是lars bak等人從smalltalk等長期優化的經驗中總結出來並apply到hotspot上去滴,而smalltalk在早期apple機上搞出了那種拖拖拽拽就開發出app的做法,後來vc,delphi之類的其實都是抄襲或者說借鑒apple的smalltalk的做法,jobs說微軟從頭到尾都在抄襲apple是空穴來風,這里空穴來風跟王垠使用的空穴來風是一個意思,有趣的是,java的gui並沒有繼承這種搞法,反而對這種拖拖拽拽就作出app的做法批判有加,到今天,其實java的gui都還不能真正做到拖拖拽拽就作出來,問題很多,個人建議對於純java的gui開發,還是以寫代碼為主。
3)jee也是一個或者說是一堆標准,知乎上有些人把maven,jenkins都算做jee是不對滴,jee的標准核心是ejb,其實就是一個xml配置化的java文件,這個標准在4的時候,達到了頂峰狀態,幾乎所有的挨踢大廠都主動支持該標准,之後開始走下坡路,支持的廠越來越少。
4)java和javascript的關系比很多人認為的要密切,javascript裡面的java這四個字母可不是白叫的,比如js的版權和商標都控制在oracle手裡,oracle對於js的支持甚至超過其對java的支持,並且喜歡捆綁銷售,比如jvm裡面就有一個js引擎。
5)jvm裡面除了js engine以外還有一個瀏覽器排版引擎webkit,就是apple safari和google chrome用的那個那個。
6)java支持絕大多數腳本語言,你能叫得上名字的腳本語言,幾乎都可以在jvm上執行,比如常見的js,ruby,python,甚至php,lua,只不過除了js以外你需要找到相關的腳本引擎。
7)spring的版權被控制在vmware手裡,其實spring的那一大堆東西,本質上是一個非標準的jee實現,比如在jee裡面用的inject,在spring裡面就是autowire,當然spring曾經深刻滴影響了jee,所以有些東西比如di標准,是spring影響下制定出來的,所以spring的做法會比較特例一點。
8)maven上的jars數量前兩天突破800萬,其他語言的類庫,排名第二的是npm,大概數量是maven的十分之一,也就是幾十萬,不知道現在突破100萬沒有,然後是gem,也就是ruby那個,大概是十幾萬,下來是python的mole,大概數量級是幾萬,沒突破十萬。
9)java的標準是由一個叫做jcp的組織制定的,所有標准需要經過jcp的執行委員會通過方可執行,jcp幾乎包括了你所知道的絕大多數知名挨踢公司和組織,比如google,apple,ibm,intel,arm,red hat,twitter等,還有一些教育機構,比如我國的北京大學,阿里最近一次申請jcp執行委員會成員資格,似乎投票不通過,最近一次執行委員會新增兩個成員是arm和jetbrains。
10)微軟也曾經是jcp甚至是java的主要貢獻者,但是利益驅使下,想擴展java,從而破壞java跨平台的特性,所以跟sun鬧翻,其本質原因就是想讓客戶寫的java代碼跟windows綁定,sun堅決不同意,鬧翻,今天回頭看這個結果,只能說:雙輸,sun掛了,微軟的ria也離掛不太遠了,silverlight已經放棄了,比起當年ie自帶有jvm的支持來說,那完全就是兩回事。
11)除了微軟以外,jcp還缺少一個重要組織apache,因為apache跟oracle也鬧翻了,oracle似乎並不在乎開源組織,而更在意商業公司的支持。
12)java曾經有一個內置的資料庫,9之後被剝離。
13)j2me是j2se的子集。
14)vert.x作者tim fox最早在vmware做spring時候看到了node.js,萌生出了製作支持多核的node.x的想法,並在離開vmware後加入red hat將其實現,vmware看到後開始耍無賴,claim node.x後來改叫vert.x的版權,不惜跟red hat打官司,後來各方妥協,將其交給eclipse foundation。
15)oracle在收購bea之前,一開始的目標並不是bea和bea的weblogic,而是jboss,但是jboss表現出了極為有種的一面,在oracle收購成功之前,投入了red hat的懷抱,因為都是開源組織,從此jboss成了red hat的一個子部門,oracle收購jboss失敗之後,轉向bea,庄思浩氣死了,但是沒用,最後還是被惡意收購。
16)sun在玩不下去之前最早嘗試接觸的目標是ibm,ibm嫌太貴,放棄之後,被轉手給了oracle。(Java學習交流QQ群:589809992 我們一起學Java!)
17)vert.x的作者tim fox在離開red hat之前曾經發過twitter抱怨,外人比如我們,猜測是因為red hat內部已經有了一個jboss,所以跟vert.x在應用上有了重疊,所以導致tim fox的出走,但是出走之後,red hat答應對vert.x做持續性的戰略投入,所以vert.x core的幾個developers,其實拿的是red hat的工資,但是vert.x的版權並不在red hat手裡,而在eclipse foundation手裡。
18)vert.x的幾個核心開發人員都是google summer of code的導師,每年年初時候會招收在校大學生搞項目。
19)教育機構相關:scala的作者馬丁是德國人,eth的博導,groovy的主要領導人是法國人,jruby背後是東京大學,jboss的作者是法國大學校x的校友,x就是伽羅瓦考不進去的那所大學,伽羅瓦進不了x,所以改讀巴黎高師,tim fox畢業於帝國理工,主席去的那個,netty作者trustin lee是acm銀牌,現在line工作,畢業於sky裡面的延世大學,kotlin是毛子公司jetbrains的作品,看linkedin,很多人畢業自聖彼得堡大學,spring作者rod johnson是悉尼大學的音樂博士,hibernate作者gavin king是澳洲莫那什大學的數學本科畢業生,james gosling這種cmu和calgory的估計爛大街了,sun是斯坦福大學網路的意思,夾帶兩個私貨,aspectj有一個維護小組在mcgill,hbase跟waterloo關系密切。
20)java早期被人認為慢,跟java堅持不用硬體加速渲染有關,死活就是不肯接入directx和opengl,7之後總算開竅,搞了一個圖形引擎接入了directx/opengl。
21)casssandra是facebook做失敗的項目,被貢獻給了apache之後老樹開花。
22)groovy被貢獻給了apache,現在叫做apache groovy,ceylon被貢獻給了eclipse,現在叫做eclipse ceylon。
23)netflix現在是java shop,之前是用.net的。
先想到這么多,有空再寫。
『玖』 如何在Eclipse中查看JDK類庫的源代碼 (轉載)
1.點 「window」-> "Preferences" -> "Java" -> "Installed JRES"
2.此時"Installed JRES"右邊是列表窗格,列出了系統中的 JRE 環境,選擇你的JRE,然後點邊上的 "Edit...", 會出現一個窗口(Edit JRE)
3.選中rt.jar文件的這一項:「c:program filesjavajre_1.5.0_06lib
t.jar」
點 左邊的「+」 號展開它,
4.展開後,可以看到「Source Attachment:(none)」,點這一項,點右邊的按鈕「Source Attachment...」, 選擇你的JDK目錄下的 「src.zip」文件
5.一路點"ok",結束。
dt.jar是關於運行環境的類庫,主要是swing的包
tools.jar是關於一些工具的類庫
rt.jar包含了jdk的基礎類庫,也就是你在java doc裡面看到的所有的類的class文件
『拾』 請教,推薦幾本java類書籍
1、《Effective Java(第三版)》(Effective Java 3rd Edition)
如果你還沒讀過這本書,那它絕對是 2019 年你必須讀的第一本書。第三版是一個長期版本,其實它早就該出版了。這版書也囊括了 JDK 7、8、9 的新特性。
我在 1 月份的第一個星期就拿到了這本書,它絕對是約書亞·布洛克(Joshua Bloch)給 Java 程序員非常好的新年禮物。
我花了大概一個星期就讀完了這本書。我發現讀的過程中,時常碰到新的知識點,特別是關於 Java 8 和 Java 9 的。
2、《寫給大忙人看的Java SE 9(第二版)》 (Core Java SE 9 for the Impatient (2nd Edition))
如果你急著學 Java 那我推薦這本書給你。我是凱 S·霍斯特曼 (Cay S. Horstmann)的一個忠實粉絲,他的文采之優美、涉獵之廣,都讓我很是佩服。
你讀了他寫的關於 Java 8、Scala 的書以及《Java 核心編程》之後,絕對也會成為他的粉絲。這本書已經針對 Java SE 9 全面更新。如果你想學習 Java 9,那2018年你應該先讀讀這本書。
3、《Spring 微服務實戰》(Spring Microservices in Action)
軟體開發世界正在加速轉向微服務架構,它在開發、維護、部署、擴容性及可靠性等方面有很多優勢。
感謝 Spring framework 提供這么多開發微服務的 Java 工具,比如 Spring Boot 和 Spring Cloud。
如果你對用 Spring framework 開發微服務有興趣,那麼這本書很適合你。
2019年Java學習,依舊正在進行時,身為一個踏入Java坑的老碼農,深感技術學習就是一個無底洞,需要不斷的去挖掘新的技術,為了跟上時代的發展,需要時時關注技術更新,進行學習,不過隨著技術的不斷深入學習,收獲還是不小的,正在向著資深技術官邁進!