如何提升自己的Java基础?

如何提升自己的Java基础?插图1

答:玩好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就开始接触了,但是,直到你结束整个Java生涯,你都不一定能把所有的类都见一遍。

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

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

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

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

java.appletjava.awtjava.awt.colorjava.awt.datatransferjava.awt.dndjava.awt.eventjava.awt.fontjava.awt.geomjava.awt.imjava.awt.im.spijava.awt.imagejava.awt.image.renderablejava.awt.printjava.beansjava.beans.beancontextjava.iojava.langjava.lang.annotationjava.lang.instrumentjava.lang.managementjava.lang.refjava.lang.reflectjava.mathjava.netjava.niojava.nio.channelsjava.nio.channels.spijava.nio.charsetjava.nio.charset.spijava.rmijava.rmi.activationjava.rmi.dgcjava.rmi.registryjava.rmi.serverjava.securityjava.security.acljava.security.certjava.security.interfacesjava.security.specjava.sqljava.textjava.text.spijava.utiljava.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locksjava.util.jarjava.util.loggingjava.util.prefsjava.util.regexjava.util.spijava.util.zipjavax.accessibilityjavax.activationjavax.activityjavax.annotationjavax.annotation.processingjavax.cryptojavax.crypto.interfacesjavax.crypto.specjavax.imageiojavax.imageio.eventjavax.imageio.metadatajavax.imageio.plugins.bmpjavax.imageio.plugins.jpegjavax.imageio.spijavax.imageio.streamjavax.jwsjavax.jws.soapjavax.lang.modeljavax.lang.model.elementjavax.lang.model.typejavax.lang.model.utiljavax.managementjavax.management.loadingjavax.management.modelmbeanjavax.management.monitorjavax.management.openmbeanjavax.management.relationjavax.management.remotejavax.management.remote.rmijavax.management.timerjavax.namingjavax.naming.directoryjavax.naming.eventjavax.naming.ldapjavax.naming.spijavax.netjavax.net.ssljavax.printjavax.print.attributejavax.print.attribute.standardjavax.print.eventjavax.rmijavax.rmi.CORBAjavax.rmi.ssljavax.scriptjavax.security.authjavax.security.auth.callbackjavax.security.auth.kerberosjavax.security.auth.loginjavax.security.auth.spijavax.security.auth.x500javax.security.certjavax.security.sasljavax.sound.midijavax.sound.midi.spijavax.sound.sampledjavax.sound.sampled.spijavax.sqljavax.sql.rowsetjavax.sql.rowset.serialjavax.sql.rowset.spijavax.swingjavax.swing.borderjavax.swing.colorchooserjavax.swing.eventjavax.swing.filechooserjavax.swing.plafjavax.swing.plaf.basicjavax.swing.plaf.metaljavax.swing.plaf.multijavax.swing.plaf.synthjavax.swing.tablejavax.swing.textjavax.swing.text.htmljavax.swing.text.html.parserjavax.swing.text.rtfjavax.swing.treejavax.swing.undojavax.toolsjavax.transactionjavax.transaction.xajavax.xmljavax.xml.bindjavax.xml.bind.annotationjavax.xml.bind.annotation.adaptersjavax.xml.bind.attachmentjavax.xml.bind.helpersjavax.xml.bind.utiljavax.xml.cryptojavax.xml.crypto.domjavax.xml.crypto.dsigjavax.xml.crypto.dsig.domjavax.xml.crypto.dsig.keyinfojavax.xml.crypto.dsig.specjavax.xml.datatypejavax.xml.namespacejavax.xml.parsersjavax.xml.soapjavax.xml.streamjavax.xml.stream.eventsjavax.xml.stream.utiljavax.xml.transformjavax.xml.transform.domjavax.xml.transform.saxjavax.xml.transform.staxjavax.xml.transform.streamjavax.xml.validationjavax.xml.wsjavax.xml.ws.handlerjavax.xml.ws.handler.soapjavax.xml.ws.httpjavax.xml.ws.soapjavax.xml.ws.spijavax.xml.ws.wsaddressingjavax.xml.xpathorg.ietf.jgssorg.omg.CORBAorg.omg.CORBA_2_3org.omg.CORBA_2_3.portableorg.omg.CORBA.DynAnyPackageorg.omg.CORBA.ORBPackageorg.omg.CORBA.portableorg.omg.CORBA.TypeCodePackageorg.omg.CosNamingorg.omg.CosNaming.NamingContextExtPackageorg.omg.CosNaming.NamingContextPackageorg.omg.Dynamicorg.omg.DynamicAnyorg.omg.DynamicAny.DynAnyFactoryPackageorg.omg.DynamicAny.DynAnyPackageorg.omg.IOPorg.omg.IOP.CodecFactoryPackageorg.omg.IOP.CodecPackageorg.omg.Messagingorg.omg.PortableInterceptororg.omg.PortableInterceptor.ORBInitInfoPackageorg.omg.PortableServerorg.omg.PortableServer.CurrentPackageorg.omg.PortableServer.POAManagerPackageorg.omg.PortableServer.POAPackageorg.omg.PortableServer.portableorg.omg.PortableServer.ServantLocatorPackageorg.omg.SendingContextorg.omg.stub.java.rmiorg.w3c.domorg.w3c.dom.bootstraporg.w3c.dom.eventsorg.w3c.dom.lsorg.xml.saxorg.xml.sax.extorg.xml.sax.helpers

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

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

第一级别:精读源码

该级别包含的包如下:

java.iojava.langjava.util

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

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

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

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

第二级别:深刻理解

该级别包含的包如下:

java.lang.reflectjava.netjavax.net.*java.nio.*java.util.concurrent.*

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

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

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

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

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

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

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

第三级别:会用即可

该级别包含的包如下:

java.lang.annotationjavax.annotation.*java.lang.refjava.mathjava.rmi.*javax.rmi.*java.security.*javax.security.*java.sqljavax.sql.*javax.transaction.*java.textjavax.xml.*org.w3c.dom.*org.xml.sax.*javax.crypto.*javax.imageio.*javax.jws.*java.util.jarjava.util.loggingjava.util.prefsjava.util.regexjava.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实操课一键免费体验↓


作者:左潇龙链接:https://www.cnblogs.com/zuoxiaolong/p/life53.html来源:博客园

原创文章 如何提升自己的Java基础?,版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/20227987.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注