如何扎实自己的Java基础?

转载 2018年01月04日 00:00:00

问:如何扎实自己的Java基础?

答:玩好JDK


JDK其实就是Java SE Development Kit的缩写,要玩好这东西可不简单。JDK主要包含了三部分,第一部分就是Java运行时环境,这其实就是JVM。此外,第二部分就是Java的基础类库,这个类库的数量还是非常可观的。最后,第三部分就是Java的开发工具,它们都是辅助你更好的使用Java的利器。

那么很显然,要玩好JDK,就是要玩好JDK的这三部分。接下来,咱们就逐个的来说一下,每一个部分要学什么,学到什么程度。

第一部分:Java运行时环境

这一部分其实就是常说的jre,而它的核心其实就一个东西,就是JVM。

JVM这个东西,它的重要性我不想再强调了,JVM那本书甚至比《Thinking in java》还重要,这已经足见我多么看重JVM了。

当然了,只是看重,当然没什么卵用,但只要Java稍微高级一点点的职位,这部分基本上都是面试必问内容,这更加说明了JVM的重要性。

所以,对于JVM,没什么可说的,就是往死里学,往死里研究,能有多深就多深!

第二部分:Java的基础类库

Java的基础类库从你刚开始学Java就开始接触了,但是,直到你结束整个Java生涯,你都不一定能把所有的类都见一遍。

这说明了什么?是不是说明了Java基础类库的庞大?

错!大错特错!这其实真正说明的是,有很多类你完全不必要care它们,因为它们从你接触Java到放弃,都不一定能接触到。

所以,搞清楚哪些类重要,哪些类不重要,就非常有必要了。这可以让你以最短的时间,做最有价值的事。

首先我们来看看,Java基础类库的包都有哪些,为了使得本文更有代表性,我们取JDK6的包列表。

java.applet 

java.awt 

java.awt.color 

java.awt.datatransfer 

java.awt.dnd 

java.awt.event 

java.awt.font 

java.awt.geom 

java.awt.im 

java.awt.im.spi 

java.awt.image 

java.awt.image.renderable 

java.awt.print 

java.beans 

java.beans.beancontext 

java.io 

java.lang 

java.lang.annotation 

java.lang.instrument 

java.lang.management 

java.lang.ref 

java.lang.reflect 

java.math 

java.net 

java.nio 

java.nio.channels 

java.nio.channels.spi 

java.nio.charset 

java.nio.charset.spi 

java.rmi 

java.rmi.activation 

java.rmi.dgc 

java.rmi.registry 

java.rmi.server 

java.security 

java.security.acl 

java.security.cert 

java.security.interfaces 

java.security.spec 

java.sql 

java.text 

java.text.spi 

java.util 

java.util.concurrent 

java.util.concurrent.atomic 

java.util.concurrent.locks 

java.util.jar 

java.util.logging 

java.util.prefs 

java.util.regex 

java.util.spi 

java.util.zip 

javax.accessibility 

javax.activation 

javax.activity 

javax.annotation 

javax.annotation.processing 

javax.crypto 

javax.crypto.interfaces 

javax.crypto.spec 

javax.imageio 

javax.imageio.event 

javax.imageio.metadata 

javax.imageio.plugins.bmp 

javax.imageio.plugins.jpeg 

javax.imageio.spi 

javax.imageio.stream 

javax.jws 

javax.jws.soap 

javax.lang.model 

javax.lang.model.element 

javax.lang.model.type 

javax.lang.model.util 

javax.management 

javax.management.loading 

javax.management.modelmbean 

javax.management.monitor 

javax.management.openmbean 

javax.management.relation 

javax.management.remote 

javax.management.remote.rmi 

javax.management.timer 

javax.naming 

javax.naming.directory 

javax.naming.event 

javax.naming.ldap 

javax.naming.spi 

javax.net 

javax.net.ssl 

javax.print 

javax.print.attribute 

javax.print.attribute.standard 

javax.print.event 

javax.rmi 

javax.rmi.CORBA 

javax.rmi.ssl 

javax.script 

javax.security.auth 

javax.security.auth.callback 

javax.security.auth.kerberos 

javax.security.auth.login 

javax.security.auth.spi 

javax.security.auth.x500 

javax.security.cert 

javax.security.sasl 

javax.sound.midi 

javax.sound.midi.spi 

javax.sound.sampled 

javax.sound.sampled.spi 

