一般来说,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坑的老码农,深感技术学习就是一个无底洞,需要不断的去挖掘新的技术,为了跟上时代的发展,需要时时关注技术更新,进行学习,不过随着技术的不断深入学习,收获还是不小的,正在向着资深技术官迈进!