官方网站拼多多,网站优化竞争对手分析,wordpress dux 5.3,企业整站优化最近在头条看到一篇关于Java基础学习的文章#xff0c;感觉写的很不错#xff0c;分享一下#xff0c;希望对大家有帮助 什么东西算作Java基础#xff1f;学到什么程度才算扎实#xff1f; 这些问题的答案#xff0c;LZ已经用文言文告诉你了#xff0c;咳咳#xff0c;…最近在头条看到一篇关于Java基础学习的文章感觉写的很不错分享一下希望对大家有帮助 什么东西算作Java基础学到什么程度才算扎实 这些问题的答案LZ已经用文言文告诉你了咳咳答案就是玩好JDK就可以了。 不过JDK这东西包含的东西实在太多群里的猿友还是拎不清到底应该学哪个所以LZ就专门写一篇文章来讲一讲JDK应该怎么玩。 或许有的猿友会问“林萧是谁” 恩问得好林萧就是某程序员小说的主角啦传言无所不知看看你就知道咯。 玩好JDK 在详细讲解JDK之前LZ首先要强调下本文的内容都是LZ个人的主观判断。因此各位猿友务必结合自己的判断之后再决定是否要学习以及学习到什么程度。 此外本文只是告诉你学什么学到什么程度本文不会包含太多具体的技术细节讲解。 JDK其实就是Java SE Development Kit的缩写要玩好这东西可不简单。JDK主要包含了三部分第一部分就是Java运行时环境这其实就是JVM。此外第二部分就是Java的基础类库这个类库的数量还是非常可观的。最后第三部分就是Java的开发工具它们都是辅助你更好的使用Java的利器。 那么很显然要玩好JDK就是要玩好JDK的这三部分。接下来咱们就逐个的来说一下每一个部分要学什么学到什么程度。 第一部分Java运行时环境 这一部分其实就是常说的jre而它的核心其实就一个东西就是JVM。 JVM这个东西它的重要性LZ不想再强调了在之前的那篇《回答阿里社招面试如何准备顺便谈谈对于Java程序猿学习当中各个阶段的建议》中LZ就说过JVM那本书甚至比《Thinking in java》还重要这已经足见LZ多么看重JVM了。 当然了只是LZ看重当然没什么卵用但只要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 View Code 怎么样是不是被吓到了这么多包而且还这么多陌生的包名有的连见都没见过这特么怎么玩 不要着急LZ先带你把这些包给分下级别LZ将这些包一共分为四个级别。 第一级别精读源码 该级别包含的包如下
java.io java.lang java.util View Code 精读源码这是要求最高的级别。但是要求你精读源码并不意味着这些类就是最重要的。而是因为LZ觉得这些类比较常用而且比较简单看看它们的源码有助于锻炼你看源码的感觉也了解一下大神们写代码的风格。 看这些源码的目的更多是为了增加你的阅读代码能力。而且LZ这里必须要强调一下像Exception和Error这一类的就不用读源码了亲。 其实上面三个包都有一个共同点那就是这三个包基本上都是你最常用的了。lang包不用说了你随便写点啥都得用到io包和util包也是你平时读写文件和使用数据结构必不可少的。 看源码从这些常用的包下手找手感LZ个人觉得再合适不过。 第二级别深刻理解 该级别包含的包如下
java.lang.reflect java.net javax.net.* java.nio.* java.util.concurrent.* View Code 深刻理解这个看似比精读源码要求低的级别其实恰恰是最重要的。这个级别要求的类全都是一些进阶到高级所必须了解的。 当然了这里要强调一点的是LZ说这些类要深刻理解而没说要看它们源码并不是说这些类的源码不能看或者看了没用。而是这些类的源码往往非常复杂要了解清楚细节花费的时间是非常多的因此花费巨量的时间去研究这么复杂的代码其实没必要的。 不过如果你在使用这些类的过程中遇到了问题这个时候如果看它们源码可以解决的话那就不要再矜持了果断看看源码解决你的问题吧这是最适合的看源码的契机了。 小小的透露一下LZ看过的JDK源码基本上全是这么看过来的。遇到了问题不要百度和谷歌看源码能解决你90%的问题。 此外看到这四个包的名字不难看出它们各自代表了什么。reflect代表了反射net代表了网络IOnio代表了非阻塞ioconcurrent代表了并发。 这四个家伙可以说每一个都够面试官问上半天的而且这四个包的内容如果你要深刻理解的话其实还牵扯了很多其它的知识。 举个例子反射你要了解清楚的话你是不是要搞明白JVM的类加载机制网络IO要搞清楚的话你是不是要清楚TCP/IP和HTTP、HTTPS包括并发包如果你要搞清楚的话是不是要了解并发的相关知识 因此这四个包要彻底搞清楚还是需要花费一定时间和精力的。 但是请相信LZ这绝对是值得的甚至可以说这四个包用的够不够叼基本决定了一个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 View Code 会用即可这个级别的要求很显然了就是会用就可以了。这些包大部分都是在特定的情况下会用到但却不会时刻用到。 就像sql包和transaction包就是操作数据库时用到的。而xml、dom和sax这些都是操作xml时用到的。其它的包也都是类似的有使用注解时用的有远程方法调用时用的也有涉及到加密时用到的等等。 这些包在面试时一般不会问到所以它们的重要性自然要低很多而且也不太需要刻意的去学用到了研究一下会用即可。 第四级别请无视它 该级别包含了所有以上没有提到的包。 这个级别就更不用解释了到现在还没提到的包基本上可以忽略因为你基本上不太可能用到它们比如swing、awt这些玩意儿。 什么你说你经常用它们 如果真的是这样的话那么LZ只能遗憾的告诉你赶紧跳槽吧你待在这公司没啥前途的0-0。 第三部分Java的开发工具 这些开发工具主要就是辅助你开发的了javac应该是最常用的一个了虽然你几乎不用手动执行它。 此外其实还有一些比较实用的工具可以帮助你排查问题。而且有的面试官也会问你这类问题比如问你平时都用什么工具排查问题。 LZ觉得比较实用的几个工具主要有jmap、jconsole、jstack、jvisualvm至于这几个工具有什么作用LZ这里就不提了如果你要了解这些命令的详细内容可以去谷歌或者官网上找还是非常好找的。 当然如果你有兴趣的话也可以自己去JDK的bin目录下找找看有没有什么更好玩的工具。 小结 好了到这里基本上就把“玩好JDK”这件事说完了。 总的来说第一级别和第二级别是最重要的。 更简单的说可以把第一级别的那些包称作基础第二级别的那些包称为进阶。至于第三级别和第四级别的那些包就没什么可说的了。 当然了最重要的还是那万年不变的JVM请记住了JVM才是你Java根基的根本就是再牛逼的类没了JVM它也就是一个无用的class文件而已。 如果你想拥有扎实的Java基础那就抓紧玩好JDK吧。玩好JDK以后不要忘了学个一技之长就可以来LZ的公司面试咯。