String:
String共有15个构造函数 可以有string ,byte,char,stringbuffer,int
String类使用了final修饰符:final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类 如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
实现了Serializable, Comparable<String>, CharSequence接口
Comparable<T>: compareTo()
在string的compareTo实现中:
//anotherString 比较的字符串
public int compareTo(String anotherString) {
int len1 = count; //原对象的长度
int len2 = anotherString.count; //比较对象的长度
int n = Math.min(len1, len2); //判断谁的长度小一点
char v1[] = value; //原对象的值
char v2[] = anotherString.value; //比较对象的值
int i = offset; //原始对象初始值
int j = anotherString.offset; //比较对象的初始值
if (i == j) {
int k = i;
int lim = n + i;
while (k < lim) {
char c1 = v1[k]; //获得原对象char
char c2 = v2[k]; //获得比较对象的char
if (c1 != c2) { //原始对象和比较对象是否相等
return c1 - c2; //不相等直接返回比较的结果
}
k++;
}
} else { //当俩个初始位移量不相等时
while (n-- != 0) {
char c1 = v1[i++];
char c2 = v2[j++];
if (c1 != c2) {
return c1 - c2;
}
}
}
return len1 - len2; //原始对象和比较对象的长度之差 如果为0就表示相等
}
CharSequence:
length() 在string中的实现
public int length() { //返回字符串的长度
return count;
}
charAt()在string中的实现
public char charAt(int index) { //返回改索引的字符
if ((index < 0) || (index >= count)) {
throw new StringIndexOutOfBoundsException(index); //抛出字符串索引超出异常
}
return value[index + offset];
}
subSequence():在string中的实现
public CharSequence subSequence(int beginIndex, int endIndex) {
return this.substring(beginIndex, endIndex);
}
string中的substring方法实现:
public String substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > count) {
throw new StringIndexOutOfBoundsException(endIndex);
}
if (beginIndex > endIndex) {
throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
}
return ((beginIndex == 0) && (endIndex == count)) ? this :
new String(offset + beginIndex, endIndex - beginIndex, value); //从中可以看出 当我们使用的substring方法时还是重新new 对象所有效率不是太高.
}
toString()在string类中的实现
public String toString() { //返回当前的对象
return this;
}
indexOf()在string类中的实现:
static int indexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex) {
if (fromIndex >= sourceCount) {
return (targetCount == 0 ? sourceCount : -1);
}
if (fromIndex < 0) {
fromIndex = 0;
}
if (targetCount == 0) {
return fromIndex;
}
char first = target[targetOffset];
int max = sourceOffset + (sourceCount - targetCount);
for (int i = sourceOffset + fromIndex; i <= max; i++) {
/* Look for first character. */
if (source[i] != first) {
while (++i <= max && source[i] != first);
}
/* Found first character, now look at the rest of v2 */
if (i <= max) {
int j = i + 1;
int end = j + targetCount - 1;
for (int k = targetOffset + 1; j < end && source[j] ==
target[k]; j++, k++);
if (j == end) {
/* Found whole string. */
return i - sourceOffset;
}
}
}
return -1;
}
String类中的equlas()
public boolean equals(Object anObject) {
if (this == anObject) { //如果是对象 直接判断两个对象引用是否相等
return true;
}
if (anObject instanceof String) { //是字符串
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
讲讲Object类中的equlas()
public boolean equals(Object obj) { //直接比较的是两个对象的引用是否相等
return (this == obj);
}
Object类中的toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
---------------
自定义异常:
StringIndexOutOfBoundsException查看源码可知
public class StringIndexOutOfBoundsException extends IndexOutOfBoundsException {
public StringIndexOutOfBoundsException() {
super();
}
public StringIndexOutOfBoundsException(String s) {
super(s);
}
public StringIndexOutOfBoundsException(int index) {
super("String index out of range: " + index);
}
}
假设现在有一个我们自己的异常可以从Exception继承
分享到:
相关推荐
这里提到的"jdk源码(完整版)"提供了JDK的源代码,包括了最新的OpenJDK 1.8版本。OpenJDK是JDK的一个开源实现,由全球开发者社区共同维护,其源码公开使得开发者能够深入理解Java平台的工作原理。 1. **Java核心库...
这份"jdk源码 完整版"包含了javax、com、org、java、sun以及sunw等多个核心包下的源代码,为开发者提供了宝贵的参考和学习材料。 首先,我们来看看`java`包。这个包是Java语言最基础的部分,包含了语言的关键类库,...
《深入解析JDK8源代码:src.zip中的编程智慧》 在编程的世界里,Java Development Kit(JDK)是开发者的重要工具,它包含了Java运行环境和开发所需的各种库。JDK8作为Java的一个里程碑版本,引入了许多创新特性,如...
《深入解析JDK1.7源代码》 Java开发人员在面对面试时,经常会遇到关于JDK源码的问题。然而,对于大多数开发者来说,能够详细解答这些源码问题的人并不多。阅读并理解JDK源码,无疑能提升我们的技术水平,增强问题...
通过深入学习JDK 7的源代码,开发者可以更好地理解Java语言的工作原理,提高编程技能,并对新旧版本之间的差异有更清晰的认识。 在JDK 7中,主要的新特性包括: 1. **多 catch 语句**:在异常处理方面,JDK 7允许...
Java JDK源码是Java开发工具包的原始代码集合,它为开发者提供了深入理解Java平台工作原理的机会。JDK源码包含了许多核心类库,如`javax`、`com`、`org`、`java`以及`launcher`和`sunw`等包下的类和接口。这些源文件...
在Java编程领域,深入理解JDK源码是提升技术能力的重要途径。JDK11作为Java开发工具包的一个重要版本,引入了许多新特性和改进,为开发者提供了更高效、更安全的编程环境。本文将基于提供的jdk-11.0.4-src源码,对...
《深入解析JDK1.4.2源代码》 JDK1.4.2是Java开发工具包的一个重要版本,它的源代码对于理解Java语言的底层实现和优化有着极高的价值。本文将从核心组件、类库结构以及关键功能等方面,深入剖析JDK1.4.2的源代码,...
- **对象和类**:Java是面向对象的语言,类是其核心,JDK源码中包含了大量内置类,如`Object`、`String`、`Exception`等。 - **接口与多态**:`interface`定义了类的行为规范,多态性是Java的一大特性,体现在方法...
【标题】"jdk14的源码src文件"揭示了Java开发工具包(JDK)的第14个主要版本的源代码。JDK是Java编程语言的核心组件,包含了编译器、运行时环境和各种工具,使得开发者能够创建、运行和理解Java应用程序。 【描述】...
通过深入研究JDK源码,开发者可以提升对Java语言的掌握程度,从而更好地优化代码、解决复杂问题。 本书可能涵盖了以下几个主要的知识点: 1. **Java虚拟机(JVM)**:JVM是Java程序的执行引擎,负责解释字节码并将...
**JDK1.6源代码详解** JDK(Java Development Kit)是Oracle公司提供的Java编程环境,包含了编译器、运行时环境、调试工具和其他实用工具。JDK1.6,也被称为Java SE 6,是Java历史上的一个重要版本,发布于2006年,...
在JDK 1.6中,你可以在这里找到如Object、String、ArrayList、HashMap等基础类的源代码,这些是构建任何Java程序的基础。 **6. org 文件夹** org目录通常包含开源组织或标准组织提供的库。在JDK 1.6中,org可能包含...
OpenJDK 是由 Sun Microsystems 开始的项目,后来被甲骨文公司接手,并且遵循 GPL2 许可协议,允许开发者自由地查看、修改和发布其源代码。JDK 是开发和运行 Java 应用程序所需的一组工具和库的集合,包括 JRE(Java...
在Java开发中,深入理解JDK的源代码是提升编程技能的重要步骤。JDK,全称为Java Development Kit,是Oracle公司提供的Java编程语言的标准开发工具集。它包含了编译器、运行时环境以及一系列用于创建和运行Java应用...
通过研究JDK源码,我们可以了解到Java的内部工作机制,这对于优化代码性能、解决复杂问题、编写高效算法都大有裨益。深入学习这些源码,将使你成为一个更资深的Java开发者,并能更好地理解和利用这个强大的平台。
《深入解析JDK 6.0/1.6源代码》 JDK 6.0,也称为JDK 1.6,是Java发展历程中的一个重要里程碑。它包含了丰富的API和核心库,为...无论是对于初学者还是经验丰富的开发者,深入探索JDK源码都是提升自身能力的重要途径。
Java JDK中的源代码是学习和理解Java编程语言及其运行机制的关键资源。这些源文件包含了Java开发工具集(Java Development Kit)的核心类库...对于想要成为Java专家的人来说,直接阅读和理解JDK源码是必不可少的一步。
通过阅读和分析JDK源码,开发者可以更深入地理解Java语言的工作原理,学习如何实现高效、可靠的代码。这对于提升编程技巧,解决复杂问题,甚至是开发自己的Java库都有极大的帮助。同时,了解JDK源码也能帮助开发者更...
通过查看源码,我们可以了解到异常的抛出、捕获、堆栈跟踪等内部工作原理,这有助于编写健壮的异常处理代码。 通过对JDK1.6源码的深入学习,开发者不仅可以掌握Java语言的基础,还能洞悉其内部机制,为解决实际问题...