今天我们将研究Java编程基础中最难的部分,尝试理解为什么很多人觉得它们困难,以及是否有什么需要做的.1.泛型Java中的泛型是具有参数的类型。创建泛型类型时,您不仅要指定类型,还要指定它将使用的数据类型。Java学习者经常提到泛型是Java中最难理解的部分之一,当你有带参数的方法时它会容易得多,但当你必须自己编写时会感到困惑。提示和建议Java泛型做了一件C++模板做不到的事情——实现类型安全。C++模板的实现是一个简单的预处理器技巧,不能确保类型安全。Java中的泛型类似于C++模板,但具有额外的类型安全性。类型安全是任何良好开发环境的基本特征。2.多线程Java中的多线程是指同时执行两个或多个线程以达到应用程序对CPU的最大利用率的过程。多线程解决了非常重要的任务,可以使我们的程序更快,通常快很多倍。但它被认为是许多新Java学习者容易陷入的主题之一。这都是因为多线程也会产生问题而不是解决问题。多线程会产生两个特定的问题:死锁和竞争条件。死锁是指多个线程都在等待一个属于彼此的资源,没有一个可以继续进行的情况。竞争条件是多线程系统或应用程序中的设计错误,其中系统或应用程序的操作取决于代码部分的执行顺序。提示和建议一个简单的技巧是使用精心设计的消息队列(不要自己动手)在线程之间传递数据。困难的部分是试图让多个线程以某种方式神奇地更新共享对象。那时它很容易出错,因为人们不注意存在的竞争条件。许多人不使用消息队列并尝试更新共享对象并给自己制造问题。变得困难的是设计一种在多个队列之间传递数据时运行良好的算法。这个很难(硬。但是共存线程(通过共享队列)的机制很简单。3.Classpath问题Classpath错误也被认为是Java开发人员在日常工作中面临的抱怨最多的问题之一。“调试类路径问题可能很耗时,而且经常发生在最糟糕的时间和地点:发布之前,并且通常在开发团队几乎没有访问权限的环境中。它们也可能发生在IDE级别并成为生产力降低的根源。提示和建议“类路径问题并不像它们最初出现时那样低级或棘手。这完全是关于某些目录中是否存在zip文件(jars)、如何找到这些目录以及如何在访问受限的环境中调试类路径。通过了解一些有限的概念,例如类加载器、类加载器链和父优先/父后模式,这些问题可以得到有效解决,”专家解释道。4.多态与正确使用说起OOP的原理,很多人都说很难理解多态。多态性是程序以相同方式处理具有相同接口的对象的能力,而不需要有关对象特定类型的信息。尽管多态性是一个相当基础的主题,但它的内容非常广泛,构成了Java基础的很大一部分。对于很多同学来说,多态是学习Java的第一个难点。这都是因为在不同的上下文中使用了不同形式的多态,这可能会造成混淆。提示和建议处理多态性没有其他方法只能学习它。”简单重载:+可以表示整数加法、浮点数加法和(在某些语言中)字符串连接。子类型多态性:如果B是(继承自)A的子类型,那么任何类型B的值都可以在期望类型A的值的上下文中使用。将参数化类型实例化为不同的具体类型。这也称为“模板”或“泛型”,在OO语言中通常使用尖括号(例如T)指定。接口多态性。这基本上是一种机制将子类型多态性限制为实现特定接口的子类型或将参数多态性限制为实现特定接口的类型参数。5.反射克正在运行。反射允许您探索有关字段、方法和类构造函数的信息。它还允许您使用类型。反射和用于发布错误消息的逻辑一致模型使创建正确的动态代码成为可能。但是对于很多人来说,弄清楚如何使用反射并不是那么容易。Reflection和Java的Reflection中的“Tipsandadvice”让原本设计为静态类型的Java可以动态类型化。动态类型本身并不是邪恶的。它允许程序员打破某些OOP原则,但同时它允许许多强大的运行时代理和依赖项注入等功能。Java让你用反射打自己的脚。但是,你必须非常具体地将枪对准你的脚,移除安全装置并扣动扳机。6.输入/输出流允许您使用任何数据源:Internet、计算机的文件系统或其他。Streams是一种通用工具。它们允许程序从任何地方(输入流)接收数据并将其发送到任何地方(输出流)。他们的任务是相同的:从一个地方获取数据并将其发送到另一个地方。有两种类型的流:输入流(用于接收数据)和输出流(用于发送数据)。很多人对流的使用感到困惑的是Java有几个I/O流类。提示和建议“Java有如此多的I/O流类,主要是由于两个因素。首先是遗留的,一些类由于历史原因仍然存在,并且由于它们不被认为是有害的,所以没有被弃用。第二,灵活性。不同的应用程序有不同的要求,因此,根据您的要求,您有多种选择。有用的抽象使您在阅读时清晰明了,只需几行代码,您就可以做很多事情。”
