Tag: java

  1. Java中的字符串操作

    本文基于JDK 1.8.0_45 在编程世界中使用最多的数据是数值和字符串,下面就让我们来聊聊Java中的字符串操作。 所谓字符串,就是一串有序的字符。在Java中字符串的数据类型分为了两种,可变字符串和不可变字符串。可变字符串包括StringBuilder和StringBuffer,不可变字符串是String。它们都实现了接口CharSequence。 CharSequence接口 在CharSequence中定义了字符序列操作的一系列方法,如下所示: int length();// 长度 char charAt(int index);// index位置的字符 CharSequence subSequence(int start, int end);// start到end位置之间的子CharSequence String toString();// 包含CharSequence中字符的String default IntStream chars();// 默认方法,返回一个IntStream。Stream是在JDK1.8中才引入的feature StringBuilder和StringBuffer StringBuilder和StringBuffer都继承自AbstractStringBuilder抽象类,并实现了CharSequence接口和序列化接口Serializable。AbstractStringBuilder实现了CharSequence接口和Appendable接口,因此StringBuilder和StringBuffer均可用来表示一个字符串,同时还可以在声明之后在末尾添加新的字符或字符串从而修改原有的字符串。在AbstractStringBuilder中实现了各种各样的append方法和insert方法,另外还包含了一些其他的工具方法,…

    on java string StringBuilder StringBuffer intern

  2. Java数据类型

    本文基于JDK 1.8.0_45 基本数据类型 Java中的基本数据类型及其所占字节大小如下所示。基本数据类型是在栈中字节分配内存,其中一个char为两个字节,这样一个char中即可存储一个中文汉字。 类型 字节 byte 1 char 2 short 2 integer 4 long 8 float 4 double 8 boolean 1/8 注:1 byte是8 bits 在定义long的时候需要在数字末尾加上l或者L,在定义float的时候可以在数字末尾加上f或者F(默认如果数字中有小数点则为float),在定义double的时候需要在数字末尾加上d或者D。一般建议在数字末尾加上大写字母来标示数据类型,这是因为特别是小写字母l和数字1在印刷体中较难区分,使用大写字母L更易于阅读。如: byte b = 1; char c = 1; short s = 1;…

    on java 数据类型 number character

  3. Java中的异常

    本文基于JDK 1.8.0_45 Throwable架构是非常经典的继承结构: 所有的广意的异常都是Throwable的子类,通过继承的树状结构来对异常进行分类,比如异常分为两大类,Error和Exception,其中Exception又分为检查异常和运行期异常,每一个分支又是细化的一类异常。 在Throwable中定义大多数关于异常处理的方法,并提供部分接口给子类重写。 一般都可以从异常命名中看出来其作用是什么,因此当我们自定义异常的时候也最好遵循这一命名规则。 printStackTrace方法有PrintWriter和PrintStream两种参数的重载方法,源码中通过自定义的PrintStreamOrWriter内部类的两种子类分别对这两种类型的参数进行封装,并通过统一接口提供lock和println的方法,通过这种方式避免了复制代码来分别实现相似的功能。该方法通过递归遍历并打印自己的异常堆栈、suppressed异常堆栈和cause异常堆栈。 从1.7版本开始添加了两个API方法:addSuppressed和getSuppressed来解决存在多个异常抛出的场景(如try-with-resources)。其中try-with-resources的字节码大概是下面的样子,有可能会出现两个异常,一个是try块中的异常,一个是调用close方法时抛出的异常。使用suppressed就可以避免前一个异常被丢弃而无法找到真正的异常原因的问题。 try{ throw new Throwable(); }catch(Throwable e) { try { resource.close(); }catch(Throwable suppressedException) { e.addSuppressed(suppressedException); throw e; } throw…

    on java 异常 exception Throwable 循环依赖

  4. 一切的起源——Object

       区分一个Java程序员是初级还是中级最好的方法就是问他Object类中的方法都知道哪些。这个问题我曾经在面试中问过很多人,发现真正能回答上来的并不多。有人反问我Object是什么,有人说除了toString其他不清楚……下面来看看Object中都有哪些方法。 一、toString    从API中可以看到默认toString方法返回的是class name和16进制的hash code的组合。 return getClass().getName() + "@" + Integer.toHexString(hashCode()); 二、hashCode和equals hashCode的协议: 1. hashCode提供了对HashMap、HashTable的支持; 2. 对于同一个对象执行hashCode多次,应该返回同样的结果; 3. 对于两个相等的对象,他们的hashCode也应该一致; 4. 对于两个不相等的对象,他们的hashCode可以相等,但最好不相等,这样可以增强HashMap的性能。 下面是equals和hashCode的例子: public class MyObject { private long id; private String name;…

    on java