1、Object
1.1、java.lang.Object
1.1.1、Object类
Class Object is the root of the class hierarchy .
Every class has Object as a superclass .
All objects , including arrays , implement the methods of this class .
1.1.2、构造方法
public Object(){
}
1.1.3、实例方法
1.1.3.1、equals
-
指示其他某个对象(由参数指定)是否与此对象(当前对象)“相等”。
-
在
java.lang.Object类中的equals方法的实现过程:
public boolean equals( Object obj ) {
return ( this == obj ); // 比较 当前对象(this) 和 其它某个对象(obj) 的 地址
}
1.1.3.2、toString
-
返回该对象的字符串表示。
-
在
java.lang.Object类中的toString方法的实现过程:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString( hashCode() );
}
注意:
getClass()返回当前类对应的 ClassgetClass().getName()用于获取当前类的类名 ( 包括 包名 和 类名 )hashCode()用于获取 当前对象哈希码值Integer.toHexString()用于将十进制数字转换成十六进制形式 (返回字符串)
1.1.3.3、hashCode
- 返回该对象的哈希码值。[支持此方法是为了提高哈希表的性能。]
hashCode 常规协定:
- 在 Java 应用程序执行期间,在对同一对象多次调用
hashCode方法时,必须一致地返回相同的整数- 前提是将对象进行
equals比较时所用的信息没有被修改 - 从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致
- 前提是将对象进行
- 如果根据
equals(Object)方法,两个对象是相等的,则两个对象中的hashCode方法返回相同的整数 - 如果两个对象不相等,则对两个对象中的
hashCode方法不 要求一定生成不同的整数- 程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数:
public native int hashCode();
这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 Java编程语言不需要这种实现技巧。
由 native 修饰的方法表示本地方法,这些方法的执行需要通过 JVM 调用其它语言编写的程序来实现。
- 什么是 哈希表?( 以下说法是不太恰当的,至少是不严谨的 )
答:如果某个数组中的元素都可以通过某种方法计算出该元素在数组中的位置, 则称这个数组为哈希表,成计算该元素在当前数组中位置的计算方法为哈希算法。 - 比如对于以下数组来说:
char[] chars = { 'A' ,'B' , 'C' , 'D' , 'E' };
-
任意的一个元素都可以通过
element - 65的方式来获取该元素在数组中的索引。 -
再比如:
int[] array = { 11 , 22 , 33 , 44 , 55 , 66 };
-
可以通过
element / 10 - 1或element % 10 - 1获取到元素的下标。 -
体验优点:
public static int hash( int element ) {
return element % 10 - 1 ;
}
pubic static void main( String[] args ) {
int[] array = new int[ 10 ];
int element = 99 ;
int index = hash( element );
array[ index ] = element ;
}
1.1.3.4、getClass
-
表示此对象运行时类的
java.lang.Class对象。 -
Object类中的getClass方法:
public final native Class<?> getClass() ;
- 因为
getClass是被final修饰的,所以所有的子类都不能重写该方法。
1.2 、java.lang.Class
1.2.1、Class 类
-
Class类的实例表示正在运行的 Java 应用程序中的类和接口。 -
枚举 (enum) 是一种类 ,注解(annotation) 是一种接口。
类(Class)
牛类(Bull) 牛魔王 、红孩儿
熊猫类(Panda) 团团 、媛媛 、平平 、强强
马类(Horse) 的卢 、赤兔 、 绝影
1.2.2、实例方法
1.2.2.1、getName
-
以 字符串 的形式返回此
Class对象所表示的实体名称。 -
这里的实体可以是:
- 类 ( 枚举(enum) 是一种特殊的类 )
- 接口 ( 注解(annotation) 是一种特殊的接口 )
- 数组类型
+基本类型 - void
public String getName()
1.2.2.2、getSimpleName
-
返回源代码中给出的底层类的简称。如果底层类是匿名的则返回一个空字符串。
-
数组的简称即附带 “[]” 的组件类型的简称。特别地,组件类型为匿名的数组的简称是 “[]”。
public String getSimpleName()
1.2.2.3、getSuperclass
-
返回表示此
Class所表示的实体的父类对应的Class对象。 -
如果此
Class表示Object类、一个接口、一个基本类型或 void,则返回 null。 -
如果此对象表示一个数组类,则返回表示该
Object类的Class对象。
2、字符序列
2.1、String
2.1.1、字符串
-
字符串就是由字符组成的序列。 -
在 Java 语言中
java.lang.String类型的实例就代表字符串。 -
Java 程序中的所有字符串字面值都作为 String 类 的实例实现,比如:
String s = "abc" + "123" + "xyz" ; // "abc" 、"123" 、"xyz" 、"abc123xyz" 都是String实例
- 字符串是常量,它们的值在创建之后不能更改。
String s ;
s = "阿姨" ;
System.out.println( s ); // "阿姨"
s = "大妈" ;
System.out.println( s ); // "大妈"
2.1.2、构造
2.1.2.1、public String( String original )
String s = new String( "某某是一个漂亮的小姐姐吗" );
String x = "某某是一个漂亮的小姐姐吗" ;
String t = new String( x );
2.1.2.2、public String( byte[] bytes )
- 通过使用 平台的默认字符集 解码 指定的 byte 数组,构造一个新的
String实例。
byte[] bytes = new byte[] { -64 , -74 , -73 , -17 , -69 , -53 };
String s = new String( bytes );
System.out.println( s );
2.1.2.3、public String( byte[] bytes , Charset charset )
- 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的
String实例。
Charset utf8 = Charset.forName( "UTF-8" );
byte[] bytes = { -97, -23, -104, -65, -27, -89, -88, -28, -69, -118, -27, -92, -87, -27,
-79, -123, -25, -124, -74, -28, -72, -115, -25, -98, -116, -25, -99, -95 } ;
String s = new String( bytes , utf8 );
System.out.println( s ); // 阿姨今天居然不瞌睡
2.1.2.4、public String( byte[] bytes , String charsetName )
- 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的
String实例。
byte[] bytes = { -97, -23, -104, -65, -27, -89, -88, -28, -69, -118, -27, -92, -87, -27,
-79, -123, -25, -124, -74, -28, -72, -115, -25, -98, -116, -25, -99, -95} ;
String s = new String( bytes , "UTF-8" );
System.out.println( s ); // 阿姨今天居然不瞌睡
2.1.2.5、String( char[] value )
- 分配一个新的
String实例,使其表示字符数组参数中当前包含的字符序列
char[] chars = { '这', '是', '个', '啥', '你', '有', '毒', '吧', '知', '道', '吗' };
String s = new String( chars );
System.out.println( s );
2.1.2.6、String( char[] value, int offset, int count )
char[] chars = { '这', '是', '个', '啥', '你', '有', '毒', '吧', '知', '道', '吗' };
String s = new String( chars , 6 , 3 );
System.out.println( s );
2.1.3、实例方法
2.1.3.1、public int length()
- 获取字符串中的字符个数,俗称 “字符串长度” 。
String s = "某某今天居然不瞌睡" ;
int n = s.length();
System.out.println( n ) ;
2.1.3.2、public String concat( String s )
- 将 当前字符串 与 参数指定的字符串 连接成新字符串。
String s = "某某" ;
String x = s.concat( "是个漂亮的小姐姐" );
2.1.3.3、public byte[] getBytes()
- 使用平台的默认字符集 将此
String实例中的内容 编码 为 byte 序列,并将结果存储到一个新的 byte 数组中。
String s ;
byte[] bytes ;
s = "ABC012abc" ;
bytes = s.getBytes();
System.out.println( Arrays.toString( bytes ) );
s = "凤凰" ;
bytes = s.getBytes();
System.out.println( Arrays.toString( bytes ) );
- 获取当前 平台的默认字符集 :
Charset dc = Charset.defaultCharset(); // java.nio.charset.Charset
2.1.3.4、public byte[] getBytes( Charset charset )
- 使用给定的 charset 将此
String实例中的内容编码到 byte 序列,并将结果存储到新的 byte 数组
Charset utf8 = Charset.forName( "UTF-8" );
String s = "阿姨今天居然不瞌睡" ;
System.out.println( s );
int n = s.length();
System.out.println( n ) ;
// 将 当前字符串 的中的各个字符 按照 指定的 字符集 编码为 byte 序列
byte[] bytes = s.getBytes( utf8 );
System.out.println( bytes.length );
System.out.println( Arrays.toString( bytes ) );
- 获取指定名称的字符集:
Charset utf8 = Charset.forName( "UTF-8" );
Charset gbk = Charset.forName( "GBK" );
2.1.3.5、public byte[] getBytes( String charsetName )
- 使用给定的 charset 将此
String实例中的内容编码到 byte 序列,并将结果存储到新的 byte 数组
String s = "阿姨今天居然不瞌睡" ;
byte[] bytes = s.getBytes( "UTF-8" );
System.out.println( bytes.length );
System.out.println( Arrays.toString( bytes ) );
2.1.3.6、public void getChars( int begin , int end , char[] chs, int start )
- 将当前字符串中的 [ begin , end ) 之间的字符 复制 到 chs 数组的 start 位置。
String s = "阿姨今天居然不瞌睡" ;
char[] array = new char[ 10 ];
s.getChars( 3 , 6 , array , 6 );
System.out.println( Arrays.toString( array ) );
2.1.4、类方法
2.1.4.1、static String valueOf( boolean b )
static String valueOf(boolean b)
返回 boolean 参数的字符串表示形式。
static String valueOf(char c)
返回 char 参数的字符串表示形式。
static String valueOf(double d)
返回 double 参数的字符串表示形式。
static String valueOf(float f)
返回 float 参数的字符串表示形式。
static String valueOf(int i)
返回 int 参数的字符串表示形式。
static String valueOf(long l)
返回 long 参数的字符串表示形式。
static String valueOf(char[] data)
返回 char 数组参数的字符串表示形式。
static String valueOf(char[] data, int offset, int count)
返回 char 数组参数的特定子数组的字符串表示形式。
static String valueOf(Object obj)
返回 Object 参数的字符串表示形式。
2.2、StringBuffer
2.2、StringBuilder
3、包装类
3.1、什么是包装类
-
在 Java 语言中 ,8 种基本数据类型的
值不具备对象的特点。 -
为了解决这个问题,JDK 中提供了与它们相对应的Java 类型。
| 基本数据类型 | 基本数据类型对应的包装类类型 |
|---|---|
| byte | java.lang.Byte |
| short | java.lang.Short |
| int | java.lang.Integer |
| long | java.lang.Long |
| float | java.lang.Float |
| double | java.lang.Double |
| char | java.lang.Character |
| boolean | java.lang.Boolean |
- 自己实现一个
"包装类":
// 被 final 修饰的类没有子类
public final class Decimal {
public static final long MAX_VALUE = 0x7FFFFF_FFFFF_FFFFFL;
public static final long MIN_VALUE = 0x800000_00000_00000L;
private final long value ;
public Decimal( long value ) {
this.value = value ;
}
public long getValue() {
return this.value ;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (value ^ (value >>> 32));
return result;
}
@Override
public boolean equals(Object o ) {
// 1、比较地址
if( this == o ) {
return true ;
}
// 2、类型检查
if( o instanceof Decimal ) {
// 类型转换
Decimal d = (Decimal) o ;
// 3、比较字段 ( 两个 Decimal 实例的 value 字段的值是否相等 )
return this.value == d.value ;
}
return false ;
}
@Override
public String toString() {
// return value + "" ;
return String.valueOf( this.value );
}
}
- 测试:
public class DecimalTest {
public static void main(String[] args) {
// 100.equals( 200 );
Decimal d = new Decimal( 100 );
System.out.println( d );
Decimal e = new Decimal( 100 );
System.out.println( e );
System.out.println( d == e );
System.out.println( d.equals( e ) ) ;
long r = d.getValue() + e.getValue() ;
Decimal c = new Decimal( r );
System.out.println( c );
}
}
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
java.lang.Boolean
java.lang.Character
来源:https://blog.csdn.net/weixin_45495923/article/details/98772600