前言
今天学姐教我们有关如何查看源代码的基本知识,我受益匪浅,接下来请允许我做一个陈述。
如何查看源代码
首先,打开你的IDEA,点击上方的“文件”,选择“项目结构”,点击“SDK”,你可以看到这些文件的具体路径。那么根据这些路径找到这些文件,再用IDEA打开。
还有一种,你可以在你安装IDEA的文件夹内,找到名为“lib”的文件夹,打开后即可看到名为“src.zip”的压缩包,可以将其解压,会出现名为“src”的文件夹,将其用IDEA打开,即可看到源代码。
一些代码的解释
有关源代码的解释,我的理解能力尚且不足,因此我只在能力范围内,尽量将其列举出来,仅供参考,还有一些是搜索后加上我的个人语言糅杂而成,如有错误,还请指出并谅解。(有些我其实闻所未闻,都是从其他大佬处照抄下来的,但好歹也能增长我的知识量)
public final class String implements java.io.Serializable, Comparable<String>, CharSequence, Constable, ConstantDesc {
[String 类表示字符串。 Java 程序中的所有字符串文字,例如“abc”,都是作为此类的实例实现的。字符串是常量;它们的值在创建后无法更改。字符串缓冲区支持可变字符串。因为 String 对象是不可变的,所以它们可以被共享。]
final决定了String类是不可继承的且对象是不可变的
实现了java.io.Serializable、Comparable和CharSequence共3个接口
String实现了序列化的接口Serializable,也就是说String是支持序列化和反序列化的。
Comparable这个接口只有一个compareTo(T 0)接口,用于对两个实例化对象比较大小。
CharSequence这个接口是一个只读的字符序列。包括length(), charAt(int index), subSequence(int start, int end)这几个API接口,值得一提的是,StringBuffer和StringBuild也是实现了改接口。
@Stable private final byte[] value;
[该值用来字符串存储]
是final修饰的数组,说明在创建后就不可更改
(以前是char[]型的,现在则用byte数组存储数据)
private final byte coder;
[用于对值中的字节进行编码的编码标识符。此实现中支持的值为 LATIN1 UTF16]
因为使用byte数组来存储数据,所以需要指定字符串的编码
private int hash;
[缓存字符串的哈希码]
private boolean hashIsZero;
[如果哈希值被计算为实际上为零,则缓存,使我们能够避免重新计算它。]
public String(char[] value, int offset, int count) { this(value, offset, count, rangeCheck(value, offset, count)); }
[分配一个新字符串,该字符串包含来自字符数组参数的子数组的字符。 offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。子数组的内容被复制;随后对字符数组的修改不会影响新创建的字符串。]
String的一个构造方法
rangeCheck就是检查了一下越界的问题
String类的源码有些多,也有些难(至少对于我这个层次来说),因此我仅列举以上几个,更多的我还要去更深入的看看。
此博文到此结束,谢谢。