JDK 5.0 Source Code
http://java.sun.com/j2se/1.5.0/download.jsp

解决方案 »

  1.   

    jbuilder中按着ctrl键用鼠标点关键字(如String)
      

  2.   

    jdk的安装文件夹下的src.zip,前提是安装的时候选择了安装源码
      

  3.   

    强烈推荐http://www.javaresearch.org
    的在线源代码和在线API
    J2EE 1.3.1
    JDK 1.5.0
    JDK 1.4.2
    Ant 1.6.2
    JUnit 3.8.1
    如果想离线察看,可以利用它提供的一个工具自己生成你自己风格的
    源代码,察看非常方便!
      

  4.   

    /*
     * @(#)String.java 1.187 04/07/13
     *
     * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
     * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
     */package java.lang;import java.io.ObjectStreamClass;
    import java.io.ObjectStreamField;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.Formatter;
    import java.util.Locale;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import java.util.regex.PatternSyntaxException;public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence
    {
        /** The value is used for character storage. */
        private final char value[];    /** The offset is the first index of the storage that is used. */
        private final int offset;    /** The count is the number of characters in the String. */
        private final int count;    /** Cache the hash code for the string */
        private int hash; // Default to 0    /** use serialVersionUID from JDK 1.0.2 for interoperability */
        private static final long serialVersionUID = -6849794470754667710L;
        private static final ObjectStreamField[] serialPersistentFields =
            new ObjectStreamField[0];
        public String() {
    this.offset = 0;
    this.count = 0;
    this.value = new char[0];
        }
        public String(String original) {
    int size = original.count;
    char[] originalValue = original.value;
    char[] v;
       if (originalValue.length > size) {
          // The array representing the String is bigger than the new
          // String itself.  Perhaps this constructor is being called
          // in order to trim the baggage, so make a copy of the array.
        v = new char[size];
          System.arraycopy(originalValue, original.offset, v, 0, size);
      } else {
          // The array representing the String is the same
          // size as the String, so no point in making a copy.
        v = originalValue;
      }
    this.offset = 0;
    this.count = size;
    this.value = v;
        }
        public String(char value[]) {
    int size = value.length;
    char[] v = new char[size];
    System.arraycopy(value, 0, v, 0, size);
    this.offset = 0;
    this.count = size;
    this.value = v;
        }
        public String(char value[], int offset, int count) {
            if (offset < 0) {
                throw new StringIndexOutOfBoundsException(offset);
            }
            if (count < 0) {
                throw new StringIndexOutOfBoundsException(count);
            }
            // Note: offset or count might be near -1>>>1.
            if (offset > value.length - count) {
                throw new StringIndexOutOfBoundsException(offset + count);
            }
            char[] v = new char[count];
            System.arraycopy(value, offset, v, 0, count);
            this.offset = 0;
            this.count = count;
            this.value = v;
        }
      

  5.   

    public String(int[] codePoints, int offset, int count) {
            if (offset < 0) {
                throw new StringIndexOutOfBoundsException(offset);
            }
            if (count < 0) {
                throw new StringIndexOutOfBoundsException(count);
            }
            // Note: offset or count might be near -1>>>1.
            if (offset > codePoints.length - count) {
                throw new StringIndexOutOfBoundsException(offset + count);
            } int expansion = 0;
    int margin = 1;
    char[] v = new char[count + margin];
    int x = offset;
    int j = 0;
    for (int i = 0; i < count; i++) {
        int c = codePoints[x++];
        if (c < 0) {
    throw new IllegalArgumentException();
        }
        if (margin <= 0 && (j+1) >= v.length) {
    if (expansion == 0) {
        expansion = (((-margin + 1) * count) << 10) / i;
        expansion >>= 10;
        if (expansion <= 0) {
    expansion = 1;
        }
    } else {
        expansion *= 2;
    }
    char[] tmp = new char[Math.min(v.length+expansion, count*2)];
    margin = (tmp.length - v.length) - (count - i);
    System.arraycopy(v, 0, tmp, 0, j);
    v = tmp;
        }
        if (c < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
    v[j++] = (char) c;
        } else if (c <= Character.MAX_CODE_POINT) {
    Character.toSurrogates(c, v, j);
    j += 2;
    margin--;
        } else {
    throw new IllegalArgumentException();
        }
    }
    this.offset = 0;
    this.value = v;
    this.count = j;
        }
        @Deprecated
        public String(byte ascii[], int hibyte, int offset, int count) {
    checkBounds(ascii, offset, count);
            char value[] = new char[count];        if (hibyte == 0) {
                for (int i = count ; i-- > 0 ;) {
                    value[i] = (char) (ascii[i + offset] & 0xff);
                }
            } else {
                hibyte <<= 8;
                for (int i = count ; i-- > 0 ;) {
                    value[i] = (char) (hibyte | (ascii[i + offset] & 0xff));
                }
            }
    this.offset = 0;
    this.count = count;
    this.value = value;
        }    
        public String(byte ascii[], int hibyte) {
            this(ascii, hibyte, 0, ascii.length);
        }
        public String(byte bytes[], int offset, int length, String charsetName)
    throws UnsupportedEncodingException
        {
    if (charsetName == null)
        throw new NullPointerException("charsetName");
    checkBounds(bytes, offset, length);
    char[] v = StringCoding.decode(charsetName, bytes, offset, length);
    this.offset = 0;
    this.count = v.length;
    this.value = v;
        }
        public String(byte bytes[], String charsetName)
    throws UnsupportedEncodingException
        {
    this(bytes, 0, bytes.length, charsetName);
        }
        public String(byte bytes[], int offset, int length) {
    checkBounds(bytes, offset, length);
    char[] v  = StringCoding.decode(bytes, offset, length);
    this.offset = 0;
    this.count = v.length;
    this.value = v;
        }
        public String(byte bytes[]) {
    this(bytes, 0, bytes.length);
        }
        public String(StringBuffer buffer) {
            String result = buffer.toString();
            this.value = result.value;
            this.count = result.count;
            this.offset = result.offset;
        }
        public String(StringBuilder builder) {
            String result = builder.toString();
            this.value = result.value;
            this.count = result.count;
            this.offset = result.offset;
        }
        // Package private constructor which shares value array for speed.
        String(int offset, int count, char value[]) {
    this.value = value;
    this.offset = offset;
    this.count = count;
        }
        public int length() {
            return count;
        }
        public char charAt(int index) {
            if ((index < 0) || (index >= count)) {
                throw new StringIndexOutOfBoundsException(index);
            }
            return value[index + offset];
        }
        public int codePointAt(int index) {
            if ((index < 0) || (index >= count)) {
                throw new StringIndexOutOfBoundsException(index);
            }
            return Character.codePointAtImpl(value, offset + index, offset + count);
        }
        public int codePointBefore(int index) {
    int i = index - 1;
            if ((i < 0) || (i >= count)) {
                throw new StringIndexOutOfBoundsException(index);
            }
            return Character.codePointBeforeImpl(value, offset + index, offset); 
        }
        public int codePointCount(int beginIndex, int endIndex) {
    if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) {
        throw new IndexOutOfBoundsException();
    }
    return Character.codePointCountImpl(value, offset+beginIndex, endIndex-beginIndex);
        }
        public int offsetByCodePoints(int index, int codePointOffset) {
    if (index < 0 || index > count) {
        throw new IndexOutOfBoundsException();
    }
    return Character.offsetByCodePointsImpl(value, offset, count,
    offset+index, codePointOffset);
        }    /**
         * Copy characters from this string into dst starting at dstBegin.
         * This method doesn't perform any range checking.
         */
        void getChars(char dst[], int dstBegin) {
            System.arraycopy(value, offset, dst, dstBegin, count);
        }
        public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
            if (srcBegin < 0) {
                throw new StringIndexOutOfBoundsException(srcBegin);
            }
            if (srcEnd > count) {
                throw new StringIndexOutOfBoundsException(srcEnd);
            }
            if (srcBegin > srcEnd) {
                throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
            }
            System.arraycopy(value, offset + srcBegin, dst, dstBegin,
                 srcEnd - srcBegin);
        }