
java
局外人一枚
5年互联网老兵。
专注分享热点资源、技术学习课程。
日拱一卒,一起进步。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java核心技术卷I-基本数据类型
基本数据类型:4整型2浮点1字符(Unicode)1真值整型类型存储需求int4字节short2字节long8字节byte1字节浮点型类型存储需求double8字节float4字节所有的浮点数值计算都遵循 IEEE 754 规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:...原创 2019-06-26 09:57:41 · 199 阅读 · 0 评论 -
java核心技术卷I-异常
异常在 Java 程序设计语言中, 异常对象都是派生于 Throwable 类的一个实例。稍后还可以看到,如果 Java 中内置的异常类不能够满足需求,用户可以创建自己的异常类。在设计 Java 程序时, 需要关注 Exception 层次结构。 这个层次结构又分解为两个分支:一个分支派生于 RuntimeException ; 另一个分支包含其他异常。划分两个分支的规则是:由程序错误导致的...原创 2019-08-01 15:01:44 · 386 阅读 · 0 评论 -
java核心技术卷I-断言、日志
断言断言机制允许在测试期间向代码中插入一些检査语句。当代码发布时,这些插人的检测语句将会被自动地移走。Java 语言引人了关键字 assert。这个关键字有两种形式:assert 条件;assert 条件:表达式;这两种形式都会对条件进行检测, 如果结果为 false, 则抛出一个 AssertionError 异常。在第二种形式中,表达式将被传人 AssertionError 的构造...原创 2019-08-08 15:50:15 · 234 阅读 · 0 评论 -
java核心技术卷I-泛型(一)
泛型程序设计泛型程序设计(Generic programming) 意味着编写的代码可以被很多不同类型的对象所重用。类型参数的好处使得程序具有更好的可读性和安全性。泛型类一个泛型类( generic class) 就是具有一个或多个类型变量的类。public class Pair<T> { private T first; private T second;...原创 2019-08-08 18:02:38 · 416 阅读 · 0 评论 -
java核心技术卷I-集合框架
Java集合框架与现代的数据结构类库的常见情况一样, Java 集合类库也将接口(interface) 与 实 现(implementation) 分离队列 (queue)队列接口指出可以在队列的尾部添加元素, 在队列的头部删除元素,并且可以査找队列中元素的个数。当需要收集对象, 并按照“ 先进先出” 的规则检索对象时就应该使用队列public interface Queue<E&g...原创 2019-08-23 18:27:39 · 286 阅读 · 0 评论 -
java核心技术卷I-泛型(二)
通配符类型通配符类型中, 允许类型参数变化。 例如, 通配符类型Pair<? extends Employee>表示任何泛型 Pair 类型, 它的类型参数是 Employee 的子类, 如 Pair<Manager>, 但不是Pair<String>? extends Employee getFirst()void setFirst(? exten...原创 2019-08-23 14:16:26 · 249 阅读 · 0 评论 -
java核心技术卷I-具体的集合
具体的集合链表数组和数组列表都有一个重大的缺陷。这就是从数组的中间位置删除一个元素要付出很大的代价,其原因是数组中处于被删除元素之后的所有元素都要向数组的前端移动。在数组中间的位置上插入一个元素也是如此。链表( linked list) 解决了这个问题。尽管数组在连续的存储位置上存放对象引用, 但链表却将每个对象存放在独立的结点中。每个结点还存放着序列中下一个结点的引用。在 Java ...原创 2019-09-02 15:45:51 · 425 阅读 · 0 评论 -
java核心技术卷I-映射
映射集是一个集合,它可以快速地查找现有的元素。但是,要查看一个元素, 需要有要查找元素的精确副本。这不是一种非常通用的査找方式。通常, 我们知道某些键的信息,并想要查找与之对应的元素。 映射(map) 数据结构就是为此设计的。映射用来存放键 / 值对。如果提供了键, 就能够查找到值。基本映射操作Java 类库为映射提供了两个通用的实现:HashMap 和 TreeMap。这两个类都实现了Ma...原创 2019-09-03 12:02:44 · 400 阅读 · 0 评论 -
java核心技术卷I-视图
视图与包装器通过使用视图( views) 可以获得其他的实现了 Collection 接口和 Map 接口的对象。映射类的 keySet 方法就是一个这样的示例。初看起来, 好像这个方法创建了一个新集, 并将映射中的所有键都填进去,然后返回这个集。但是, 情况并非如此。取而代之的是:keySet 方法返回一个实现 Set接口的类对象, 这个类的方法对原映射进行操作。这种集合称为视图。轻量级集合...原创 2019-09-03 15:23:27 · 318 阅读 · 0 评论 -
java核心技术卷I-遗留的集合
遗留的集合从 Java 第 1 版问世以来, 在集合框架出现之前已经存在大量“ 遗留的” 容器类。Hashtable类Hashtable 类与 HashMap 类的作用一样,实际上,它们拥有相同的接口。与 Vector 类的方法一样。Hashtable 的方法也是同步的。如果对同步性或与遗留代码的兼容性没有任何要求,就应该使用 HashMap。如果需要并发访问, 则要使用 Concurren...原创 2019-09-05 11:17:42 · 244 阅读 · 0 评论 -
java核心技术卷I-部署相关
JAR文件一个 JAR 文件既可以包含类文件,也可以包含诸如图像和声音这些其他类型的文件。此外, JAR 文件是压缩的,它使用了大家熟悉的 ZIP 压缩格式清单文件除了类文件、 图像和其他资源外, 每个 JAR 文件还包含一个用于描述归档特征的清单文件 (manifest。)清单文件被命名为 MANIFEST.MF , 它位于 JAR 文件的一个特殊 META-INF 子目录中。最小的符合...原创 2019-09-05 14:22:31 · 234 阅读 · 0 评论 -
java核心技术卷I-线程
线程多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。通常,每一个任务称为一个线程( thread), 它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序(multithreaded)。多进程与多线程区别本质的区别在于每个进程拥有自己的一整套变量, 而线程则共享数据(同时也带来了风险)。共享变量使线程之间的通信比进程之间的通信更有效、 更容易。与进程相比...原创 2019-09-05 16:33:56 · 284 阅读 · 0 评论 -
java核心技术卷I-同步(一)
同步在大多数实际的多线程应用中, 两个或两个以上的线程需要共享对同一数据的存取。如果两个线程存取相同的对象, 并且每一个线程都调用了一个修改该对象状态的方法, 可以想象, 线程彼此踩了对方的脚。根据各线程访问数据的次序,可能会产生错误的对象。这样一个情况通常称为竞争条件(race condition)。竞争条件详解java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的...原创 2019-09-05 18:21:04 · 338 阅读 · 0 评论 -
java核心技术卷I-同步(二)
同步阻塞每一个 Java 对象有一个锁。线程可以通过调用同步方法获得锁。还有另一种机制可以获得锁,通过进入一个同步阻塞。synchronized (obj) // this is the syntax for a synchronized block{ critical section}于是它获得 Obj 的锁监视器概念锁和条件是线程同步的强大工具,但是,严格地讲,它们不是面向对...原创 2019-09-06 17:52:25 · 292 阅读 · 0 评论 -
java核心技术卷I-线程安全(一)
线程安全的集合如果多线程要并发地修改一个数据结构, 例如散列表, 那么很容易会破坏这个数据结构(有关散列表的详细信息见第 9 章) 。例如, 一个线程可能要开始向表中插入一个新元素。假定在调整散列表各个桶之间的链接关系的过程中, 被剥夺了控制权。如果另一个线程也开始遍历同一个链表,可能使用无效的链接并造成混乱, 会抛出异常或者陷人死循环。可以通过提供锁来保护共享数据结构, 但是选择线程安全的...原创 2019-09-09 17:31:15 · 335 阅读 · 0 评论 -
java核心技术卷I-线程安全(二)
并发集视图假设你想要的是一个大的线程安全的集而不是映射。并没有一个 ConcurrentHashSet 类,而且你肯定不想自己创建这样一个类。当然,可以使用 ConcurrentHashMap (包含“ 假” 值),不过这会得到一个映射而不是集, 而且不能应用 Set 接口的操作。静态 newKeySet 方法会生成一个 Set, 这实际上是 ConcurrentHashMap<K, B...原创 2019-09-09 18:18:28 · 264 阅读 · 0 评论 -
java核心技术卷I-代理
代理利用代理可以在运行时创建一个实现了一组给定接口的新类 : 这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用。何时使用代理假设有一个表示接口的 Class 对象(有可能只包含一个接口,) 它的确切类型在编译时无法知道。这确实有些难度。要想构造一个实现这些接口的类,就需要使用 newlnstance 方法或反射找出这个类的构造器。但是, 不能实例化一个接口,需要在程序处于运行状态时...原创 2019-07-31 16:37:31 · 312 阅读 · 0 评论 -
java核心技术卷I-内部类
内部类内部类(inner class) 是定义在另一个类中的类。使用原因如下:1.内部类方法可以访问该类定义所在的作用域中的数据, 包括私有的数据。2.内部类可以对同一个包中的其他类隐藏起来。3.当想要定义一个回调函数且不想编写大量代码时,使用匿名 (anonymous) 内部类比较便捷。使用内部类访问对象状态public class TalkingClock{ private i...原创 2019-07-22 18:39:09 · 227 阅读 · 0 评论 -
java核心技术卷I-变量与常量
变量变量声明需要指定类型,例如Double salary;变量名对大小写敏感,如需使用变量,先要进行初始化,如:int vacationDays = 12;变量的声明尽可能地靠近变量第一次使用的地方, 这是一种良好的程序编写风格。常量关键字 final 指示常量,只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上,常量名使用全大写。一个类中的多个方法中使用常量,称为类...原创 2019-06-26 10:11:16 · 216 阅读 · 0 评论 -
java核心技术卷I-运算符
运算符算术运算符 +、-、 *、/ 表示加、减、 乘、除运算整数的求余操作(有时称为取模)用 % 表示整数被 0 除将会产生一个异常, 而浮点数被 0 除将会得到无穷大或 NaN 结果使用 strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果例如,可以把 main 方法标记为public static strictfp void main(String[] args...原创 2019-06-26 11:09:40 · 224 阅读 · 0 评论 -
java核心技术卷I-字符串及输入输出
字符串从概念上讲, Java 字符串就是 Unicode 字符序列子串String s = greeting.substring(0, 3);拼接Java语言允许使用 + 号连接(拼接)两个字符串int age = 13;String rating = "PC" + age;Java 文档中将 String 类对象称为不可变字符串,优点是编译器可以让字符串共享检验字符串是否相...原创 2019-06-26 14:44:13 · 317 阅读 · 0 评论 -
java核心技术卷I-数组
数组是一种数据结构, 用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值原创 2019-07-08 14:19:03 · 293 阅读 · 0 评论 -
java核心技术卷I-大数值
如果基本的整数和浮点数精度不能够满足需求, 那么可以使用java.math 包中的两个很有用的类:Biglnteger 和 BigDecimaL 这两个类可以处理包含任意长度数字序列的数值。Biglnteger 类实现了任意精度的整数运算, BigDecimal 实现了任意精度的浮点数运算。原创 2019-07-03 15:06:07 · 230 阅读 · 0 评论 -
java核心技术卷I-类与对象
类与对象类( class) 是构造对象的模板或蓝图。我们可以将类想象成制作小甜饼的切割机,将对象想象为小甜饼。由类构造(construct) 对象的过程称为创建类的实例 (instance ).对象对象的三个主要特性:对象的行为(behavior)可以对对象施加哪些操作,或可以对对象施加哪些方法?对象的状态(state )当施加那些方法时,对象如何响应?对象标识(ide...原创 2019-07-10 15:17:14 · 209 阅读 · 0 评论 -
java核心技术卷I-日期函数
日期函数java.time.LocalDate 8static LocalTime now( )构造一个表示当前日期的对象。static LocalTime of(int year, int month , int day )构造一个表示给定日期的对象。int getYear( )int getMonthValue( )int getDayOfMonth( )得到当前日期的...原创 2019-07-10 15:25:31 · 215 阅读 · 0 评论 -
java核心技术卷I-对象
对象构造有些类有多个构造器,同名不同参,这种成为函数的重载(overload)例如:indexOf(int)indexOf(int, int)indexOf(String)indexOf(String, int)当一个类没有声明任何构造器时,系统会默认生成一个无参构造器,里面的参数会按其数据类型默认一个初始值。当一个类声明至少一个构造器时,需要将无参构造器也声明出来,否则实例化类...原创 2019-07-15 16:48:37 · 203 阅读 · 0 评论 -
java核心技术卷I-接口
接口接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。接口可能包含多个方法。在接口中还可以定义常量, 然而, 更为重要的是要知道接口不能提供哪些功能。接口绝不能含有实例域, 在 JavaSE 8之前, 也不能在接口中实现方法。提供实例域和方法实现的任务应该由实现接口的那个类来完成。因此, 可以将接口看成是没有实例域的抽象类, 但是这两个概念还是有一定区别的。为了让类实...原创 2019-07-18 18:22:39 · 248 阅读 · 0 评论 -
java核心技术卷I-继承
继承人们可以基于已存在的类构造一个新类。继承已存在的类就是复用(继承)这些类的方法和域。在此基础上,还可以添加一些新的方法和域, 以满足新的需求。术语关键字 extends 表明正在构造的新类派生于一个已存在的类。 已存在的类称为超类( superclass)、 基类( base class) 或父类(parent class); 新类称为子类(subclass、) 派生类( derive...原创 2019-07-16 18:11:50 · 265 阅读 · 0 评论 -
java核心技术卷I-Object
Object: 所有类的超类Object 类是 Java 中所有类的始祖, 在 Java 中每个类都是由它扩展而来的。在 Java 中,只有基本类型 ( primitive types) 不是对象, 例如,数值、 字符和布尔类型的值都不是对象。equals 方法Object 类中的 equals 方法用于检测一个对象是否等于另外一个对象。在 Object 类中,这个方法将判断两个对象是否具...原创 2019-07-17 11:39:11 · 281 阅读 · 0 评论 -
java核心技术卷I-泛型数组列表
泛型数组列表Java 中另外一个被称为ArrayList 的类。它使用起来有点像数组,但在添加或删除元素时, 具有自动调节数组容量的功能,而不需要为此编写任何代码。ArrayList 是一个采用类型参数( type parameter ) 的泛型类( generic class)。为了指定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面, 例如,ArrayList。Array...原创 2019-07-17 15:20:01 · 237 阅读 · 0 评论 -
java核心技术卷I-lambda
lambda 表达式lambda 表达式就是一个代码块, 以及必须传人代码的变量规范。(String first, String second) -> first.length()- second.length()如果代码要完成的计算无法放在一个表达式中,就可以像写方法一样,把这些代码放在 {}中,并包含显式的 return语句(String first, String secon...原创 2019-07-19 18:18:21 · 313 阅读 · 0 评论 -
java核心技术卷I-包装器
对象包装器与自动装箱有时, 需要将 int 这样的基本类型转换为对象。 所有的基本类型都冇一个与之对应的类。例如,integer 类对应基本类型 int。通常, 这些类称为包装器 ( wrapper ) ,这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character 、Void 和 Boolean (前 6 个类派生于公共的超类...原创 2019-07-17 15:47:06 · 288 阅读 · 0 评论 -
java核心技术卷I-反射
反射能够分析类能力的程序称为反射(reflective )。反射机制的功能极其强大,在下面可以看到, 反射机制可以用来:1.在运行时分析类的能力。2.在运行时查看对象, 例如, 编写一个 toString 方法供所有类使用。3.实现通用的数组操作代码。4.利用 Method 对象, 这个对象很像中的函数指针。反射是一种功能强大且复杂的机制。 使用它的主要人员是工具构造者,而不是应用程...原创 2019-07-17 18:18:04 · 425 阅读 · 0 评论 -
java核心技术卷I-执行器
执行器构建一个新的线程是有一定代价的, 因为涉及与操作系统的交互。如果程序中创建了大量的生命期很短的线程,应该使用线程池( thread pool)。一个线程池中包含许多准备运行的空闲线程。将 Runnable 对象交给线程池, 就会有一个线程调用 run 方法。 当 run 方法退出时,线程不会死亡,而是在池中准备为下一个请求提供服务。另一个使用线程池的理由是减少并发线程的数目。创建大量线程...原创 2019-09-10 11:22:35 · 273 阅读 · 0 评论