javax.sql 

javax.sql.rowset 

javax.sql.rowset.serial 

javax.sql.rowset.spi 

javax.swing 

javax.swing.border 

javax.swing.colorchooser 

javax.swing.event 

javax.swing.filechooser 

javax.swing.plaf 

javax.swing.plaf.basic 

javax.swing.plaf.metal 

javax.swing.plaf.multi 

javax.swing.plaf.synth 

javax.swing.table 

javax.swing.text 

javax.swing.text.html 

javax.swing.text.html.parser 

javax.swing.text.rtf 

javax.swing.tree 

javax.swing.undo 

javax.tools 

javax.transaction 

javax.transaction.xa 

javax.xml 

javax.xml.bind 

javax.xml.bind.annotation 

javax.xml.bind.annotation.adapters 

javax.xml.bind.attachment 

javax.xml.bind.helpers 

javax.xml.bind.util 

javax.xml.crypto 

javax.xml.crypto.dom 

javax.xml.crypto.dsig 

javax.xml.crypto.dsig.dom 

javax.xml.crypto.dsig.keyinfo 

javax.xml.crypto.dsig.spec 

javax.xml.datatype 

javax.xml.namespace 

javax.xml.parsers 

javax.xml.soap 

javax.xml.stream 

javax.xml.stream.events 

javax.xml.stream.util 

javax.xml.transform 

javax.xml.transform.dom 

javax.xml.transform.sax 

javax.xml.transform.stax 

javax.xml.transform.stream 

javax.xml.validation 

javax.xml.ws 

javax.xml.ws.handler 

javax.xml.ws.handler.soap 

javax.xml.ws.http 

javax.xml.ws.soap 

javax.xml.ws.spi 

javax.xml.ws.wsaddressing 

javax.xml.xpath 

org.ietf.jgss 

org.omg.CORBA 

org.omg.CORBA_2_3 

org.omg.CORBA_2_3.portable 

org.omg.CORBA.DynAnyPackage 

org.omg.CORBA.ORBPackage 

org.omg.CORBA.portable 

org.omg.CORBA.TypeCodePackage 

org.omg.CosNaming 

org.omg.CosNaming.NamingContextExtPackage 

org.omg.CosNaming.NamingContextPackage 

org.omg.Dynamic 

org.omg.DynamicAny 

org.omg.DynamicAny.DynAnyFactoryPackage 

org.omg.DynamicAny.DynAnyPackage 

org.omg.IOP 

org.omg.IOP.CodecFactoryPackage 

org.omg.IOP.CodecPackage 

org.omg.Messaging 

org.omg.PortableInterceptor 

org.omg.PortableInterceptor.ORBInitInfoPackage 

org.omg.PortableServer 

org.omg.PortableServer.CurrentPackage 

org.omg.PortableServer.POAManagerPackage 

org.omg.PortableServer.POAPackage 

org.omg.PortableServer.portable 

org.omg.PortableServer.ServantLocatorPackage 

org.omg.SendingContext 

org.omg.stub.java.rmi 

org.w3c.dom 

org.w3c.dom.bootstrap 

org.w3c.dom.events 

org.w3c.dom.ls 

org.xml.sax 

org.xml.sax.ext 

org.xml.sax.helpers

怎么样?是不是被吓到了?这么多包,而且还这么多陌生的包名,有的连见都没见过,这特么怎么玩?

不要着急,先带你把这些包给分下级别,将这些包一共分为四个级别。

第一级别:精读源码

该级别包含的包如下:

java.io

java.lang

java.util

精读源码,这是要求最高的级别。但是,要求你精读源码并不意味着,这些类就是最重要的。而是因为,觉得这些类比较常用,而且比较简单,看看它们的源码有助于锻炼你看源码的感觉,也了解一下大神们写代码的风格。

看这些源码的目的,更多是为了增加你的阅读代码能力。而且,这里必须要强调一下,像Exception和Error这一类的,就不用读源码了,亲。

其实上面三个包都有一个共同点,那就是这三个包,基本上都是你最常用的了。lang包不用说了,你随便写点啥都得用到,io包和util包也是你平时读写文件和使用数据结构必不可少的。

看源码从这些常用的包下手找手感,个人觉得再合适不过。

第二级别:深刻理解

该级别包含的包如下:

java.lang.reflect

java.net

javax.net.*

java.nio.*

