设计接单的网站,温州做网站的公司,wordpress添加宋体字库,网页版传奇源码java 适用参数Java语言和标准库功能强大#xff0c;但功能强大#xff0c; 责任重大 。 一方面看到很多用户代码滥用或滥用稀有的Java功能#xff0c;另一方面却完全忘记了大多数基本功能之后#xff0c;我决定撰写此摘要。 这不是每个Java开发人员都应该探索#xff0c;了… java 适用参数 Java语言和标准库功能强大但功能强大 责任重大 。 一方面看到很多用户代码滥用或滥用稀有的Java功能另一方面却完全忘记了大多数基本功能之后我决定撰写此摘要。 这不是每个Java开发人员都应该探索了解和使用的要求和领域的列表。 相反 我将Java功能分为三类 日常 偶尔和从不仅框架和库 。 规则很简单如果您发现自己经常使用给定功能然后建议使用该功能则可能是工程过度或试图构建过于笼统且可重复使用的功能。 如果您没有足够频繁地使用给定功能根据我的主观清单则可能会错过一些真正有趣且重要的机会。 请注意我只关注JavaJVM和JDK。 我不建议您使用哪些框架以及使用的可能性。 我还假设了典型的服务器端面向业务的应用程序。 日复一日 假定每天都要使用Java语言的以下功能。 如果您从未见过它们或者很少使用它们则可以仔细看看它们确实很有帮助 类接口包 –认真。 将您的代码放在类中。 您还记得大学时曾说过类是封装的数据作用于该数据的方法吗 仅具有状态的类几乎不是一个结构。 仅包含方法的类只是一个包含函数的名称空间。 必要时也请使用接口。 但是在创建仅具有一个实现的接口之前请三思。 也许您不需要中间人 但是请遵循完善的命名约定将所有内容打包放入软件包中。 静态方法 –不要害怕它们。 但是仅将它们用于无状态实用程序方法。 永远不要在static方法中编码任何业务逻辑。 ExecutorService –线程池 –必须创建和有效使用线程池了解排队和FutureT工作方式。 不要重新实现线程池每当有人说生产者消费者时都要考虑一下它们。 Atomic -*系列 –不要使用synchronized来原子地读取或更新某些计数器或引用。 Atomic *系列类使用有效的比较和交换低级指令来达到惊人的效率。 确保您了解这些类提供的保证。 设计模式 –从技术上讲不是Java语言的一部分而是必不可少的。 您应该了解理解和使用它们但要谨慎而谨慎。 就像使用界面一样-不要太过分。 GoF甚至EI模式通常应出现在代码库中。 但是让模式出现在您的思维过程中而不是让思维过程受模式驱动。 内置集合包括并发集合 –您绝对必须了解并使用内置集合并了解List Map和Set之间的区别。 对您来说使用线程安全的集合应该不是问题。 了解性能特征并对其背后的实现进行基本概述。 这真的很基本。 还知道并使用各种BlockingQueue实现。 并发很困难不要自己重新实现其中的一些东西就更难了。 内置的注释 -注释是在这里留下来学会使用Override 和Deprecated在一定程度上每天一致。 异常 –使用未经检查的异常表示异常异常故障需要采取措施。 了解如何处理受检查的异常。 学习阅读堆栈跟踪。 资源尝试 –使您熟悉这种神话般的语言构造。 如果您的班级需要任何清理请实施AutoCloseable 。 阻塞IO –使用Reader / Writer InputStream / OutputStream类是您应该真正熟悉的东西。 理解缓冲区和其他装饰器之间的区别不用担心。 这将结束您应使用的日常工具的列表。 如果您从未听说过或仅偶尔使用过它们请仔细研究它们因为它们可能会成为您的救星。 偶尔 以下是您不应该害怕使用的语言功能但也不应滥用它们。 如果您发现自己每天都在使用它们或者在午餐前多次看到这些功能那么您的设计可能有问题。 我从后端企业Java开发人员的角度来看。 这些类型的功能很有用但不太常用。 继承和抽象类 –实际上事实证明我不经常使用继承而且我也不是很想念它。 由接口驱动的多态性要灵活得多尤其是在Java中缺乏特性的情况下。 比起继承也更喜欢组合 。 太多级别的继承会导致代码难以维护。 正则表达式 – 有些人遇到问题时会认为“我知道我会使用正则表达式”。 现在他们有两个问题。 。 没有正则表达式的世界将更加无聊和麻烦。 它们对于解析常规语言而不是HTML 非常有用但是它太容易过度使用了。 如果您发现自己整天都在正则表达式之前进行制作测试修复和测试则可能是在使用错误的工具来完成这项工作。 我所有的时间最爱 public static boolean isNegative(int x) {return Integer.toString(x).matches(-[0-9]);
} Semaphore CountDownLatch CyclicBarrier等 –与infomous wait() / notify()对相比它们在一个数量级上都非常有用。 但是即使滥用它们也不会阻止您出现并发错误。 当您经常看到这些同步机制时请考虑线程安全的集合或某些框架。 用户代码中的泛型类型 –使用内置集合和具有泛型类型的其他类不仅应该是日常实践而且对您来说应该显而易见。 但是我的意思是自己开发代码以获取或返回泛型类型。 像这样 public T, F ContractValidatorT extends Contract T validate(ValidatorT, F object) 有时有必要在您自己的代码中使用泛型但不要太元化 。 当然静态类型和类型安全应该是您的首要任务但是也许您可以避免使用太多的泛型复杂类型 JVM中的脚本语言 –您知道JDK具有内置JavaScript解释器吗 而且您可以插入几乎任何其他语言例如Groovy或JRuby 有时将小脚本嵌入应用程序中更为简单即使客户也可以更改。 这种情况并不常见但是在瞬息万变的市场中重新部署可能不是一种选择。 只需记住如果脚本代码的总行数超过代码总数的1则应该开始担心维护。 Java NIO –很难做到正确甚至很难从中受益。 但是在极少数情况下您实际上必须使用NIO压缩尽可能多的性能和可伸缩性。 但是更喜欢可以为您执行此操作的库。 同样在正常情况下阻塞IO通常就足够了。 synchronized关键字 –出于简单原因您不应过于频繁地使用它。 使用的次数越多执行的频率就越高从而影响性能。 请考虑使用线程安全的集合和原子原始包装器。 还要确保您始终了解哪个对象用作互斥体。 我认为上述功能很有价值且很重要但不一定每天都在起作用。 如果您每天都看到其中任何一个则可能表示设计过度设计或……经验不足的开发人员。 经验带来简单。 但是您可能也有非常不寻常的要求这也适用于第三组。 永不请考虑仅框架和库开发人员 您应该了解并理解以下功能背后的原理以便了解框架和库。 而且您必须了解它们以有效地为我们服务我认为如果有问题的人只是阅读所用库的代码就可以避免有关StackOverflow的太多问题。 但是理解并不意味着使用。 您几乎永远都不要直接使用它们它们大多是高级的肮脏的和复杂的。 即使出现这种功能也可能导致严重的头痛。 套接字 –认真地说套接字。 您必须了解TCP / IP堆栈的工作原理在线程方面要非常自觉在解释数据时要小心对流保持警惕。 远离使用纯套接字有数百个将它们包装起来并提供更高级别抽象的库– HTTPFTPNTPSMB电子邮件…例如请参阅Apache Commons net 。 您会惊讶于编写体面的HTTP客户端或服务器有多么困难。 而且如果您需要为某些专有协议编写服务器请绝对考虑使用Netty 。 反思 –在业务代码中没有内省类和方法的地方。 框架离不开反思我离不开。 反射会使您的代码变慢不安全且难看。 通常AOP就足够了。 我什至会说传递ClassT实例是一种代码味道。 动态代理和字节码操作 – Proxy类很棒但就像反射一样只能由支持您的框架和库使用。 它们是轻量级AOP的基本构建块。 如果您的业务应用程序不是框架或库甚至Mockito都使用这些技术需要字节码生成或操作例如ASM或CGLIB – 你陷入了深渊 我会为你祈祷。 类加载器 –与类加载器有关的所有内容。 您必须了解它们层次结构字节码等。但是如果您编写自己的类加载器那将是通往地狱的道路。 并不是说它是如此复杂但是可能没有必要。 留给应用服务器。 Object.html#clone() –老实说我不记得我是否在整个Java开发人员生命中都使用过这种方法。 我只是……没有……而且我找不到使用它的任何理由。 我要么有一个明确的副本构造函数要么更好地使用不可变对象。 您有任何合法的用例吗 好像是1990年代... 本机方法 – JDK中有一些方法 即使对于诸如计算正弦函数之类的小任务也是如此。 但是Java不再是全班最慢的孩子实际上恰恰相反。 我也无法想象使用标准库或第三方库无法实现哪种逻辑。 最后本机方法很难正确解决您会遇到低级的令人讨厌的错误尤其是在内存管理方面。 自定义集合 -遵循原始JavaDoc中定义的所有合同实施全新集合非常困难 。 像Hibernate这样的框架使用特殊的持久化集合。 很少需要一个针对您的需求的集合以至于没有一个内置集合足够好。 ThreadLocal –库和框架经常使用线程局部变量。 但是出于两个不相关的原因您永远不要尝试利用它们。 首先 ThreadLocal通常是您想潜入的隐藏半全局参数。 这使您的代码难以推理和测试。 其次如果未正确清理ThreadLocal很容易导致内存泄漏请参阅this this this和this … WeakReference和SoftReference –这些类是相当低级的在实现与垃圾回收良好配合的缓存时非常有用。 幸运的是有很多开源缓存库因此您不必自己编写一个。 了解这些类的作用但不要使用它们。 com.sun.*和sun.*软件包尤其是sun.misc.Unsafe –远离这些软件包只是……不要去那里。 没有理由探索这些专有的未记录的文档并且不能保证保留向后兼容的类。 只是假装他们不在那里。 为什么要使用Unsafe 当然上面的列表是完全主观的很可能不是确定的。 如果您认为某些物品放置在错误的地方或完全丢失了某些物品建议您提出评论和建议。 我想构建一个摘要可以在代码审查期间或评估项目时作为参考。 参考 Java具有 JCG合作伙伴 Tomasz Nurkiewicz在Java和社区博客上的适用性 。 翻译自: https://www.javacodegeeks.com/2012/10/java-features-applicability.htmljava 适用参数