
Java
文章平均质量分 69
五道口纳什
wx公众号/B站:五道口纳什
展开
-
Serializable 接口与 Java 序列化与反序列化
0. 序列化的意义 从内存到本地即为本地化或者在网络中进行传输,或叫序列化,持久化。某 Java 类实现 Serializable 接口的目的是为了可持久化(简单理解为本地化),比如网络传输或本地存储,为系统的分布式运行和异构部署提供先决支持条件。若没有序列化,我们熟悉的远程调用(RPC,无法读取远程主机内存中的任何目标,必须首选在远程将目标序列化),对象数据库都不可能存在。1. 一个简单 d原创 2017-09-12 00:01:19 · 948 阅读 · 0 评论 -
Java、JVM、JRE、JDK等组件的理解
0. 虚拟机Java 有它的虚拟机:Java 虚拟机(JVM); 在多个平台上实现统一语言,屏蔽和透明的是平台细节;.net 也有它自己的虚拟机; 可在单一平台上实现多种语言,屏蔽和透明的是不同语言的语言细节;所谓虚拟机 virtual machine,也即是对 machine(硬件)的软件抽象,也即是一种抽象的计算机;虚拟机的定义是什么呢,也即如何构成虚拟机,基本概念都有什么? 指令原创 2017-03-07 10:08:28 · 997 阅读 · 0 评论 -
Java 技术体系(JDK 与 JRE 的关系)、POJO 与 JavaBeans
Java 技术体系的分层结构(不同的颜色表示不同的层次),尤其注意 JDK 与 JRE 之间的包含关系: 图见 Java Platform Standard Edition 7 DocumentationJDK (Java Development Kit,其中 Kit 有工具箱、集合体、完整的一揽子解决方案的含义),是用于支持 Java 程序开发的最小环境。包括: Java 程序设计语言;原创 2017-08-18 20:29:21 · 845 阅读 · 0 评论 -
jar 包的认识与处理、jar 文件 war 文件以及 ear 文件
1. jar 包将 jar 包解压,其实是该类(.java)编译好的(.class)文件。(1)包路径(2)META-INF 文件夹原创 2017-07-04 18:46:23 · 859 阅读 · 0 评论 -
Java 格式化输出
printf("%4d\n", 12345); // 12345printf("%6d\n", 12345); // _12345 // 前边会留有一个空格 // 不足用空位补上printf("%06d\n", 12345); // 01原创 2016-01-23 21:24:11 · 986 阅读 · 0 评论 -
Effective Java(二)—— 循环与 StringBuilder
当需要为一个类编写 toString() 方法时,如果字符串操作比较简单,便可以信赖编译器,它会为你合理地构造最终的字符串结果(而不会不断创建冗余的中间变量)。String mongo = "mongo";String s = "abc" + "mongo" + "def" + 47; // StringBuilder.apppend("abc").append(mongo).ap原创 2017-07-29 16:53:32 · 940 阅读 · 0 评论 -
java 基础 —— 文件操作(File)
1. 基本成员:File.separatorpublic class File implements Serializable, Comparable<File>{ private static final FileSystem fs = DefaultFileSystem.getFileSystem(); public static final String separ原创 2017-08-28 20:19:54 · 871 阅读 · 0 评论 -
java.util —— 工具类
工具类的存在,是为了平衡,Java 彻底的面向对象(everything is object. 的极端;),也即并非所有的东西都可抽象为类的,但又要有类的形式,工具类便由此诞生。(1)工具类不做实例化,工具类中可调用的成员函数均为static,即通过工具类的类名即可访问;原创 2016-03-09 16:16:15 · 1041 阅读 · 0 评论 -
Java 并发 —— yield/sleep、wait/notify、join
import java.util.Timer;import java.util.TimerTask;public class Timer { .... public void schedule(TimerTask task, long delay) { .... } ....}public abstract class TimerTask impl原创 2017-08-27 22:57:54 · 820 阅读 · 0 评论 -
Java 基础 —— 注解
注解,是一种元数据(metadata),可为我们在代码中添加信息提供了一种形式化的方法。注解在一定程度上实现了元数据和源代码文件的结合,而不是将元数据保存在外部文档中。Java SE5 在 java.lang 中定义的三种基本注释:@Override@Deprecated@SuppressWarnings原创 2017-08-17 23:29:23 · 749 阅读 · 0 评论 -
Java 反射 —— 运行时的类型信息
1. 反射机制的由来RTTI 机制可以告知某个对象的确切类型,但有一个前提,该类型在编译时必须已知(编译器在编译时打开和检查 .class 文件以获取类型信息)。似乎是个很宽松的限制,但假如你获取了一个指向并不在你的程序空间的对象的引用,也即编译期间无法获知该对象所属的类,等到程序真正运行起来时,才有可能。比如,在网络连接中获取了一串(事先不被预知)的字节,并被告知这些字节代表着一个类。然而该类在为原创 2017-08-21 22:36:03 · 969 阅读 · 0 评论 -
Java 网络处理(net io URL 等)
1. URL 类URL 类的两个重要方法:openStream():打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。URL url = new URL("http://www.baidu.com");InputStream inStream = url.openStream();byte[] buffer = new byte[1024];ByteArrayOut原创 2017-10-01 23:35:12 · 727 阅读 · 0 评论 -
Java 高阶 —— native 关键字与 JNI
1. JNIJava中JNI的使用详解第一篇:HelloWorld JNI:Java Native Interface,Java 本地接口(或本机接口,更具体地讲叫本地编程接口),其提供了若干 API 以实现 Java 与其他语言的通信(主要是 C/C++)。使用 java 与本地已编译的代码交互,通常会丧失平台可移植性。2. native 关键字 Java中native关键字 native关键字说原创 2017-10-11 19:48:13 · 914 阅读 · 0 评论 -
Java 接口(interface)的三种类型
1. 包含抽象方法的2. 全部是常量的3. 空接口(null interface)空接口也称为标示接口(marker interface),其功能如下:做标志(marker)用。可在逻辑上让几个类都成为这个接口的子类;// null interfacepublic interface EnvironmentObject{}// public interface Agent extends E原创 2017-07-28 11:11:30 · 2755 阅读 · 1 评论 -
Java 容器的使用及数组、List、Set 的相互转换
0. Utils数组复制:system.arraycopy:必须明确自行建立一个数组对象,int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[5];System.arraycopy(arr1, 0, arr2, 0, arr1.length);Arrays.copyOf:可直接传回一个数组对象:int[] arr1 = ...原创 2018-06-10 19:21:35 · 1985 阅读 · 0 评论 -
java 语法 —— final
final 成员变量的初始化问题;1. 实现特别的约束和限制指向一个 static 型私有成员(仅调用一次),public class Coffee { private static long counter = 0; private final long id = counter++; public String toString() {原创 2017-07-25 14:49:33 · 957 阅读 · 0 评论 -
Java IO(输入输出)
1. System.out、System.inSystem 内部:public final static InputStream in = null;public final static PrintStream out = null;二者均是实例化后的对象;2. PrintStream、PrintWriterWriting to console with Syste原创 2017-11-04 22:00:49 · 755 阅读 · 0 评论 -
Java 内部类
内部类是在类级别(逻辑相关的类)上的封装,实现类名隐藏和进一步封装代码。内部类不同于组合。内部类与外部类的通信。1. 链接到外部类(enclosing object)当生成一个内部类的对象时,此对象与制造它的外为对象(enclosing object)之间就有了一种关系,它能访问其外围对象的所有成员,而无需任何条件。内部类拥有其外围类的所有元素的访问权(闭包机制,这与 C++ 的嵌套原创 2017-08-19 16:56:26 · 786 阅读 · 0 评论 -
HashMap(HashSet)的实现
0. HashMap(TreeMAP)、HashSet、HashTable 的关系HashMap 的底层则维护着 Node[] table; 一个一维数组用于快速访问(只在初次使用时进行初始化,当需要扩容时,When allocated, length is always a power of two.)static class NodeK,V> implements Map.Entry原创 2018-02-02 23:54:18 · 1143 阅读 · 0 评论 -
eclipse 环境 JUnit 测试框架(junit.framework.* 与 org.junit.*)
如下所示,先通过 build path 导入 junit 环境依赖的 jar 包: 1. junit.framework.*junit.framework.* 主要类和函数: TestTestCaseTestSuite实现并运行(run as => Java Application,因其有 java 应用所需的入口函数:main 函数)如下的代码:import原创 2018-01-19 00:36:59 · 2007 阅读 · 0 评论 -
Java 代码复用 —— 泛型
public interface Comparable { public int compareTo(T o);}1. 接口(Comparable:可比较接口)public static boolean less(Comparable v, Comparable w) { return v.compareTo(w) 0;}当然也可以将参数中的 Comparab原创 2018-01-22 23:41:41 · 1141 阅读 · 1 评论 -
Java 系统工具类 —— System、Scanner、Runtime
0. 静态成员变量System.out:是 PrinterStream 型变量:public final class System { ... public final static InputStream in = null; ...}1. 静态成员函数System.getProperty() 获取当前项目的工作路径:System.getPr...原创 2017-08-17 22:45:24 · 958 阅读 · 0 评论 -
日志的打印 —— Java 支持
1. java.util.logging.Logger日志级别(logLevel) OFF,Integer.MAX_VALUESEVERE,1000WARNING,900INFO,800CONFIG,700FINE,500;FINER,400;FINEST,300ALL,Integer.MIN_VALUE2. 一个自定义的异常类public class Log...原创 2017-10-14 22:14:02 · 1054 阅读 · 0 评论 -
Java 高阶 —— 相等性比较
1. 包装类所有的相同类型的包装类对象之间的值的比较,全部使用 equals 方法;对于 Integer a = ?,在 -128 到 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产生,便会复用已有对象,该区间内的 Integer 值可以直接使用 == 判断,但该区间外的所有数据,都会在堆上产生,并不会复用已有对象。Integer a = 100;Int原创 2017-10-11 22:20:04 · 823 阅读 · 1 评论 -
Java 高阶 —— try/catch
// try catch 在 for 循环外try { for(int i = 0; i < max; i++) { String myString = ...; float myNum = Float.parseFloat(myString); myFloats[i] = myNum; }} catch (Numbe原创 2017-10-11 20:25:30 · 1052 阅读 · 0 评论 -
java 语法 —— 数组
1. 编译器不允许指定数组的大小int[] a1;既然编译器不允许指定数组的大小,现在 a1 拥有的只是对数组的一个引用,且未给该数组对象本身分配任何空间。为了给数组创建对应的存储空间,必须写初始化表达式。int[] a1 = {1, 2, 3, 4, 5};那么,为什么还在没有数组的时候定义一个数组引用呢?int[] a2;在 Java 中可以将一个数组赋值给另一个数组:a2 = a1;这样真正实原创 2017-08-27 16:15:56 · 944 阅读 · 0 评论 -
Java 基础 —— enum
1. 将 enum 视为一种特殊的类也即可在其中添加成员方法,甚至 main() 方法。一般来说,我们希望每个枚举类型能够返回对自身的描述,而不仅仅是默认的 toString() 实现(只能返回枚举实例的名字)。为此,可以提供一个构造器,专门负责处理这个额外的描述信息。原创 2017-08-21 22:03:09 · 804 阅读 · 0 评论 -
Java 下的函数对象
1. 举例如我们要创建一个对大小写敏感的,按照字母序排序的 Set,我们需要向 Set 的构造器传入 String.CASE_INSENTIVE_ORDER 的比较器;Set<String> words = new TreeSet<String>(String.CASE_INSENTIVE_ORDER);words.addAll(List<String>(...));其中 String.CASE_原创 2017-08-14 23:23:58 · 1502 阅读 · 0 评论 -
RPC(远程过程调用)原理及应用
RPC(Remote Procedure Call Protocol)——远程过程调用协议。所谓远程过程调用,也即是远程调用过程,它是一种通过网络从远程计算机程序上请求服务(某一过程),而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC采用客户机/服务器模式。请求程序就是一个客户机原创 2016-03-14 08:24:21 · 2267 阅读 · 0 评论 -
如何将 hadoop1.1.2/1.2.1 源码关联到 Eclipse
最为关键的一点,jre 的版本不宜过高,有一点明确的是,jre6 是可用的,jre8 是出编译错误的。step 1:新建工程,设置 jre 的版本 并下调编译级别: step 2:拷贝 hadoop 源码到srchadoop 的源码我们主要关心的是hadoop 的 src 目录下的 core、hdfs、mapred 三个文件夹下的内容:我们将其拷贝到 hadoop-1.1.2 工程的原创 2016-03-14 12:30:43 · 1565 阅读 · 0 评论 -
JDK 的安装
(1)命令行查看 Java 版本 JDK & JRE安装 JDK 的时候可以分别指定 jdk 和 jre 的安装路径 比如将 jdk 装在 D:\program files\Java,将 jre 装在 C:\program files\Java, 顺序上是先装 jdk,再装 jre。(1)安装 jdk,路径可选 (2)安装 jre,路径可选 多版本因为文件不是覆盖,而是放在原创 2016-03-14 09:59:39 · 1047 阅读 · 0 评论 -
Hadoop HDFS 的 Java API 操作方式
想要使用Java API 的方式操作 Hadoop,尤其是hdfs(hadoop file system),必然需要引入jar包(jar包提供了丰富的API)。点中工程名,alt+enter,进入工程属性页,点击【Java Build Path】,点击【Libraries】,我们要引入外部的Jar包,点击【Add External JARs …】。导入的外部Jar包分为两部分(避免出现依赖原创 2016-03-09 15:21:39 · 1099 阅读 · 0 评论 -
Java 线程——Timer & TimerTask
Java 实现线程的三种方式:继承自 Thread 类继承自 Runnable 类Timer/TimerTaskTimer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。一个Timer可以调度任意多个TimerTask,原创 2016-03-13 09:57:53 · 1041 阅读 · 0 评论 -
Java——一种彻底的面向对象语言
在 Java 世界里,Everything is object。也就意味着 Java 是一种彻底的面向对象语言,彻底对应着everything。使用 Java 无论想实现何种代码逻辑,首先需要定义类,而对象是类的实例化。没有类与对象,一切寸步难行。程序逻辑依赖对象的创建。类的抽象和定义是一切的起点,不仅如此,类包括成员变量和成员方法,类是对成员变量的封装,成员方法围绕成员变量展开,一个好的类设计与原创 2016-03-08 20:44:57 · 2088 阅读 · 0 评论 -
Java 字符串(一条日志信息)解析实例
Java 基础——日期(Date)的解析 如下为 Apache common 生成的日志信息格式:27.19.74.143 - - [30/May/2013:17:38:20 +0800] \"GET /static/image/common/faq.gif HTTP/1.1\" 200 1127分别表示:访问ip、访问时间、访问资源、访问状态、本次流量; 也即:27.19.74.143, 201原创 2016-03-16 09:57:01 · 1833 阅读 · 1 评论 -
Effective Java(一)—— 创建和销毁对象
在客户端(调用端)获取自身实例的方法:公有的构造器;类的静态工厂方法;1. 使用静态工厂方法代替构造器Boolean 是对基本类型 boolean 的包装类;原创 2017-06-29 16:53:22 · 782 阅读 · 0 评论 -
Java 工程与 Eclipse 高级用法
0. 显示各种视图(perspective)及工具窗口【Window】⇒ 【Perspective】⇒ 【Open perspective】⇒ other(如下图所示): 【Window】⇒ 【Show View】(工具窗口)ConsoleProblems(该视图窗口会给出错误的详细信息)1. Java 工程.classpath 文件:定义了 .jar 包的路径;.project:项目原创 2017-08-15 23:17:43 · 1027 阅读 · 0 评论 -
java 中的静态(static)代码块
1. static{} 静态代码块与 {} 非静态代码块二者均是在 JVM 加载类时,且在构造函数执行之前执行,在类中可以定义多个, 一般在代码块中对一些 static 变量进行赋值;静态代码块的执行顺序要先于非静态代码块(静态代码块 ⇒ 非静态代码块 ⇒ 构造方法)静态代码块仅在第一次调用 new 时仅执行一次,之后不再执行,而非静态代码块在每 new 一次就执行一次, 非静态代码块可在普原创 2017-07-19 15:57:57 · 1064 阅读 · 0 评论 -
Java 相关计数问题及其实现
数(三声)数(四声)问题自然使用非负整数;0. 一个类作为一个计数器java 语法 —— finalclass Counter { private static long counter; private final long id = counter ++; @Override public String toString() { return ge原创 2017-08-19 16:08:03 · 1045 阅读 · 0 评论 -
.class 字节码文件与Java RTTI(类型信息)(.class 类对象)
RTTI:Run-Time Type Information,关键词在 Run-Time,运行时的,而非编译期确定的关于类型的信息。运行时的类型信息(RunTime Type Information)使得可在程序运行时发现、识别和使用类型信息。Java 在运行时识别对象和类的信息,主要包括以下两种方式:“传统的”RTTI,假定我们在编译期即已知道所有的类型;“反射”机制,允许在运行时发现和使用类原创 2017-07-19 13:17:10 · 815 阅读 · 0 评论