• [技术干货] Java的安装
    本帖最后由 华为开源镜像站 于 2017-11-20 22:48 编辑 首先,下载JDK, 地址为: http://www.oracle.com/technetwor ... ownloads/index.html, 由于Windows和Linux的配置有一定差异,因此分别进行说明。 Windows 从官网下载JDK,如下图所示,直接运行exe可执行程序,默认安装即可。(备注:路径可以选择其他盘符,但是不建议路径中包含中文及特殊字符) 5185 安装好之后需要设置环境变量,以jdk1.8.0_151版本为例,进入到系统环境变量的管理界面:右键计算机图标=>属性=>高级系统设置=>环境变量 5186 在系统环境变量中,点击新建,输入变量名: JAVA_HOME, 输入变量值:C:\Program Files\Java\jdk1.8.0_151(地址请根据自身情况进行修改) 5188 打开PATH变量,在变量值的最前边添加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 5189 新建变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 5187 Linux 从官网下载JDK,如下图所示,也可以通过curl命令下载,命令如下:[code]curl -O http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz[/code]5184 通过如下命令将下载后的压缩包解压至特定的目录,以/usr/local为例: [code]tar -zxvf -C /usr/local/ jdk-8u151-linux-x64.tar.gz[/code]在命令行中输入vim /etc/profile,编辑文件,在文件末尾增加如下的内容: [code]export JAVA_HOME=/usr/local/jdk-8u151 export JRE_HOME=/usr/local/jdk-8u151/jre export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin[/code]然后执行 source /etc/profile命令使设置生效。 验证JAVA windows打开CMD命令窗口,Linux打开终端端口,输入java -version命令,如果出现如下提示则Java安装成功。 5183
  • [技术干货] java web容器异步化改造是否必要?
    本帖最后由 mosquitoflying 于 2017-11-26 22:31 编辑javaweb容器传统的业务系统代码调用api的方式都是blocking的,这样方便开发和维护。但是一旦并发的业务急剧增加,这IO种方式就非常被动。因为一般请求从接收到执行完毕,都会占用一个线程,即使在IO阻塞的时候,都不会释放线程资源。一个线程本身占用的内存就接近1M,加上业务逻辑中分配的内存,线程资源消耗实际上是非常高的。当处理高并发业务的时候,就需要远多于cpu核数的线程数在支撑。这些线程本身的调度就很成问题。那么是否有必要使用异步化方式来改造当前的业务逻辑呢?最近项目中需要评估异步化带来的收益。做了一个简单的对比测试。尝试使用异步servlet的方式,改造同步servlet。同步的时候我们增加前端接收线程数到4000,异步的时候保持前端接入线程数为256,而内部处理线程为1024.令我们感到奇怪的是,增加线程的方式反而效果更好,8K小对象平均性能要高7%左右。为什么异步版本比同步版本性能还下降了呢? 性能分析 我们进行了时间采样分析,发现了一些现象。 1、业务逻辑内部的阻塞式调用的接口延迟增大了。 以前访问数据库的调用的时间大约是25ms,现在增加到大约40ms+。 2、异步版本波动较大,总体平均下来,性能要差一些。 3、虽然使用异步的servlet,但是前端的业务逻辑传递到异步servlet之后,实际上还是需要下层的业务线程池继续处理的。那么必然增加了一次线程切换的开销。因此我们没有观察到高并发压力下,cpu context switch的明显变化。 那么是否说明异步化改造没有收益呢?其实不然。 异步化改造带来的好处主要有3点 1、减少线程切换 2、将前端压力尽快传导到后端 3、减少资源开销 我们目前异步化改造实际上以上3点都没有做到。特别是内部任然存在blocking的位置,而且往往blocking的位置在高并发压力时性能还会下降。 因此需要进一步优化,将业务内部所有blocking的位置全部打通,保证在这些点上不会随着并发压力增加非线性的增加,这样预计异步化改造必然会收益。 (我们在mock环境中做了一个测试,将系统中可以blocking的位置进行异步化改造,最终对比得到完全异步化之后大约有40%的性能提升。)
  • 【消息通知服务】【SDK】【JAVA】 SMN的消息通知服务,真的真的很不错
    本帖最后由 追风猎手 于 2017-11-8 17:58 编辑消息通知服务的SDK 重磅来袭,欢迎各路英雄豪 杰 提MR进行改进 SDK真的, 真的,真的很不错 SDK使用示例代码 https://github.com/SimpleMessageNotification/smn-sdk-java/tree/master/smn-sdk-java-example SDK使用WIKI https://github.com/SimpleMessageNotification/smn-sdk-java/wiki SDK源码地址 https://github.com/SimpleMessageNotification/smn-sdk-java/tree/master/smn-sdk-java
  • 如何突破JAVA程序员的分水岭
    本帖最后由 yd_14752044 于 2017-10-31 10:42 编辑第一阶段:一年之内的JAVA从业人员 这个阶段是你成长极快的阶段,而且你可能会经常加班。但是加班不代表你就可以松懈了,永远记得我说的那句话,从你入行那一刻起,你就要不停的学习。在这一年里,你至少需要看完《Java编程思想》这本书。这本书的内容是帮助你对于Java有一个更加深入的了解,是Java基础的升级版。这本书很厚,当初看这本书,我花了整整三个月。正常速度的话,应该可以在半年左右看完。我这里不要求过高,只要你在一年以内把这本书看完即可。当然了,我所说的看完,是充分吸收,而不是读一遍就完事了,因此有些内容你可能会看不止一遍。总而言之,这个阶段的核心学习思想就是,在工作中实践,并且更加深入的了解Java基础。 第二阶段:1年到2年的从业人员,已经对Java有了一个更加深入的了解。 但是对于面向对象的体会可能还不够深刻,编程的时候还停留在完成功能的层次,很少会去考虑设计的问题。于是这个时候,设计模式就来了。我当时看的是《大话设计模式》这本书,并且写了完整版的设计模式博客。因此,我要求大家,最多在你工作一年的时候,必须开始写博客,而设计模式就是你博客的开端。 请记住,我所提的基本都是最低要求,因此不要有任何松懈的心理,否则五年后,你不要去羡慕别人高于你的工资,也不要去羡慕别人进入了某公司。这一年,你必须对于设计模式了如指掌,《大话设计模式》可以作为你的开端。此外,设计模式并不是你这一年唯一的任务,你还需要看一些关于代码编写优化的书。比如《重构 改善既有代码的设计》,《effective java》。总而言之,这个阶段,你的核心任务就是提高你的代码能力,要能写出一手优雅的代码。 第三阶段:工作2-3的JAVA开发人员 请记住,你还嫩的多。这个阶段,有一本书是你必须看的,它叫做《深入理解Java虚拟机》。这本书绝对是Java开发者最重要的书,没有之一。在我眼里,这本书的重要性还要高于《Java编程思想》。这本书的内容是帮助你全面的了解Java虚拟机,在这个阶段,你一定已经知道Java是运行在JVM之上的。所以,对于JVM,你没有任何理由不了解它。 另外,在过去2年的工作当中,你肯定或多或少接触过并发。这个时候,你应该去更加深入的了解并发相关的知识,而这部分内容,我比较推荐《Java并发编程实战》这本书。只要你把这本书啃下来了,并发的部分基本已经了解了十之六七。与此同时,这个阶段你要做的事情还远不止如此。这个时候,你应该对于你所使用的框架应该有了更深入的了解,对于Java的类库也有了更深入的了解。 因此,你需要去看一些JDK中的类的源码,也包括你所使用的框架的源码。这些源码能看懂的前提是,你必须对设计模式非常了解。否则的话,你看源码的过程中,永远会有这样那样的疑问,这段代码为什么要这么写?为什么要定义这个接口,它看起来好像很多余?由此也可以看出,这些学习的过程是环环相扣的,如果你任何一个阶段拉下来了,那么你就真的跟不上了,或者说是一步慢步步慢。而且我很负责的告诉你,我在这个阶段的时候,所学习的东西远多于这里所罗列出来的。 因此千万不要觉得你已经学的很多了,我所说的这些都只是最低要求,不光是我,很多人在这个时间段所学习的内容都远超本文的范围。如果你不能跟上节奏的话,若干年后,如果不是程序猿市场还不错的话,你很可能不仅仅是工资比别人低,公司没别人好,而是根本就找不到工作。总而言之,这个阶段,你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容),也就是JVM和JDK的相关内容。而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档。另外,还有一种学习的方式,在2年这个阶段,也应该启用了,那就是造轮子。不要听信那套“不要重复造轮子”的论调,那是公司为了节省时间成本编造出来的。重复造轮子或许对别人没有价值,因为你造的轮子可能早就有了,而且一般情况下你造出来的轮子还没有现存的好。 但是对别人没有价值,不代表对你自己没有价值。一个造轮子的过程,是一个从无到有的过程。这个过程可以对你进行系统的锻炼,它不仅考察你的编码能力,还考察你的框架设计能力,你需要让你的轮子拥有足够好的扩展性、健壮性。而且在造轮子的过程中,你会遇到各种各样的难题,这些难题往往又是你学习的契机。当你把轮子造好的时候,你一定会发现,其实你自己收获了很多。所以,这个阶段,除了上面提到的了解JVM、JDK和框架源码以外,也请你根据别人优秀的源码,去造一个任何你能够想象出来的轮子。 第四阶段:参加工作3–4年的JAVA开发人员,阶段的学习往往会比较多样化。 1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的。 2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的。 3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的。 4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的。 5.Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知。 因为在前3年的过程中,你肯定或多或少接触过一些其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。这些技术,你能精通任何一项,都将是你未来面试时巨大的优势,因此如果你对某一项技术感兴趣的话,这个时候可以深入去研究一下。这项技术不一定是你工作所用到的,但一定是相关的。而且在研究一门新技术时,切忌朝三暮四。有的同学今天去整整大数据,搞搞Hadoop、hbase一类的东西。过不了一段时间,就觉得没意思,又去研究分布式缓存,比如redis。然后又过不了一段时间,又去研究分布式计算,比如整整Mapreduce或者storm。结果到最后,搞得自己好像什么都会一样,在简历上大言不惭的写上大数据、分布式缓存、分布式计算都了解,其实任何一个都只是浮于表面。到时候面试官随便一问,就把你给识破了。 一定要记住,作为一个程序猿,平日里所接触的技术可能会很多,但是想要让一门技术成为你的优势,那么一定是你对这门技术的了解强过绝大多数人才行。因此在这个阶段,你就不能再简单的去学习前3年的内容了,虽然前面的学习如果还不够深入的话依旧要继续,但这个时候你应该更多的考虑建立你的优势,也可以称为差异性。差异性相信不难理解,就是让你自己变得与众不同。你前面三年的学习足够你成为一名基本合格的Java开发者,但你离成为一名优秀的Java开发者还有很大的距离。 所谓优秀,即能别人所不能。而你前三年所学习的内容,是很多做过几年的Java开发都能够掌握的。那么为了让自己有差异性,你就需要另辟蹊径,找一个方向深入研究下去,以期在将来,你能够成为这个领域的专家,比如分布式计算领域的专家,大数据领域的专家,并发领域的专家等等。此外,你除了建立你的差异性之外,还要去弥补你基础上的不足,直到现在,我都没有提及基础知识。原因是基础是很枯燥无味的,学的太早不仅容易懵逼,而且懵逼的同时还容易产生心理阴影,以至于以后再不想去研究这些基础。但基础又是你深入研究一些领域时所必须掌握的,比如你去研究分布式计算,你不懂算法你玩个毛毛?比如你去做分布式缓存,你对计算机系统的内存不了解,你如何去做缓存? 如果你的基础本来就非常强,那么恭喜你,相信你在之前的工作中已经充分体会到了这些基础对你的帮助。但我相信大部分人的基础都很薄弱,哪怕是科班毕业的人,很多人也不敢说自己当初的基础学的多么强大,比如算法、计算机系统原理、编译原理这些。但是每个人时间都是有限的,而且这些基础的书籍每一本读下来,没个一年半载的,还真拿不下来,因此还是要有所抉择的。虽然艺多不压身,但问题是艺多是有代价的,是需要你付出时间和精力的,而我个人更赞成在同等代价的情况下获取最大的收获。 首先,我比较推崇的基础书籍有三本,分别是《深入理解计算机系统》,《tcp/ip详解 卷一、二、三》,《数据结构与算法》。其中TCP/IP有三本书,但我们这里把这三本看成是一本大书。这三本分别适合三种人,《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。而《数据结构与算法》这本书,则比较适合做计算研究工作的人,比如刚才提到的分布式计算。另外,我要强调的是,这里所说的适合,并不是其它两本对你就没有用。比如你做Java Web和APP后端开发,《tcp/ip详解 卷一、二、三》这本书对你的作用也是很大的。这里只是分出个主次关系而已,你要是时间足够的话,能把三本都精读那当然最好不过了。 但如果时间有限的话,那么就先挑对你帮助最大的书去读。理论上来讲,这一年你能把这三本其中一本精读下来,就已经非常厉害了。有了基础,有了前面的工作经验,你就可以去开拓属于你的领域了。在这一年里,一定要规划好自己的领域,建立好自己的优势,制造出差异性。如果你对自己的领域不够清晰的话,随着你工作的时间日益增多,你接触的技术会越来越多,这个时候,你很容易被淹死在技术的海洋里,看似接触的技术越来越多,会用的也越来越多,但你毫无优势。有的同学可能会问,“我,我也不知道我的领域是什么啊?怎么办呢?”对于这种人,我只想说,“卧槽,这还问我?要不干脆我替你学习得了,好不好?” 第五阶段:参加工作4–5年JAVA开发人员,技术上你应该已经遇到瓶颈了。 如何突破JAVA程序员的分水岭 这个时候不要着急提高自己的技术,已经是时候提高你的影响力了,你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人。当然,你也可以去Github创建一个属于你的开源项目,去打造自己的产品。 这次的开源项目不同于之前的造轮子,你这个时候是真的要去尽量尝试造出来真正对别人有价值的轮子。技术学到这个阶段,很容易遇到瓶颈,而且往往达到一定程度后,你再深入下去的收效就真的微乎其微了,除非你是专门搞学术研究的。然而很可惜,大部分程序猿做不到这一步,那是科学家做的事情。这个时候提高影响力不仅仅是因为技术上容易遇到瓶颈,更多的是影响力可以给你创造更多的机会。程序猿在某种程度上和明星很像,一个好的电视剧和电影就可以成就一批明星,程序猿有的时候也是,一个好的项目就可以成就一群程序猿。比如国内几个脍炙人口的项目,像淘宝、支付宝、QQ、百度、微信等等。这每一个项目,都成就了一批程序猿。我敢说,这里面任何一个项目,如果你是它的核心开发,光是这样一个Title,就已经是你非常大的优势。更何况还不止如此,Title说到底也是个名头,更重要的是,这种项目在做的时候,对你的历练一定也是非常给力的。 而你如果想要参与这样的项目,除了靠运气之外,影响力也是很重要的一个手段。比如你在分布式计算领域有一定的影响力,那么如果有什么好的关于分布式计算的项目,对方就很可能会邀请你。就算人家不邀请你,你自己主动去面试的时候,对方如果知道你在这个领域的影响力,也肯定会起到很大的作用,而这个作用,甚至可能会超过你现在的技术能力。所以,在这个阶段,你最大的任务是提高自己的影响力,为自己未来的十年工作生涯那一天做准备。如果你能够靠你的影响力和以前积累的技术,参与到一个伟大的项目当中,那么你后面的五年也就有着落了。当然了,我现在满打满算,做程序猿也就4年半不到,因此关于4年到5年这一部分,我的见解不一定是对的,就算是对的,也不一定是适合任何人的。 所以,希望大家自己有的判断力,去决定到底该如何度过这一年。结语本文到此就基本结束了。我所说的,可能有些是对的,有些是错的,有些是适合你的,有些是不太适合你的,你要自己能够判断。其实你在生活和工作当中也是一样的,你身边的人形形**,有的人你喜欢,有的人你很讨厌。但其实你喜欢的人也有缺点,你讨厌的人也有优点。你要学会从你讨厌的人身上学会他的优点,千万不要一棒子打死,这只会让你失去很多学习成长的机会。好了,说了这么多了,就到此为止吧,希望本文可以帮助到作为程序猿或即将成为程序猿的你。
  • 最热门的3个基于Java的Blockchain库
    本帖最后由 码小玩 于 2017-10-26 17:19 编辑[indent]原文:The Top 3 Blockchain Libraries for Java Devs 作者: Boyko Dimitrov 译者:Teixeira10 [/indent]【译者注】在本文中,作者介绍了三个使用区块链的Java项目,以及每个项目适用的场合,供开发者根据自己的需求进行选择。以下为译文: 大家应该都听说过比特币、以太币或其他加密货币,这些名字在新闻中经常出现,但是作为Java开发人员,你们知道如何轻松地与Blockchain技术进行交互吗?下面是可以利用Blockchain的三大Java项目。这个列表是基于GitHub存储库的星序排列的。非常感谢你的评论和意见。 BitcoinJ你有没有觉得这个名字很有描述性呢?如果你想知道如何创建一个比特币钱包,并且管理节点之间的事务,那么你应该尝试一下BitcoinJ。这个项目有一个不断扩大的社区,里面包含非常好的文档资料,这对每个开发人员都是非常有利的。当然,作为一个试图获得声望的开源项目,它也存在一定的局限性。现在已经有几个已知的开放漏洞的安全问题,以及可扩展性问题。不过,如果你想了解比特币协议是如何运作的,这个项目将是非常有帮助的。个人意见:这并不适用于生产应用。 Web3j一个词——Ethereum(以太币),这是基于尖端技术的第二大加密货币。Web3j项目允许你使用Ethereum区块链,同时不必为平台编写集成代码。同样,核心功能是创建钱包,管理事务,以及智能合约包装器。Ethereum项目的一部分是一种称为Solidity的特殊语言,它是创建智能合约的实际标准。如果你想避免使用智能合约的底层实现细节,那就使用Web3j的智能合约包装器。如果这对一名开发人员来说还不够,那我需要告诉你,它包含很多好的文档和大量的例子,这也是使web3j成为我个人最爱的原因。 HyperLedger FabricHyperLedger Fabric是企业会用到的。Linux基金会的框架是区块链解决方案的主干。所以无论你想创建一个简单的PoC,还是一个生产应用程序,它都是一个强大的工具。该项目正在由Linux基金会成员积极组织开发。它的重点是创建和管理智能合约。主要特点是: [indent]管理共享机密信息的渠道 支持政策事务 一致地向网络中的对等节点交付事务 [/indent]如果你在软件区块链堆栈中包括了HyperLedger Fabric,那么我的建议是熟悉其他的HyperLedger项目。根据你的需要,可以选择各种不同的HyperLedger项目,这些项目将保证一个连贯的、可扩展的、易于维护的区块链基础设施。对于许多人来说,区块链将改变整个互联网,难道你不想成为其中的一部分吗? 与其他Java区块链项目一起分享、评论和扩展这个列表!
  • 谁将会杀死Java?
    本帖最后由 Jay 于 2017-10-13 10:48 编辑Java 是这个星球上最为流行的编程语言之一,但这方面的竞争正愈演愈烈。下面我们将讲述 Java 可能遭遇滑铁卢的地方,以及可以做些什么来预防它的衰退。2017 年 9 月的 TIOBE 指数将 Java 列为当月较为流行的语言。其实,它已经名列前三甲很多年了。Stack Overflow Developer Survey 2017将 Java 列为继 Javascript 和 SQL 之后第三常用的编程语言(实际上,过去四年它都保持着这名次)。不说这些结果是如何产生的,亦或者这结果是否反映了现实世界中的情况,我们不能否认的是,Java 在多个环境中仍然是一种流行语言。但是,Java 总有一天会死。世无定事,没有什么可以天长地久。编程语言死亡的真正定义是没有人再使用它——但这样的情况很难发生。即使是老朽且不被广泛使用的语言(例如,你是否听说过 Modula-3?),仍然在被使用、维护,或者至少会演变成其他的东西。当然,这是一个渐变的过程,怎么发生的方法不定。从实际出发,假设编程语言在它不再被用于新项目时,就意味着它的死亡,但是它可能依然存活在许多遗留项目上(COBOL 就是一个完美的例子)。最终这结局也将降临到 Java 头上,那么谁会杀死它?让我们来分析选项。在以《What Killed Smalltalk Could Kill Ruby Too》为主题的演讲中,Robert “Uncle Bob” Martin 说,Smalltalk 被杀的原因是,它太容易造成混乱,并且它的傲慢自大会导致不专业的实践方法,如缺乏测试驱动开发(TDD)。在任何语言中你都可以搞得一团乱。当然,在某些语言中,比其他语言更容易导致混乱——例如,在动态类型语言中,我们可以随时更改变量的类型——但是我们在 Java 中没有这个问题。此外,在 Java 社区中很多人采用的良好实践,比如设计模式和 TDD,有助于我们制作更好的软件。所以让我们来探讨另一个选项。Java 是面向对象的语言。如果其他(新的)范式接管了怎么办?如果面向对象的编程变得过时了怎么办?好吧,这可能性并不大——基本原理已经有很长一段时间没有真正改变过了。诸如结构化,功能性和面向对象编程的重大创新发生在 20 世纪 50 年代,60 年代以及甚至 70 年代,但从那以后,没有什么举足轻重的事发生。但是,在过去十年中,却有很多新的语言问世,这些语言有着现代的语法以及新功能的框架。那么,没有现代语法和新的功能是否会导致 Java 的死亡呢?不,我不这么认为。你还记得(或听说过)EJB 2.0 及其 Entity Beans 吗?它们很可怕,但是像 Rod Johnson 和 Gavin King 这些 Java 社区的成员却以 Spring 和 Hibernate 等框架回应。以类似的方式,虽然 Java 不是一个功能齐全的语言,但是由于有 Vavr 这样的库,我们可以使 Java 更加功能化。我的意思是,Java 缺少的某些东西,有人会通过创建(框架,工具,规范,无论什么)来填补这个空白。那么 Java 会不会因为另一种编程语言而死亡呢?我们以 JavaScript 为例。毕竟 JavaScript 正在占领这个世界,对吧?我们可以在后台使用 Node.js,类似于移动设备上的 React Native 或 Ionic,我们甚至不必提及在前端的所有竞争选项。但是,至少在企业软件中,我没有看到 JavaScript 将要替代 Java 的趋势。JavaScript 在企业领域中没有取得成功的框架或工具。它也没有与 Java 虚拟机(JVM)相当的东西,Java 虚拟机(JVM)依然是大型和关键任务软件的首选平台。那么 Kotlin 呢?Kotlin 语言首次出现在 2011 年,并且最近 Google 宣布在 Android 上对 Kotlin 提供一流的支持。Kotlin 正在逐渐被知名公司采用,并且不局限于在这些公司的 Android app 上(例子)。除了现代化的功能,Kotlin 也是一种开放源代码的语言,它由一家生产最佳 java ide 的公司提供支持。所以,如果你问我的话,我的回答是,是的,Kotlin 看起来像是(在遥远的未来)替代 Java 的一个很好的候选者。当然,Java 也可能被一种或多种语言所替代。哪些呢?我不确定,而且我敢说现在也没有人知道这个问题的答案。我所能确定的是,没有任何语言能够自主地杀死 Java。不借助任何外力,就此而言。能够杀死 Java 的刀子在于它无法满足市场的需求。编程语言是构建解决计算机问题的应用程序的工具。如果某编程语言提供抽象、模型、工具和框架,使你可以更有效率或创建比 Java 更高效的代码,你会选择哪种语言呢?即使是在 Java 版本之间,如果让你在 Java 1.4 和 Java 9 之间进行选择,那么你会选择 Java 1.4 吗?你会放弃用 lambdas 或泛型工作的机会吗?我不这么认为。你会需要较新版本的功能。在这些年来,由于已检查异常、内部类、getter 和 setter 等等方面,Java 被认为是一种冗长又笨拙的语言。直到 Java 7(有些人认为是 Java 8)才开始好转。然而,Java 7 于 2011 年发布,比 Java 1.4(2002 年发布)晚了九年。在这个时代,这是不能接受的,并且可能会导致恶性循环。仔细查看 TIOBE 页面上的 Java 图表。尽管 Java 大多数时候位居前三,但有明显的下降趋势,表明它正在失去市场份额。这种趋势在所有语言中都很普遍。最可能的原因是编程语言的数量在不断增加,应用程序越来越多地被以多种语言编写。因此,竞争比以往任何时候都要激烈。如果我们认为其他语言比这种语言更好,那么它就不再受欢迎,我们也不会将这种语言教给新一代的开发人员。新的教程、课程和书籍将不会再被创造。社区中的宝贵成员将被其他技术吸引走。该语言将不会用于新的环境。将导致减少语言的流行度。Mark Reinhold,Oracle Java 平台组首席架构师,提出的新的六个月发布计划,是向前推进 Java 并迈向未来的重大一步。用他的话说(就特征驱动的版本):[indent]这种方法可以在早期采用者进行彻底的检查和测试后,以高水平的质量提供大的新功能。然而,不足之处在于,较小的 API、语言和 JVM 功能只有在大功能准备就绪时才能实现。这是在本世纪之交前后几十年时间里达成的一个可接受的折中方案,当时 Java 仅与几个以类似的步伐演进的平台竞争。然而,如今,Java 在与许多以更快速度发展的平台一起竞争。[/indent]最后一段话很多都是事实。但是,这不仅仅是 Oracle 的工作。社区也必须保护 Java。怎么做?我的一些想法:[*]不要傲慢(不要认为 Java 太大而不会失败) [*]促进良好的开发实践方法 [*]继续发布超棒的框架、工具等 [*]支持 JSR [*]帮助教学和推广 Java 语言 [*]在新环境中尝试 Java否则,Java 如果无法跟上时代的步伐,那么最终将会被后浪拍死在沙滩上。-译文链接:http://www.codeceo.com/article/what-will-kill-java.html翻译作者:码农网 – 小峰
  • 关于Java 9,这里有你需要知道的一切
    本帖最后由 yd_87160914 于 2017-9-30 17:17 编辑Java 9 - 正式的名称是 Java 平台标准版版本号 9 - 终于发布了,Java 开发工具包(JDK) 也已经可供开发者下载。 新版本增加了几个重要且富有争议的功能,同时它也是一直以来遵循 Java 版本命名规范和发布周期的最后一个版本。 Java 9 的关键新特性 在 Java SE 8 发布将近三年后,Java SE 9 终于发布,它带来几个重大的架构变化,以及一系列的改进。 Java 9 的模块化是颠覆性 基于 Jigsaw 项目,这个新的富有争议性的模块化能力肯定会引来最前沿 Java 开发者的兴趣和尝试,即使会有更保守的开发者决定等待模块化的成熟。 模块化-以 Java 平台模块系统的形式-将 JDK 分成一组模块,可以在运行时,编译时或者构建时进行组合。模块化被称为一个“可传递”的更改,它支持对模块间依赖的理解。 Java 9 的模块化能让开发者更容易的组合和维护复杂的应用程序。同时,它也使 Java 在改进安全和性能的同时能够更好的适配到更小的设备中。 Java 9 的模块化包含应用打包,JDK 自身模块化,以及将源码重新组织成多个模块。构建系统在构建时编译模块和识别模块边界的能力也得到增强。JDK 和 Java 运行时环境(JRE)的镜像经过重构以处理模块化。另外,JavaFX UI 控件和 CSS APIs 现在也支持模块化方式访问。 Java 9 支持很多配置,因此,可伸缩性,安全性和应用程序性能应该得到改善。让 Java 更容易适配到小型设备中是模块化的关键推动力。 通过模块化,开发者将能够更好的使用 Java SE(标准版本)和 Java EE(企业版本) 构建和维护函数库和大型应用。但在 Java9 开发期间,Oracle,IBM,Red Hat 和其他公司关于如何在 Java 平台实施这样的重大改动有很大的分歧。模块化系统本身在五月份被否决,取得一定进展后,在六月份第二次投票中才获得批准。 即使主要的 Java 供应商之间已经取得了一致,但关于模块化能给 Java 开发者带来多大好处,专家们褒贬不一。无论如何,Java 9 现在已经支持模块化了。 为了更容易的将代码迁移到模块化的Java 9,Java 9 允许开发者对类路径中的代码进行非法的反射访问,这一能力被JRE 用来搜索类和资源文件,当然,这个能力在 Java 9 之后将会禁用。 改进的 Java 9 代码编译 Java 9 的升级带来了几个代码编译的新功能,其中最主要的是 AoT(ahead-of-time)编译。虽然仍处于试验阶段,但这个功能使得 Java 应用在被虚拟机启动之前能够先将 Java 类编译为原生代码。此功能旨在改进小型和大型应用程序的启动时间,同时对峰值性能的影响很小。 JIT(Just-in-time)编译器速度很快,但是 Java 项目现在变得很大很复杂,因此 JIT 编译器需要花费较长时间才能热身完,而且有些 Java 方法还没法编译,性能方面也会下降。AoT 编译就是为了解决这些问题而生的。 但是 Java 技术供应商Excelsior 的营销总监 Dmitry Leskov 担心 AoT 编译技术不够成熟,希望 Oracle 能够等到 Java 10 时有个更稳定版本才发布。 Java 9 同时还提供了 Oracle 智能编译部署的阶段二功能。这个功能包括改进了 s javac 工具的稳定性和可移植性,从而能够被 JVM 默认使用。这个工具也将会做得更通用,从而可以使用在除 JDK 之外的其他大型项目中。JDK 9 还更新了 javac 编译器以便能够将 java 9 代码编译运行在低版本 Java 中。 另一个新的同时也是试验性的功能是 JVMCI(Java-level JVM Compiler Interface)。通过这个接口,用Java 编写的编译器可以被 JVM 当作动态编译器使用。JVMCI的 API 提供访问虚拟机结构,安装编译过的代码,以及**JVM 编译系统中的机制。 使用 Java 编写的JVM 编译器相比已有的用 C 或者 C++ 编写的编译器,能够在保持高质量的同时更容易维护和改进。因此,使用 Java 编写的编译器本身应该更容易维护和改进。其他使用 Java 编写编译器的尝试包含 Graal 项目和 Metropolis 项目。 新的编译器控制能力旨在为 JVM 编译器提供细粒度和方法上下文相关的控制,让开发者在运行时不降低性能的前提下修改编译器控制选项。这个工具还支持为 JVM 编译器存在的 bug 提供解决方法。 Java 9 终于有了 REPL Java 9 的另一个特性是拥有了 REPL(read-eval-print loop)工具,这是另一个 Java 的长期目标,在 Kulia 项目中经过多年研发后终于在 Java 9 中得以实现。 Java 9 的 REPL 名为 jShell,以交互式的方式对语句和表达式进行求值。开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。 命令行工具的功能包含 tab 自动补全和自动添加分号。jShell API 支持在 IDE 和其他工具中使用 jShell 功能,虽然这个工具本身不是 IDE。 REPL 的缺失是高校想要把 Java 从学校课程中剔除的一个原因(像 Python 和 Scala 之类的语言早就有 REPL 了)。但 Scala 语言的创始人 Martin Odersky 质疑 Java 中 REPL 的作用,他说Java 是面向语句的,而 REPL 是面向表达式的。 Java 9 增强了 Steam API Java 的 Steam 让开发者能够快速运算,从而能够有效的利用数据并行计算。Java 8 提供的 Steam 能力能够利用多核架构实现声明式的数据处理。 在 Java 9 中,StreamAPI 通过新增方法, 实现有限制的从 Stream 中添加或者移除元素,遍历 Stream 中的元素,以及通过扩展 Java SE API 集合实现从空值创建流的功能。 Java 9 支持代码缓存的分割 JDK 9 支持将代码缓存分割成段,从而提高性能并实现扩展功能,例如细粒度锁。由于使用专门的迭代器忽略非方法代码,分离非方法,剖析和非剖析代码,结果扫描时间将得到改进。某些基准的执行时间也得到改进。 通过 Nashorn 项目 Java 9 更好的支持 Javascript Nashorn 项目在 JDK 9 中得到改进,它为 Java 提供轻量级的 Javascript 运行时。Nashorn 项目跟随 Netscape 的 Rhino 项目,目的是为了在 Java 中实现一个高性能但轻量级的 Javascript 运行时。Nashorn 项目使得 Java 应用能够嵌入 Javascript。它在 JDK 8 中为 Java 提供一个Javascript 引擎。 JDK 9 包含一个用来解析 Nashorn 的 ECMAScript 语法树的 API。这个 API 使得 IDE 和服务端框架不需要依赖 Nashorn 项目的内部实现类,就能够分析 ECMAScript 代码。 Java 9 引入 HTTP/2 客户端API Java 9 引入了 beta 版的 HTTP/2 客户端API,升级了 Web 核心 HTTP 协议,这个 API 同时也支持 WebSocket。 HTTP/2 API 可以用来代替 HttpURLConnection API,后者存在一些缺点,包括当初是为现在已经失效的协议所设计,早于 HTTP/1,接口定义太抽象以及使用起来不容易。 Java 9 改进了对 HTML5 和Unicode 的支持 在 JDK 9 中,Javadoc文档工具经过增强现在支持生成 HTML5 标记文档。Unicode8.0 编码标准也得到支持,该标准新增 8000 个字符,10个块和 6 个脚本。 Java 9 新增 DTLS 安全API 为了安全,Java 9 新增支持 DTLS(Datagram Transport Layer Security)的 API。这个协议用来在客户端服务器通信中防止窃听,篡改,消息伪造等。客户端和服务端模式都提供了实现。 Java 9 废弃和移除的 API Java 9 废弃或者移除了几个不常用的功能。其中最主要的是 Applet API,现在是标记为废弃的。随着对安全要求的提高,主流浏览器已经取消对Java 浏览器插件的支持。HTML5 的出现也进一步加速了它的消亡。开发者现在可以使用像 Java WebStart 这样的技术来代替 Applet,它可以实现从浏览器启动应用程序或者安装应用程序。同时,appletviewer 工具也被标记为废弃。 Java 9 还废弃了并行标记扫描(CMS,Concurrent Mark Sweep)垃圾回收器,在未来的发布版本中将进一步停止支持。其目的是加速 **Spot 虚拟机中其他垃圾回收器的发展。低暂停 G1(low-pause G1) 回收器将是 CMS 的长期替代品。 同时,之前在 JDK 8 中废弃的垃圾收集组合在 JDK 9 中已经删除。这包括很少使用的组合,例如增量 CMS,ParNew + SerialOld,DefNew + CMS,这些给垃圾收集器的代码库增加了额外的复杂性。 Java 9 也忽略了 Java 导入语句的警告,以有助于大型代码库维持更干净的 lint 警告。在这些代码库中,废弃的功能通常还需要继续使用一段时间,代码中导入废弃类或者方法,如果是开发者有意为之,并且通过注解抑制这些警告信息,那么警告信息将不会显示出来。 在 Java 9 中同时移除的还有通过 Multiple JRE(mJRE)功能在启动时选择 JRE 版本 的功能。这个功能很少使用,同时使 Java 启动器的实现复杂化,自从在 JDK 5 开始出现以来,一直没有完整的文档描述。 Oracle 已经移除 JVM TI(Tool Interface)hprof(Heap Profiling) 代理,它在 JVM 中已经被代替。jhat 工具也被移除,它早已被更好用的堆栈可视化和分析工具所代替。 Java 9 是当前时间线的终结者,新的时间线从此展开 Java 9 的带来了很多新功能。Oracle 最近透漏 Java 9 将是最后一个遵循 Java 名称命名规范和主版本发布周期的版本。 从现在开始,Java 的计划发布周期是 6 个月,下一个 Java 的主版本将于 2018 年 3 月发布,命名为Java 18.3,紧接着再过六个月将发布 Java 18.9。 Java 新的发布周期也意味着 JDK 9 将不会被作为长期支持版本。相反,下一个长期支持发布版本是 Java18.9。 Java 更快的发布周期意味着开发者将不需要像以前一样为主要发布版本望眼欲穿。这也意味着开发者将可能跳过 Java 9 和它的不成熟的模块化功能,只需要再等待 6 个月就可以迎来新版本,这将有可能解决开发者的纠结,Simon Maple 这样说,他是 Java 工具供应商 ZeroTurnaround 的 Java 支持者。 来源:Java 9 is here: Everything you need to know 作者:Paul Krill 译者:顾浩鑫
  • Java9正式发布,模块化支持多种配置
    众多开发者期待的Java 9四次跳票后, 22号终于发布正式版!!!DK9 提供超过150项新功能特性,包括备受期待的模块化系统、可交互的REPL工具 jshell,以及安全增强、扩展提升、性能管理改善等。Java 9的模块化改变了游戏规则基于Project Jigsaw的模块化功能引起了广大程序开发人员的争议,Java商店对于模块化功能并没有立即更新,而是保守的决定等模块化日渐成熟后在进行更新。模块化是以Java平台模块系统的形式将JDK分为一组模块,用于运行、编译或构建时间组合的功能。模块化也被称为一次具有传递性的变更,有利于帮助人们进一步了解模块之间的依赖关系。模块化可以让软件开发人员更容易的组装和维护复杂的应用程序,此外,Java 9中的模块化可以使得Java更好的缩小模块化到更小的设备,同时提高安全性和性能。模块化主要包括应用程序打包、模块化JDK本身、将源代码重新组合成模块以及重构JDK和Java运行环境映像等。JavaFX UI控件和CSS API现在可用于模块化。模块化支持多种配置,可以提高可扩展性、安全性和应用性能,将Java 9轻松的扩展到小型设备是模块化的关键驱动力。来源:51CTO 作者:王雪燕
  • 新手必看!快速入门Java的十个筹划
    本帖最后由 码小玩 于 2017-9-29 14:19 编辑一口不吃了一个胖子,心急吃不了热豆腐。当你点开这篇文这句话送给你。 0基础学Java只需办法适合,仍然有机遇进修好Java编程。初学Java就像交同伙从生疏到认识再到铁杆错误平生相伴,跟着进修的深刻,你会发明学Java并非设想的那样死板和艰苦,乃至另有一些美好之感,本文就为零根基学java的10个筹划,对初学java的你必定有帮助: 筹划一:透辟理解面向工具 只有理解了面向工具能力感知Java编程的绝妙,面向工具是Java中很紧张的一个概念,假如理解不透辟的话,你可以或者在前期编程时会仍然遵守面向进程的形式,理解概念很紧张,但并不能赞助你太多,最紧张的是要学会有面向工具概念来计划一个办理计划,以是你应当精确的控制并能应用工具创立、多态、计划形式等常识。 筹划二:控制焦点的API 看着轻易做着难,能理解的不必定会做,学Java也是如许,理论常识控制的再纯熟,假如不理解说话组成焦点API那统统都是0!就Java说话而言,你应当对它的API有异常强的实战履历,比方java.lang.*,IO,Exception(异常),Collections(聚集),Generics(泛型),Threads(线程),JDBC(数据库衔接)等等。假如你妄想是成为一个精彩的收集应用法式的开辟者,不论你用甚么范例的框架,你都必需要认识Servlet和JSP。 筹划三:锲而不舍写代码 理论是查验理论的独一尺度,只有写代码能力让你真正意想到成绩的深刻度,赓续发明编程说话的局限性和办理成绩的计划。对初学者来讲晋升编程品质的独一道路便是不绝的敲代码,哪怕是一个很简略的成绩,将它用代码实现并运转,这才是进修编程独一可行的道路。靠眼睛是学不会编程的,对付初学者除演习别无它法! 筹划四:加入好的交换服装论坛 记着,你不是一个人在战役,有许多人他们和你同样,在统一个起跑线上斗争着。应用框架实现一个简略的法式不是真正的挑衅,当你真正成为一个开辟工程师的时刻,你会发明许多奇怪的成绩是靠阐明办理不了的,你必要寄托一些人给你供给进修线索,哪怕是只言片语都有可以或者帮你走出逆境,领你戴德不已。 孔子曰:三人行,必有我师,在开辟范畴这句话绝被奉为经典并赓续的获得验证,作为初学者,不要放过一个可以或者领你晋升的机遇,探求一些好的服装论坛,不懂就问,成绩办理一个少一个,本身也会赓续进步。固然你也要学会分享,把本身的履历和设法主意分享给和到和你已经碰到同样成绩的人,赞助他们的同时也坚固了本身的常识,理解分享亦是进步。 筹划五:探求经典技巧博客 上一条刚说了,你不是一个人在战役,在收集上有许多技巧牛人都经由过程博客来分享本身的技巧履历和编程心得,你只必要勤恳一些去发明如许的博客,天天去浏览他们的技巧文章,能吸收到不同人对统一技巧的履历可见地,或者他们会为某一项功效而争执不休,你不必要去理睬,在“观战”的时刻要去阐发各类概念,逐渐形成本身的思惟,一朝一夕你会显著感觉到本身在法式计划上的晋升,这便是进步。 筹划六:浏览开源框架源码 一个及格的开辟者必先能灵活的应用各类框架,而要想成为一个精彩的开辟者,就应当赓续的去进修风行框架的源码,如许在深刻理解框架外部机制的同时还能获得大批的演习,慢慢丰硕本身的代码计划思惟,做一个代码的创造者而不是代码的复制者。 筹划七:接收指点或加入培训 在编程的路上别人的指点有着相当紧张的感化,有用的指点可以或者让你免走弯路,更快的获得自我晋升。优良的开辟工程师为甚么报酬高并且在项目中有着举足轻重的感化,紧张是因为他们不只可以或者掌握项目开辟的正确方向,还能率领团队别的成员晋升本身的开辟程度,这是任何一个企业都希求的也是老成持重的Java职员所盼望的。 在Java的进修阶段,业余的Java培训可以或者大大延长进修光阴,进步进修效力。Java初学者眼中弗成逾越的艰苦,很可以或者是一个Java开辟履历丰硕的人几句话就能够搞定的。你所学的常识弗成以或者都来自教科书,培训可以或者接触到更多人,人脉的积聚便是履历的积聚还可以或者转化为财产的积聚。 筹划八:理解未来技巧发展方向 两耳不闻窗外事,在如今是不合适的,分外是在顷刻万变的互联网期间,作为一个开辟者技巧跟不上可以或者去专研,思惟要跟不上,你辛辛苦苦刚做进去的产物可以或者已经后进了,或者只是一个眇乎小哉的小功效,思惟跟不上,就不能控制自动,还可以或者会被产物司理埋怨技巧后进甚么功效都实现不了,这相对是一个袭击!以是在垂头看代码的时刻,必定要关上双耳,洞察技巧的发展方向,坚持抢先能力立于不败。 筹划九:收集有用代码和工具 软件的日趋风行和Java的丰硕的资本,注定一些代码要反复应用,伴跟着你的事情履历的积聚,如许的反复性事情可以或者愈来愈多,以是你要学会收拾并收集一些罕用代码。想要朝这方面发展或者真心有兴趣的。可以找我要一些基础的学习视频,Q号码:3300863615,这个是免费的,希望同学找我要的时候不要有理所应当的态度,毕竟都是我的心血,希望你是真的有一颗想要学好java的心,我也会尽所能的去帮助你成为一名优秀的程序员。在好比:log4j的设置装备摆设文件(log4j.properties),JDBC设置装备摆设,框架的设置装备摆设等,另有工具类的比方StringUtils(字符串工具),DBUtils(数据库工具)等等,这会对给你以后的事情带来极大的方便,固然做这些还不敷让你成为一个精彩的开辟者,但试想一下假如你的共事或者同伙让你协助写一个功效代码,你只需复制粘贴而后轻微做做改动就能够或者实现,这个进程可以或者不敷5分钟,那时刻你的共事和同伙必定会对你另眼相看,不只如此你还节俭了本身的光阴,走一个捷径帮你省去很多费事,还赚到了品德。 筹划十:记载你的设法主意和创意 在进修中你可以或者灵光一闪,有了一个分外好的设法主意,或者忽然想明确了一个不绝困扰本身的费事,用笔记载上去,光阴长了你的思想愈来愈辽阔,你会清晰的发明本身属于甚么范例的进修者,在碰到艰苦时又因此何种心态何种办法办理的,它便是你的发展日志。同时,作为一个酷爱分享的人,你的履历和设法主意不要忘怀拿进去分享到你的服装论坛t.vhao.net和博客,赞助一些曾和你同样必要赞助的人,在Java的天下里,资本共享是推进技巧进步的紧张力气。 总之,Java是一门轻易上手的编程说话,但想要死记硬背,除控制良好的进修办法以外,尽力是必弗成少的。进修java要对本身有充足的信念,调剂进修办法和立场。 最后,愿你成为一名优秀的程序员,愿你所有努力都不会白费。 来源:程序人生
  • java9迁移问题
    请问如何解决jar名不能转换成module名的问题,比如hibernate-persistence-jpa-2.1-api-1.0.0.Final.jar?目前很多库都不是模块的。。。
  • 一年多java开发应该看什么书提升自己
    工作快一年了,接触的只有增删改差的功能,应该看哪些专业的书来提升自己,求大神指教。
  • 甲骨文要改变 Java 发布频率,将每半年发布一个版本
    Oracle近日宣布,他们将加快 Java 的发布频率,改为每六个月一次。也就是说,Java的下一个版本将在 2018 年 3 月发布,也就是本月 Java 9 发布后的六个月。 Java当前的发布周期为两年一次,但是,Java 9因为模块化系统(Jigsaw)问题一再延期,已经比预期晚了18个月,GA 版本将在9月21号发布。此前,Java 8也因为安全问题延期了8个月左右。新的发布周期严格遵循时间点,将在每年的3月份和9月份发布,相应的版本号为18.3、18.9、19.3等。与现在的发布周期不同,新的发布计划不会为了等待某个主要特性完成而延期。如果一个特性还没有完成,它就不会被合并到发布用的代码仓库里。如果错过了一个版本,就要等待下一次发布。编译自:infoworld.com
  • 基于软件开发云的JAVA程序设计教学实践
    本帖最后由 DevCloud 于 2017-9-22 14:46 编辑
  • 如约而至,Java EE 8 最终规范现已正式推出!
    Java EE 在其 GitHub 上的账号发布了 Java EE 8 最终规范,并提供了 PDF 格式的文件下载。按照此前公布的计划,Java EE 8 最终规范会在今年夏天结束前发布。现在看来,他们并没有食言。在 JCP 主页上,我们可以看到,在 8 月 21 日,JCP 执行委员会以 24 票赞成票通过了 JSR #366 的最终批准投票。其中,英特尔公司放弃了投票Java EE 8 规范从 2014 年 8 月开始接受 JSR 评审,到现在推出最终规范,整整经历了 3 年多的时间。去年,我们曾报道过,负责 Java EE 和 WebLogic Server 的甲骨文副总裁 Anil Gaur 表示预计在 2017 年年底发布的 Java EE 8 会具备基本的微服务和云功能。Gaur 计划 Java EE 8 的扩展会包含增强的安全性(以 secret 管理的形式,并且要支持 OAuth 和/或 OpenID)、独立(self-contained)配置的 API 以及健康检查(可能会支持应用监控)。前些日子,甲骨文表示将要把 Java EE 移交给开源组织。现在,Java EE 8 的最终规范已推出,不知道有可能将要移交给开源组织的 Java EE 会有怎样的发展。
  • Java Reflection
    Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值。Java反射机制功能强大而且非常实用。举个例子,你可以用反射机制把Java对象映射到数据库表,就像Butterfly Persistence(译者注:原作者所编写的框架)所做的那样,或者把脚本中的一段语句在运行期映射到相应的对象调用方法上,就像 Butterfly Container(译者注:原作者所编写的框架)在解析它的配置脚本时所做的那样。目前在互联网上已经有不胜枚举的Java反射指南,然而大多数的指南包括Sun公司所发布的反射指南中都仅仅只是介绍了一些反射的表面内容以及它的潜能。在这个系列的文章中,我们会比其他指南更深入的去理解Java反射机制,它会阐述Java反射机制的基本原理包括如何去使用数组,注解,泛型以及动态代理还有类的动态加载以及类的重载的实现。同时也会向你展示如何实现一些比较有特性的功能,比如从一个类中读取所有的get/set方法,或者访问一个类的私有变量以及私有方法。在这个系列的指南中同时也会说明一些非反射相关的但是令人困惑的问题,比如哪些泛型信息在运行时是有效的,一些人声称所有的泛型信息在运行期都会消失,其实这是不对的。
总条数:2294 到第 页
上滑加载中