`
zeng7960983
  • 浏览: 43951 次
  • 性别: Icon_minigender_1
  • 来自: 邵阳
社区版块
存档分类
最新评论

String jdk源码查看

    博客分类:
  • java
阅读更多
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源码(完整版)"提供了JDK的源代码,包括了最新的OpenJDK 1.8版本。OpenJDK是JDK的一个开源实现,由全球开发者社区共同维护,其源码公开使得开发者能够深入理解Java平台的工作原理。 1. **Java核心库...

    jdk 源码 完整版

    这份"jdk源码 完整版"包含了javax、com、org、java、sun以及sunw等多个核心包下的源代码,为开发者提供了宝贵的参考和学习材料。 首先,我们来看看`java`包。这个包是Java语言最基础的部分,包含了语言的关键类库,...

    jdk源代码src.zip

    《深入解析JDK8源代码:src.zip中的编程智慧》 在编程的世界里,Java Development Kit(JDK)是开发者的重要工具,它包含了Java运行环境和开发所需的各种库。JDK8作为Java的一个里程碑版本,引入了许多创新特性,如...

    jdk1.7源代码

    《深入解析JDK1.7源代码》 Java开发人员在面对面试时,经常会遇到关于JDK源码的问题。然而,对于大多数开发者来说,能够详细解答这些源码问题的人并不多。阅读并理解JDK源码,无疑能提升我们的技术水平,增强问题...

    jdk7源代码

    通过深入学习JDK 7的源代码,开发者可以更好地理解Java语言的工作原理,提高编程技能,并对新旧版本之间的差异有更清晰的认识。 在JDK 7中,主要的新特性包括: 1. **多 catch 语句**:在异常处理方面,JDK 7允许...

    java JDK 源码

    Java JDK源码是Java开发工具包的原始代码集合,它为开发者提供了深入理解Java平台工作原理的机会。JDK源码包含了许多核心类库,如`javax`、`com`、`org`、`java`以及`launcher`和`sunw`等包下的类和接口。这些源文件...

    JDK11源码 jdk-11.0.4 src源码

    在Java编程领域,深入理解JDK源码是提升技术能力的重要途径。JDK11作为Java开发工具包的一个重要版本,引入了许多新特性和改进,为开发者提供了更高效、更安全的编程环境。本文将基于提供的jdk-11.0.4-src源码,对...

    jdk1.4.2源代码

    《深入解析JDK1.4.2源代码》 JDK1.4.2是Java开发工具包的一个重要版本,它的源代码对于理解Java语言的底层实现和优化有着极高的价值。本文将从核心组件、类库结构以及关键功能等方面,深入剖析JDK1.4.2的源代码,...

    JDK源码,整合所有内容

    - **对象和类**:Java是面向对象的语言,类是其核心,JDK源码中包含了大量内置类,如`Object`、`String`、`Exception`等。 - **接口与多态**:`interface`定义了类的行为规范,多态性是Java的一大特性,体现在方法...

    jdk14的源码src文件

    【标题】"jdk14的源码src文件"揭示了Java开发工具包(JDK)的第14个主要版本的源代码。JDK是Java编程语言的核心组件,包含了编译器、运行时环境和各种工具,使得开发者能够创建、运行和理解Java应用程序。 【描述】...

    深入浅出JDK源码

    通过深入研究JDK源码,开发者可以提升对Java语言的掌握程度,从而更好地优化代码、解决复杂问题。 本书可能涵盖了以下几个主要的知识点: 1. **Java虚拟机(JVM)**:JVM是Java程序的执行引擎,负责解释字节码并将...

    JDK1.6 源代码

    **JDK1.6源代码详解** JDK(Java Development Kit)是Oracle公司提供的Java编程环境,包含了编译器、运行时环境、调试工具和其他实用工具。JDK1.6,也被称为Java SE 6,是Java历史上的一个重要版本,发布于2006年,...

    jdk1.6源码包

    在JDK 1.6中,你可以在这里找到如Object、String、ArrayList、HashMap等基础类的源代码,这些是构建任何Java程序的基础。 **6. org 文件夹** org目录通常包含开源组织或标准组织提供的库。在JDK 1.6中,org可能包含...

    openjdk8u60+jvm jdk源码+jvm源码

    OpenJDK 是由 Sun Microsystems 开始的项目,后来被甲骨文公司接手,并且遵循 GPL2 许可协议,允许开发者自由地查看、修改和发布其源代码。JDK 是开发和运行 Java 应用程序所需的一组工具和库的集合,包括 JRE(Java...

    JDK各种类、方法源代码

    在Java开发中,深入理解JDK的源代码是提升编程技能的重要步骤。JDK,全称为Java Development Kit,是Oracle公司提供的Java编程语言的标准开发工具集。它包含了编译器、运行时环境以及一系列用于创建和运行Java应用...

    jdk源码的另一部分

    通过研究JDK源码,我们可以了解到Java的内部工作机制,这对于优化代码性能、解决复杂问题、编写高效算法都大有裨益。深入学习这些源码,将使你成为一个更资深的Java开发者,并能更好地理解和利用这个强大的平台。

    jdk1.6/6.0源代码src.zip

    《深入解析JDK 6.0/1.6源代码》 JDK 6.0,也称为JDK 1.6,是Java发展历程中的一个重要里程碑。它包含了丰富的API和核心库,为...无论是对于初学者还是经验丰富的开发者,深入探索JDK源码都是提升自身能力的重要途径。

    java源代码,jdk里面的源代码

    Java JDK中的源代码是学习和理解Java编程语言及其运行机制的关键资源。这些源文件包含了Java开发工具集(Java Development Kit)的核心类库...对于想要成为Java专家的人来说,直接阅读和理解JDK源码是必不可少的一步。

    jdk1.7.0_17源码

    通过阅读和分析JDK源码,开发者可以更深入地理解Java语言的工作原理,学习如何实现高效、可靠的代码。这对于提升编程技巧,解决复杂问题,甚至是开发自己的Java库都有极大的帮助。同时,了解JDK源码也能帮助开发者更...

    jdk1.6源码

    通过查看源码,我们可以了解到异常的抛出、捕获、堆栈跟踪等内部工作原理,这有助于编写健壮的异常处理代码。 通过对JDK1.6源码的深入学习,开发者不仅可以掌握Java语言的基础,还能洞悉其内部机制,为解决实际问题...

Global site tag (gtag.js) - Google Analytics