java.util.concurrent.*

深刻理解,这个看似比精读源码要求低的级别,其实恰恰是最重要的。这个级别要求的类,全都是一些进阶到高级所必须了解的。

当然了,这里要强调一点的是,说这些类要深刻理解,而没说要看它们源码,并不是说这些类的源码不能看,或者看了没用。而是这些类的源码往往非常复杂,要了解清楚细节花费的时间是非常多的,因此,花费巨量的时间去研究这么复杂的代码其实没必要的。

不过,如果你在使用这些类的过程中,遇到了问题,这个时候如果看它们源码可以解决的话,那就不要再矜持了,果断看看源码解决你的问题吧,这是最适合的看源码的契机了。

小小的透露一下,看过的JDK源码,基本上全是这么看过来的。遇到了问题不要百度和谷歌,看源码能解决你90%的问题。

此外,看到这四个包的名字,不难看出它们各自代表了什么。reflect代表了反射,net代表了网络IO,nio代表了非阻塞io,concurrent代表了并发。

这四个家伙可以说每一个都够面试官问上半天的,而且,这四个包的内容,如果你要深刻理解的话,其实还牵扯了很多其它的知识。

举个例子,反射你要了解清楚的话,你是不是要搞明白JVM的类加载机制?网络IO要搞清楚的话,你是不是要清楚TCP/IP和HTTP、HTTPS?包括并发包,如果你要搞清楚的话,是不是要了解并发的相关知识?因此,这四个包要彻底搞清楚,还是需要花费一定时间和精力的。但是,请相信,这绝对是值得的,甚至可以说,这四个包用的够不够叼,基本决定了一个Java程序员所处的档次。

第三级别:会用即可

该级别包含的包如下:

java.lang.annotation

javax.annotation.*

java.lang.ref

java.math

java.rmi.*

javax.rmi.*

java.security.*

javax.security.*

java.sql

javax.sql.*

javax.transaction.*

java.text

javax.xml.*

org.w3c.dom.*

org.xml.sax.*

javax.crypto.*

javax.imageio.*

javax.jws.*

java.util.jar

java.util.logging

java.util.prefs

java.util.regex

java.util.zip

会用即可,这个级别的要求很显然了,就是会用就可以了。这些包大部分都是在特定的情况下会用到,但却不会时刻用到。

就像sql包和transaction包,就是操作数据库时用到的。而xml、dom和sax这些,都是操作xml时用到的。其它的包也都是类似的,有使用注解时用的,有远程方法调用时用的,也有涉及到加密时用到的等等。这些包在面试时一般不会问到,所以它们的重要性自然要低很多,而且也不太需要刻意的去学,用到了研究一下,会用即可。

第四级别:请无视它

该级别包含了所有以上没有提到的包。这个级别就更不用解释了,到现在还没提到的包,基本上可以忽略,因为你基本上不太可能用到它们,比如swing、awt这些玩意儿。什么?你说你经常用它们?如果真的是这样的话,那么只能遗憾的告诉你,赶紧跳槽吧,你待在这公司没啥前途的,0-0。

第三部分:Java的开发工具

这些开发工具主要就是辅助你开发的了,javac应该是最常用的一个了,虽然你几乎不用手动执行它。此外,其实还有一些比较实用的工具,可以帮助你排查问题。而且有的面试官,也会问你这类问题,比如问你平时都用什么工具排查问题。觉得比较实用的几个工具主要有jmap、jconsole、jstack、jvisualvm,至于这几个工具有什么作用,这里就不提了,如果你要了解这些命令的详细内容,可以去谷歌或者官网上找,还是非常好找的。当然,如果你有兴趣的话,也可以自己去JDK的bin目录下找找,看有没有什么更好玩的工具。

小结

好了,到这里基本上就把“玩好JDK”这件事说完了。总的来说,第一级别和第二级别是最重要的。更简单的说,可以把第一级别的那些包称作基础,第二级别的那些包称为进阶。至于第三级别和第四级别的那些包,就没什么可说的了。当然了,最重要的还是那万年不变的JVM,请记住了,JVM才是你Java根基的根本,就是再牛逼的类,没了JVM它也就是一个无用的class文件而已。


最近总是有人和团长要练手的大型实战项目案例,团长在这里可以推荐一些:

Java开发天猫购物车核心支付系统【电商平台核心技术】

Java开发人工智能扫一扫人脸识别系统【人工智能最新实战技术】

