Java基础
文章平均质量分 78
CmdSmith
这个作者很懒,什么都没留下…
展开
-
Java-如何编译Java类以包含方法参数名称?
我们可以通过方法 java.lang.reflect.Executable.getParameters() 获得任意方法或构造器的参数名列表。翻译 2020-12-15 15:12:13 · 416 阅读 · 0 评论 -
使用调试信息编译Java代码
使用javac的-g选项可将调试信息包含在已编译的代码中。如果在运行时调试,但没有源代码,则调试信息很有用。缺省情况下,仅生成行号和源文件信息,即未指定-g选项。指定-g还包括局部变量调试信息。我们可以在调试期间看到变量的真实名称。我们还可以使用-g:[keyword list]来控制在编译期间应包含哪些调试信息,其中关键字列表是以下关键字的逗号分隔列表:source:源文件调试信息。lines:行号调试信息。vars:局部变量调试信息。-g:none 不会生成任何调试信息。性能上有区翻译 2020-12-15 10:17:37 · 241 阅读 · 0 评论 -
Spring MVC 获取方法参数的名称
如果我们希望Spring在@RequestParam(或@PathVariable或@RequestHeader)没有显式指定名称的情况下自动将查询参数名称与其进行匹配,即在@RequestParam(“myRequestParamName”)中未指定值,则代码在编译时需要包含调试信息(debugging information)或带有-parameters 编译标志(-parameters compiler flag)。尝试不使用调试信息或-parameter标志进行显式编译的情况。Controlle翻译 2020-12-11 20:32:03 · 719 阅读 · 0 评论 -
类的加载、链接、初始化
所有的类都是在对其第一次使用时,动态地加载到JVM中的。当程序创建第一个对类的静态成员的引用时,就会加载这个类。(构造器也是类的静态方法,即使在构造器之前并没有使用static关键字,因此使用new操作符创建类的新对象也会被当做对类的静态成员的引用)获取Class对象无论何时,如果想在运行时使用类型信息,就必须首先获得恰当的Class对象引用:(1)Class.forName()是取得Cla...原创 2019-03-13 18:09:59 · 889 阅读 · 0 评论 -
异常处理的重要原则
异常处理就像一个活门(trap door),使你能放弃程序的正常执行序列。异常处理的一个重要原则是“只有在你知道如何处理的情况下才捕获异常”。实际上,异常处理的一个重要目标就是把错误处理的代码同错误发生的地点相分离。这使你能在一段代码中专注于要完成的事情,至于如何处理错误,则放在另一段代码中完成。“被检查的异常“强制你可能在还没有准备好处理错误的时候,被迫加上catch语句,这就导致了吞食则有...原创 2019-03-12 17:23:48 · 561 阅读 · 0 评论 -
闭包与回调
闭包是一个可调用对象,它记录了一些信息,这些信息来自于创建它的作用域。通过这个定义,可以看出来内部类是面向对象的闭包,因为它不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥有一个指向此外围类对象的引用,在此作用域内,内部类有权操作所有的成员,包括private成员。Java 最引人争议的问题之一就是,人们认为Java应该包含某种类似指针的机制,以允许回调(callback)。通过回调,...原创 2019-03-08 13:21:13 · 835 阅读 · 0 评论 -
为什么需要内部类
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的,可以继承多个具体或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现类“多重继承”。也就是说,内部类允许继承多个非接口类型(译注:类或抽象类)。比如当前类已经继承了一个类,...原创 2019-03-08 13:00:49 · 168 阅读 · 0 评论 -
垃圾回收器如何工作
垃圾收集的工作方式(1)引用计数:引用计数是一种简单但速度很慢的垃圾回收计数,每个对象都含有一个引用计数器,当有引用连接至对象时,引用计数加一。当引用离开作用域或被置为null时,引用计数减一。管理引用计数会在整个程序生命周期中持续发生。如果对象之间存在循环引用,可能会出现“对象应该被回收,但引用计数却不为零”的情况。引用计数常用来说明垃圾收集的工作方式,但似乎从来未被应用于任何一种Java...原创 2019-03-07 19:01:53 · 264 阅读 · 0 评论 -
分支/合并框架
分支/合并框架的目的是***以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果***。他是ExecutorService接口的一个实现,它把子任务分配给线程池(称为ForkJoinPool)中的工作线程。使用 RecursiveTask要把任务提交到这个池,必须创建RecursiveTask的一个子类,其中R是并行化任务(以及所有子任务)产生的结果类型,或者...原创 2018-12-07 14:35:10 · 441 阅读 · 0 评论 -
Stream.iterate 和 LongStream.rangeClosed 并行处理
分别采用 for循环、Stream.iterate及其并行版本、LongStream.rangeClosed及其并行版本 来测试顺序加法器函数对前一千万个自然数求和要用多久:import java.util.function.Function;import java.util.stream.LongStream;import java.util.stream.Stream;public ...原创 2018-11-16 15:15:11 · 1702 阅读 · 0 评论 -
直接输出数组的引用,char[]的例外情况
import java.util.Arrays;public class TestArray { public static void main(String[] args) { char[] arr1 = new char[] {'a', 'b', 'c'}; System.out.println(arr1); System.out.println(Arrays.toStr原创 2018-01-10 15:20:31 · 3406 阅读 · 0 评论 -
Comparable Comparator Java提供比较功能的两种方式
Java有两种方式来提供比较功能。1)实现 java.lang.Comparable接口 实现这个接口使你的类具有“天生”比较的功能。这个接口只有一个 compareTo() 方法,接受一个Object参数,如果当前对象小于参数则返回负值,如果相等则返回零,如果当前对象大于参数则返回正值。2)使用 java.util.Comparator 接口 如果有人给你一个并没有实原创 2018-01-03 15:39:28 · 373 阅读 · 0 评论 -
免锁容器之CopyOnWriteArrayList、ConcurrentHashMap
像Vector 和 Hashtable 这类早期容器具有许多synchronized方法,当他们用于非多线程的应用程序时,便会导致不可接受的开销。在Java1.2中,新的容器类库是不同步的,并且Collections类提供了各种static同步的装饰方法,从而来同步不同类型的容器。尽管这是一种改进,因为它使你可以选择在你的容器中是否要使用同步,但是这种开销依旧是基于synchronized...原创 2017-11-26 14:36:01 · 979 阅读 · 0 评论 -
外部类、外部接口、类的内部类、类的内部接口、接口的内部类、接口的内部接口 修饰符
/** * 外部类,顶级类 * * Illegal modifier for the class TestClass4; only public, abstract & final are permitted * */public class TestClass1 {}class TestClass2 { }/** * 注意: final 必须在 class...原创 2017-12-15 15:14:17 · 975 阅读 · 0 评论 -
动态代理(JDK实现)
代理是基本的设计模式之一,代理通常充当着中间人的角色。一个代理的简单示例:/** * 代理结构的简单示例 * */interface Interface { void doSomething(); void somethingElse(String arg);}class RealObject implements Interface { p原创 2017-07-22 17:30:05 · 371 阅读 · 0 评论 -
Java泛型中擦除的问题
摘自Java编程思想擦除使得现有的非泛型客户端代码能够在不改变的情况下继续使用,直至客户端准备好用泛型重写这些代码。擦除的代价是显著的。泛型不能用于显式地引用运行时类型的操作之中,例如转型、instanceof操作和new表达式。因为所有关于参数的类型信息都丢失了,无论何时,当你在编写泛型代码时,必须时刻提醒自己,你只是看起来好像拥有有关参数的类型信息而已。因此,如果你原创 2017-07-11 10:23:36 · 444 阅读 · 0 评论