java.nio.ByteOrder能够获取本机的字节顺序。 另一种缓冲区称之为直接缓冲区,能够通过xxBuffer.allocateDirect获取。...Java不支持无符号的数据类型。可是总是有解决的方法的。以下就是一种解决的方法。...package com.ronsoft.books.nio.buffers; import java.nio.ByteBuffer; /** * Utility class to get and...一般的操作系统都从底层支持批量写入或读取缓冲区,因此Java会将批量操作翻译成系统底层的API调用,让操作系统来完毕批量操作,因此速度很快。 文件通道仅仅能是堵塞通道。...blockingLock()方法会返回一个Object对象,能够用Java中的synchronizedkeyword对这个对象进行锁定,防止其它的线程对该对象进行改动。
同时,Java语言健壮性也体现在了能够及时有效地处理程序中的错误,准确的说是Java的异常处理机制为解决安全问题提交了一份满意的答卷。...1、异常的概念 异常又称为例外,是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制。...Exception又分为运行时异常(RuntimeException)和非运行时异常,下面将详细讲述这些异常之间的区别与联系: 1.Error与Exception Error:称为错误,由Java
将jstl.jar和standard.jar拷贝到WEB-INF/lib下 2、使用 采用taglib指令引入标签库,例如:引入核心标签库 java.sun.com...使用JSTL的优点 JSTL到底有什么好处,为什么要用JSTL,优点如下: 1、简化页面,有利于维护,避免在页面中写Scriptlet(Scriptlet是包含在之间的Java代码)...当项目非常大的时候,jsp页面的java代码每次都必须重写,会出现大量的代码,不易于维护和修改,可读性差,对于不懂java的美工人员同样是一种痛苦。...总结 EL语言是JSTL输出(输入)一个JAVA表达式的表示形式。...通常,我们写JSP页面时,JSTL一般要配合EL表达式使用,达到一个共同的目的:简化页面,减少jsp页面的java代码,实现分层的思想。
这篇博客主要简单的介绍一下java的基础知识,主要的目的是扫盲。原来只是听说过java,现在自己真正开始学习了,看完了第一集视频之后,问自己,你知道java是什么吗?...组成 Java由四方面组成:java编程语言,java类文件格式,java虚拟机和java应用程序接口(Java API)。...体系 java分为三个体系JavaSE(J2SE,java平台标准版),JavaEE(J2EE,java平台企业版),JavaME(J2ME,java平台微型版)。...上面三点也是java非常火的关键原因。...java两种核心机制 1.java虚拟机(Java Virtual Machine) 1.java虚拟机可以理解成一个以字节码为机器指令的CPU。
这是第一种成功的面向对象程序设计语言,也是Java 的基础 语言。通过这些特征,我们可理解“纯粹”的面向对象程序设计方法是什么样的: (1) 所有东西都是对象。...“friendly ”(友好的)涉及“包装”或“封装”(Package)的概念—— 即Java 用来构建库的方法。...Java 也提供了有限的资源锁定方案。它能锁定任何 对象占用的内存(内存实际是多种共享资源的一种),所以同一时间只能有一个线程使用特定的内存空间。
接口优于抽象类 Java 有两种机制来定义允许多个实现的类型:接口和抽象类。...因为 Java 只允许单一继承,所以对抽象类的这种限制严格限制了它们作为类型定义的使用。 任何定义所有必需方法并服从通用约定的类都可以实现一个接口,而不管类在类层次结构中的位置。...为后代设计接口 在 Java 8 之前,不可能在不破坏现有实现的情况下为接口添加方法。如果向接口添加了一个新方法,现有的实现通常会缺少该方法,从而导致编译时错误。...在 Java 8 中,添加了默认方法(default method)构造,目的是允许将方法添加到现有的接口。但是增加新的方法到现有的接口是充满风险的。...在 Java 8 中添加到集合接口的一些方法已知是易受影响的,并且已知一些现有的实现会受到影响。
.使用concurrent collection, CopyOnWriteArrayList.通常, 应该在同步区域内做尽可能少的工作.第80条 executor, task和streams优先于线程Java...1.5中加入了java.util.concurrent, 很好用:ExecutorService executorService = Executors.newSingleThreadExecutor...是个不错的选择, 但是对于大负载的服务器来说, 最好使用固定数目的线程池.还可以直接使用ThreadPoolExecutor类, 控制线程池操作.ScheduledThreadPoolExecutor可以代替java.util.Timer
检查参数的有效性方法的参数限制, 应该在文档中指明, 并且在方法体的开头处检查参数, 以强制施加这些限制.对于公有的方法, 要用Javadoc的@throws标签在文档中说明违反参数值限制时会抛出的异常.Java...(除非通过将-ea或者-enableassertions标记传递给Java解释器来启用它们.)第50条 必要时进行保护性拷贝你的类是否能够容忍对象进入数据结构之后发生变化?...(例如: Collections.emtpySet).第55条 明智地返回optionals在Java 8之前, 当一个方法无法返回值的时候有两种选择: 返回null或者抛出异常.Java 8推出了一个新的解决方案...对于类, 接口和域, 概要描述应该是一个名词短语.Java 9引入了index, 方面文档查询....(注解的概要描述是个动词短语.)包级文档注释: package-info.java.模块级文档注释: module-info.java.在文档中还应该标明:线程安全性 -> 不论是否线程安全.如果可序列化
他们的使用可能会造成错误的产生,糟糕的性能以及移植性的问题,当然Finalizers有着一些有用的优点,我们会在后续介绍这些,但是作为首要的规则,你应该避免finalizers C++程序编写者们被警告不要去如同C++析构对于Java...的模拟来考虑finalizers,在C++之中,析构函数是经常被用来作为回收对象间关联资源的方法,作为构造函数的反面,但是在Java之中,垃圾回收收集器会在一个对象变得不可达的时候回收它的相关资源,对于程序员这部分来说并不需要特别地去添加...,C++的析构也通常被用来回收其他的非内存资源,Java中try-finally的块就是经常用作这个目的。...里面的close方法,其他的例子比如java.util.Timer里面的cancel方法,这个方法在对于使关联Timer实例的线程自身轻柔地终止上表现出必要的状态转变 java.awt包括Graphics.dispose...合法的使用就是关于本地对等体(Native Peers)的,一个native peer就是一个native 对象通过native方法来代表一个普通的对象,由于这个native peer并不是普通的对象,垃圾回收器当Java
(对next()不适用, 因为null是next()方法的合法返回值.)第70条 对可恢复的情况使用受检异常, 对编程错误使用运行时异常Java提供三种可抛出结构(throwable):受检异常(checked...例如数组越界访问.如果无法决定到底应该用受检(checked exception)还是非受检异常(runtime exception), (无法确定是否可能恢复), 就用runtime exception.虽然Java...Java 8开始, 这种负担加重, 因为抛出受检异常的方法不能直接在流中使用.如果正确地使用API并不能阻止这种异常条件的产生, 并且一旦产生异常, 使用API的程序员可以立即采取有用的动作, 这种负担就被认为是正当的...加log供之后研究.第74条 每个方法抛出的异常都要有文档始终要单独地声明受检的异常, 并且利用Javadoc的@throws标记, 准确地记录下抛出每个异常的条件.虽然Java并不要求方法声明它可能会抛出的未受检异常
6.Eliminate obsolete object reference 大意为 消除旧的对象引用 当你使用直接操作内存的语言,例如C或者C++的时候,一些内存释放的操作会比较麻烦,而我们使用java...ScheduledThreadPoolExecutor )或者添加新的条目的时候就会有这种作用,LinkedHashMap类使用了它的removeEldestEntry方法使得后一种方法更加简便,对于更加复杂的缓存,你可能需要直接的使用 java.lang.ref
与Java平台没有泛型之前的接口类型List完全一样.如果使用原生态类型, 就失掉了泛型在安全性和表达性方面的所有优势....如果一个参数类型在方法声明中只出现一次, 就用一个wildcard来替代它.swapHelper -> 把复杂的泛型内化.第32条 谨慎地结合泛型和可变参数泛型和可变参数都是Java 5的时候添加的,...实际上在实践中是有用的, 所以语言设计者保留了它.Java类库中: Arrays.asList(T...a), Collections.addAll(Collection c, T... elements), EnumSet.of(E first, E... rest).这些类库方法是类型安全的.在Java 7之前, 对泛型可变参数的警告只能在客户端通过...@SuppressWarnings("unchecked")来消除, Java 7加上了SafeVarargs注解, 方法的作者用来承诺安全性.一个有泛型可变参数的方法, 满足了下面两个条件就是安全的:
result = 31 * result + lineNumber; return result; } 这样的方法实现保证了逻辑相同的实例有着相同的hashCode,这个方法看似简单,它的性能却和Java
10.Always override toString 针对于java.lang.Object已经帮我们实现好了的toString方法,当我们自己定义出来的类使用这古老的toString方法的时候,通常不会返回给你一个比较满意的字符串...明确而且具有可读性,这样的表达可以被输入或者输出在人类可读的持久型数据对象中,比如说XML文档 如果你指定了返回值的格式,那么较好的做法是在类中添加静态工厂或者构造方法,这样利于程序的拓展之类的,这样的方法被应用在Java
前言 最近断断续续看了《Java Performance The Definitive Guide》前六章,记录一下关于GC部分的读书笔记。...平均时间拉长到阈值应该触发报警 可以通过GarbageCollectorMBean获取collectCount和collectTime,需要注意的是Count是累加总次数,collectTime是累加的STW的总时间 总结 java...performance GC相关读书笔记,看到新的东西会继续补充
前言 作为学习Java语言的经典之作《Java编程思想》,常常被人提起。虽然这本书出版十年有余,但是内容还是很给力的。...在Java中,动态绑定是默认行为,不需要添加额外的关键字来实现多态。 1.8 单根继承结构 在Java中,所有的类最终都继承自单一的基类object。...1.9.1 参数化类型 在Java SE5出现之前,容器存储的对象都只具有Java中的通用类型:Object。...Java采用动态内存分配方式。 在称为堆(heap)的内存池中动态地创建对象。...Java对象生命周期: 如果是在堆上创建对象,编译器就会对它的生命周期一无所知。 Java提供了被称为“垃圾回收器”的机制,它可以自动发现对象何时不再被使用,并继而销毁它。
一、linux网络IO模型:linux将所有外部设备都当作文件处理,对一个文件的读写操作通过调用内核命令执行,返回一个file descriptor(fd 文件...
读书笔记: Effective Java 3 2022-04-08 23. 类层次结构优于标签类 标签类含义 通过一个枚举类的形式定义标签,管理实例的不同逻辑处理的分发控制。...逻辑拆分,定义抽象基类: 我们可以使用 Java 的类层次结构来解除对标签的依赖。
extends Node> nodeBuilder) { ... } 传统的抽象工厂在Java上的实现曾经是一个类的对象,有着newInstance方法,这个方法起到了build方法的作用。
2、基本成员默认值 如果类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保他获得一个默认值。...Java 编译器能自动侦测这些情况,并颇为“明智”地决定是否嵌入一个 final 方法。然而,最好还是不要完全相信编译器能正确地作出所有判断。...Java中除了static 和 final的方法,其他所有的方法都是后期绑定。...向TreeSet插入基本数据类型时,Java已经定义好了CompareTo(Object obj)方法,采用自然排序,默认升序。...五、其他 1、 Java包装类只能做一件事,就是将其初始化为某个值,然后读取这个值。也就是说,一旦创建了包装类的对象,就没有办法改变他的值。
领取专属 10元无门槛券
手把手带您无忧上云