Java开发百度云大数据管理系统【百度云最新技术】

Java开发网易163邮件群发系统 【邮箱核心技术】

Java开发人工智能IM客服系统【京东IM核心技术】

......

有需要这些教程的朋友直接来团长的QQ群吧。

群号码:618528494

0?wx_fmt=gif

Java团长

微信号:javatuanzhang

每日分享Java技术干货

640?wx_fmt=jpeg

长按识别二维码

分享一道java基础题,测测你是不是基础扎实

这是在网上只看到的一道java关于多态继承的问题,看着很简单,结构出乎意料,也是研究了一天终于搞明白了一点 问题来自:http://blog.itpub.net/28562677/views...
  • wq343502916
  • wq343502916
  • 2015年03月21日 10:28
  • 1097

如何做到有扎实的 Java 基础

学习java的同学大部分估计都有这样的疑问,到底什么是java基础呢,我们总会去问一些高手,什么是基础,每个人都会有不同的答案告诉你,这时候的你将会接收很多知识,因为这也是基础,那也是基础,整的全都成...
  • marvel_java
  • marvel_java
  • 2016年11月21日 09:25
  • 2775

如何做到有扎实的Java基础

工作这么多年了,主要用的C语言,对Java语言只停留在看一些代码的层面,或者说是知道一些Java的语法。既然下定了决心学习Android App开发,而且也写了一些App代码, 但是发现对Java一些...
  • rex_nie
  • rex_nie
  • 2016年12月29日 00:34
  • 1896

如何做到招聘要求中的「要有扎实的 Java 基础」

来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来。 一日,LZ在群里发话,“招人啦。” 然某群友曰,“群主,俺想去。” LZ回之,“你年几何?” 群友曰,“两年也。” LZ...
  • u010688587
  • u010688587
  • 2016年10月24日 15:42
  • 708

非计算机专业的同学,不见得也要追求计算机基础扎实

【留言】  贺老师您好,我也是刚刚混迹CSDN,好巧,很快遇见了您,三生有幸!这两天看了您的不少博文,感觉到了一点,基础的重要性。不是说没有其他的感觉哦,只是因为我目前太没有基础。我是一个非计算机专业...
  • sxhelijian
  • sxhelijian
  • 2013年10月31日 21:13
  • 3114

一篇文章教会你,如何做到简历中要求的“要有扎实的Java基础“

一直以来,我也是很困惑,什么是"扎实的Java基础",直到一位名叫林萧的coder一篇文章给了我些许启发,十分感谢原作者的分享,最近又找到了这篇文章,共享出来,希望对大家会有帮助.在原文基础上有适量修...
  • u010694688
  • u010694688
  • 2017年05月06日 09:06
  • 379

痛定思痛,打好CSS基本功

仗着自己写页面,随随便便就完成了,但是,交给后台人员,他总是牵一发而动全身。 在想是不是因为css基础写得还不够好。 比如如何实现自动垂直居中,页面布局如何优雅等等。 于是,基本功的修炼,应该如...
  • sinat_25127047
  • sinat_25127047
  • 2016年09月20日 11:01
  • 566

java面试时如何做好5分钟自我介绍?

有简历,为何还要自我介绍? 一个常规的面试,寒暄之后面试官提出的第一个问题几乎千篇一律:“请您简单地做一下自我介绍”。有些被面试者都会问:简历中情况已经写得很清楚了,这是否多此一举? 要回...
  • xiuwu1332
  • xiuwu1332
  • 2017年12月10日 10:21
  • 175

PHP-基础(基础巩固)

在做项目的时候,有时候写一个功能要去试两三遍,  自己也发现了, 有些东西都是模模糊糊知道,原因都是基础知识掌握的不够扎实,趁平时有时间, 把PHP的基础知识又总结了一遍,相信以后写项目少去不少麻烦....
  • xueling022
  • xueling022
  • 2015年07月12日 17:44
  • 347

一篇文章教会你,如何做到简历中要求的“要有扎实的Java基础

本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来。   一日,LZ在群里发话,“招人啦。”   然某群友曰,“群主,俺想去。”   LZ回之,“你年几何?”   群友...
  • chenjian98306
  • chenjian98306
  • 2016年10月20日 10:14
  • 1452
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何扎实自己的Java基础?
举报原因:
原因补充:

(最多只允许输入30个字)