数组是Java中的一种容器对象,它拥有多个单一类型的值。当数组被创建的时候数组长度就已经确定了。在创建之后,其长度是固定的。下面是一个长度为10的数组: public class ArrayDemo { private int arraySize=10; public int[] arrayOfIntegers = new int[arr...
JAVA
Java 模块化系统自提出以来经历了很长的时间,直到 2014 年晚些时候才最终以 JSR(JSR-376) 定稿,而且这个部分有可能在 Java 9 中出现。但是一直以来都没有可以使用的原型。9 月 11 日,OpenJDK 发布的早期构建版本终于包含了 Jigsaw 项目。 昨天,本人和...
Java 的基本数据类型(int、double、 char)都不是对象。但由于很多Java代码需要处理的是对象(Object),Java给所有基本类型提供了包装类(Integer、Double、Character)。有了自动装箱,你可以写如下的代码 Character boxed = 'a'; char unboxed = boxed;...
缓冲区(buffer)是从即将写入通道(channel)或刚刚从通道中读出的一段数据。它是一个持有数据,并扮演NIO通道端点的对象。缓冲区为数据访问和读写过程提供正式机制。 它是NIO和老版Java I/O的一个主要区别。之前数据是直接从流(stream)中读写的,现在数...
引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能...
Java 是在世界各地最流行的编程语言之一, 但是看起来没人喜欢使用它。而 Java 事实上还算是一门不错的语言,随着 Java 8 最近的问世,本人决定编制一个库,实践和工具的清单,汇集 Java 的一些最佳实践。 ITJS的这篇文章被放到了 Github 上。你可以随意地提...
概要:最简单优雅的使用反射。 ITJS的这篇文章的例子都可以在示例代码中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request。ITJS的这篇文章的示例代码主要是基于jOOR行编写的,如果想了解更多请查看这里的测...
这篇文章节选自《java performance》,对java性能比较关心的同学大概都知道这本书,性能这个东西可能是很多同学在日常写java code的时候很少去关心的,但是在各位同行写code的过程中确又时时离不开对程序性能的影响,小到各位同行使用位运算来实现算术运算,...
动态代理(Dynamic proxies)是 Java 1.3 引入的特性,在 J2EE 的远程调用中应用非常广泛。给定一个抽象接口以及这个接口的具体实现,就可以通过创建两个额外的类来实现这个接口的远程调用了(如,跨JVM)。首先,在源JVM上实现相应的接口,并将调用细节序列...
前言 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 各位同行才认为它符合Google的Java编程风格。 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。然...
在应用中,各位同行往往需要一个常量文件,用于存储被多个地方引用的共享常量。在设计应用时,本人也遇到了类似的情况,很多地方都需要各种各样的常量。 本人确定需要一个单独的文件来存储这些静态公共常量。但是本人不是特别确定是应该用接口还是类(枚举不...
数组是大多数编程语言提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组。Java语言的数组变量是引用类型的变量,因此具有Java独有的特性。 在正常的Java开发中,使用Java数组之前,各位同行都会对数组进行初始化,为数组中的元...
继上篇文章介绍完了HashMap,这篇文章开始介绍Map系列另一个比较重要的类TreeMap。 大家也许能感觉到,网络上介绍HashMap的文章比较多,但是介绍TreeMap反而不那么多,这里面是有原因:一方面HashMap的使用场景比较多;二是相对于HashMap来说,TreeMap所用到...
概述 ITJS的这篇文章重点讲述javaagent的具体实现,因为它面向的是各位同行Java程序员,而且agent都是用Java编写的,不需要太多的C/C++编程基础,不过这篇文章里也会讲到JVMTIAgent(C实现的),因为javaagent的运行还是依赖于一个特殊的JVMTIAgent。 对于java...
最近工作里复习的Class Loader基础知识集锦,写下来希望对别人有帮助,而且不止是为了撂倒面试官。 为了尽量简单明了容易背,有些部分写得比较干。 0. 参考资料: 书:《深入了解Java虚拟机》、《实战Java虚拟机》 规范: Java语言规范 第12章 源码: OpenJ...
假如你在linux系统下使用Eclipse开发一个Java项目,你可能会有从其他地方远程连接这个项目的需求。或许你可以使用teamviewer远程连接linux桌面,但那经常会非常龟速。你也可以从常规的ssh终端修改、编译并运行你的Java项目。使用终端修改、编译并运行远程ecli...
1、带着疑问看图 1)竞争对象的锁和竞争CPU资源以及竞争被唤醒 2)何种情况下获取到了锁,何种情况下会释放锁 2、还是那张图 3、详细图解 1)Thread t = new Thread(),初始化一个线程,实际上就是一个普通对象,此时他的状态为New 2)t.start(); 线程处于...
继上一篇文章Java集合框架综述后,今天正式开始分析具体集合类的代码,首先以既熟悉又陌生的HashMap开始。 签名(signature) public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable 可以看到...
最近被陆陆续续问了几遍HashMap的实现,回答的不好,打算复习复习JDK中的集合框架,并尝试分析其源码,这么做一方面是这些类非常实用,掌握其实现能更好的优化各位同行的程序;另一方面是学习借鉴JDK是如何实现了这么一套优雅高效的类库,提升编程能力。 在...
一、引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊。闲话不多说,进入正题。 二、为什么要线程同步 因为当各位同行有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导...
面试的时候,栈和队列经常会成对出现来考察。ITJS的这篇文章包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要求min、push、pop、的时间复杂度都是O(1)...
GSON是Google开发的Java API,用于转换Java对象和Json对象。ITJS的这篇文章讨论并提供了使用API的简单代码示例。更多关于GSON的API可以访问:http://sites.google.com/site/gson/. ITJS的这篇文章是GSON系列文章的第一篇。ITJS的这篇文章是其他文章的基础,...
Java Json API:Gson使用简单入门 通过调用 Gson API 可以把 Java 对象转换为 JSON 格式的字符串(项目主页)。在这篇文章中,各位同行将会讲到如何通过 Gson 默认实现和自定义实现方式,将 Java 对象转换为 JSON 字符串。 对于那些不熟悉 Gson 的读者,建...
引言 ThreadLocal的官方API解释为: “该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 priva...
JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一。但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度。 在ITJS的这篇文章中,各位同行将介绍一些简单的方法来验证你的程序是...