1 /**2 * 提供程序设计的基础类3 */4 packagejava.lang;5 6 /**7 * 将一个基本类型 short 的值包装在一个 Short 对象中8 */9 publicfinalclassShortextendsNumberimplementsComparable{10 11 /**常量,表示 short 类型的最小值 **/12 publicstaticfinalshortMIN_VALUE=-32768;13 14 /**常量,表示 short 类型的最大值 **/15 publicstaticfinalshortMAX_VALUE=32767;16 17 /**用于以二进制补码形式表示 short 值的位数*/18 publicstaticfinalintSIZE=16;19 20 /**表示基本类型 short 的 Class 对象*/21 publicstaticfinalClassTYPE=(Class) Class22 .getPrimitiveClass("short");23 24 /**定义一个私有变量,类型为 short*/25 privatefinalshortvalue;26 27 /**表明类的不同版本间的兼容性*/28 privatestaticfinallongserialVersionUID=7515723908773894738L;29 30 /**31 * 构造器,参数为基本类型 short32 */33 publicShort(shortvalue) {34 this.value=value;35 }36 37 /**38 * 构造器,参数为 String 该字符串要存在 Short 类型的范围39 */40 publicShort(String s)throwsNumberFormatException {41 this.value=parseShort(s,10);42 }43 44 /**45 * 将 Short 对象强制转换为基本类型 byte 输出46 * 覆盖了父类 Number 中的 byteValue() 方法47 */48 publicbytebyteValue() {49 return(byte) value;50 }51 52 /**53 * 将 Short 对象的值作为基本类型 short 输出54 * 覆盖了父类 Number 中的 shortValue() 方法55 */56 publicshortshortValue() {57 returnvalue;58 }59 60 /**61 * 将 Short 对象强制转换为基本类型 int 输出62 * 定义了父类 Number 中的抽象方法 intValue()63 */64 publicintintValue() {65 return(int) value;66 }67 68 /**69 * 将 Short 对象强制转换为基本类型 long 输出70 * 定义了父类 Number 中的抽象方法 longValue()71 */72 publiclonglongValue() {73 return(long) value;74 }75 76 /**77 * 将 Short 对象强制转换为基本类型 float 输出78 * 定义了父类 Number 中的抽象方法 floatValue()79 */80 publicfloatfloatValue() {81 return(float) value;82 }83 84 /**85 * 将 Short 对象强制转换为基本类型 double 输出86 * 定义了父类 Number 中的抽象方法 doubleValue()87 */88 publicdoubledoubleValue() {89 return(double) value;90 }91 92 /**93 * 返回表示指定 short 的 String 对象,以基数为 10 计算94 */95 publicstaticString toString(shorts) {96 returnInteger.toString((int) s,10);97 }98 99 /**100 * 返回表示此 Short 对象值的 String 对象101 */102 publicString toString() {103 returnString.valueOf((int) value);104 }105 106 /**107 * 内部类 ShortCache 准备把256个 short 存在缓存里108 */109 privatestaticclassShortCache {110 privateShortCache() {111 }112 113 staticfinalShort cache[]=newShort[-(-128)+127+1];114 115 static{116 for(inti=0; i=-128&&sAsInt<=127) {130 returnShortCache.cache[sAsInt+offset];131 }132 returnnewShort(s);133 }134 135 /**136 * 将 String 对象解析为有符号的 10 进制的 Short 对象,第一个参数为 String ,第二个参数为基数,范围[2,36]137 */138 publicstaticShort valueOf(String s,intradix)139 throwsNumberFormatException {140 returnnewShort(parseShort(s, radix));141 }142 143 /**144 * 将 String 对象解析为有符号的 10 进制基本类型 short145 */146 publicstaticShort valueOf(String s)throwsNumberFormatException {147 returnvalueOf(s,10);148 }149 150 /**151 * 将 String 对象解析为有符号的 10 进制基本类型 short152 */153 publicstaticshortparseShort(String s)throwsNumberFormatException {154 returnparseShort(s,10);155 }156 157 /**158 * 将 String 对象解析为有符号的 10 进制基本类型 short 第一个参数为 String ,第二个参数为基数,范围[2,36]159 * 调用的主要方法是 Integer.parseInt()160 * 由第二个参数指定基数161 */162 publicstaticshortparseShort(String s,intradix)163 throwsNumberFormatException {164 inti=Integer.parseInt(s, radix);165 if(iMAX_VALUE)166 thrownewNumberFormatException("Value out of range. Value:\""+ s167 +"\"Radix:"+ radix);168 return(short) i;169 }170 171 /**172 * 将 String 对象解析为有符号的 10 进制基本类型 short ,String 对象前的 - 对应负数 0x 0X # 对应 16 进制 0173 * 对应 8 进制174 * 直接由字符串的前缀来判断该字符串的类型175 * 最终还是调用 parseShort() 转到调用 Integer.parseInt()176 */177 publicstaticShort decode(String nm)throwsNumberFormatException {178 /**用于确定基数 **/179 intradix=10;180 /**用于定位数值部分开始的位置 **/181 intindex=0;182 /**用于确定 正负 **/183 booleannegative=false;184 Short result;185 186 /**定位数值部分开始的位置 **/187 if(nm.startsWith("-")) {188 negative=true;189 index++;190 }191 if(nm.startsWith("0x", index)||nm.startsWith("0X", index)) {192 index+=2;193 radix=16;194 }elseif(nm.startsWith("#", index)) {195 index++;196 radix=16;197 }elseif(nm.startsWith("0", index)&&nm.length()>1+index) {198 index++;199 radix=8;200 }201 202 if(nm.startsWith("-", index))203 thrownewNumberFormatException("Negative sign in wrong position");204 205 /**调用 valueOf()方法进行解析 **/206 try{207 result=Short.valueOf(nm.substring(index), radix);208 result=negative?newShort((short)-result.shortValue())209 : result;210 }catch(NumberFormatException e) {211 String constant=negative?newString("-"+nm.substring(index))212 : nm.substring(index);213 result=Short.valueOf(constant, radix);214 }215 returnresult;216 }217 218 /**219 * 返回此 Short 的哈希码 即将 Short 对象的值强制转换成基本类型 int220 */221 publicinthashCode() {222 return(int) value;223 }224 225 /**226 * 比较两个 Short 对象是否相同 当且仅当参数是一个与此对象一样,都表示同一个 short 值的 Short 对象时,才返回 true227 */228 publicbooleanequals(Object obj) {229 if(objinstanceofShort) {230 returnvalue==((Short) obj).shortValue();231 }232 returnfalse;233 }234 235 /**236 * 将此 Short 实例与其他 Short 实例进行比较,true 为 0 false 为 非0237 */238 publicintcompareTo(Short anotherShort) {239 returnthis.value-anotherShort.value;240 }241 242 /**243 * 返回通过反转(或者交换,效果相同)指定 short 值中的字节而获得的值244 * 按字节倒置 在网络传输处理时特有用245 */246 publicstaticshortreverseBytes(shorti) {247 return(short) (((i&0xFF00)>>8)|(i<<8));248 }249 }250 |