所属包:
java.lang
Class Object
类定义:
public class Object{}
类介绍:
Object类是类层次结构的根类(顶级父类)。
每个类都以 Object作为超类(父类)。
所有对象,包括数组,实现这个类的方法。
构造方法:
无参构造
方法:
1、protected Object clone()--创建并返回此对象的副本
注意:
1、protected --受保护的 可以在本类 子类 同包类
在子类中且要通过当前子类对象才能调用protected修饰的方法
解决:
自己开发了一个方法 调用当前对象的clone方法
重写父类的方法-
放大权限范围 实现依然是调用父类的方法
2、CloneNotSupportedException-执行clone方法抛出异常
要克隆对象对应的类必须实现Cloneable接口
3、Cloneable接口--标记接口 如果实现了该接口 则表示该类的对象时允许拷贝 如果没有实现接口 表示不允许clone方法拷贝的方法
接口中没有抽象方法
面试题:
深表克隆、浅表克隆
2、protected void finalize()
当垃圾回收确定没有对对象的引用时,由对象上的垃圾回收器调用。
程序控制垃圾回收器来指定回收某个对象?
垃圾回收器自己执行 程序员无法干预
finalize方法可以提醒垃圾回收器可以回收对象 无法让对象立马被回收掉
3、public final Class<?> getClass()
返回当前对象的运行时类型
Animal a = new Dog();
a instanceof Dog-true
a.getClass()--Dog
Dog dog = (Dog)a;
4、public int hashCode()-获取当前对象的hash值
在同一个程序中 同一对象多次调用hashcode方法获取到的hash值是相同的
不同的对象 hashcode方法获取到的hash值不相同
5、public String toString()-获取当前对象的字符串表现形式
toString的源码实现:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
java.lang.Object@28d93b30
其中:toHexString将int值转为十六进制的字符串类型
注意:
System.out.println(obj3);--底层原理:
先调用obj3.toString()--获取到当前对象的字符串 然后将字符串输出打印
重写toString方法:- 如果需要将对象转为指定的字符串形式
idea都可以直接生成
6、public boolean equals(Object obj)--判断对象是否相等
equals源码实现:
public boolean equals(Object obj) {
return (this == obj);
}
默认情况下通过==比较两个对象的地址值
重写equals方法:
idea直接生成
面试题:
== equals的区别?
基本数据类型:
只能通过==比较数据值是否相等
引用数据类型:
==:比较两个对象的地址值
equals:
如果是默认实现,比较两个对象的地址值;
如果重写equals方法,比较两个对象的属性值是否相等
应用场景:
1、将任意类的对象赋值给Object类型的引用
String
包:java.lang
类定义:
public final class String extends Object
String不能被继承
概述:
表示字符串。
在java中,所有字符串都是String的对象/实例。
"hello"是String类的对象
字符串是常量
String源码:
private final char[] value;--字符数组常量 value--用于存储字符串中的字符
因为字符串对象是不可改变的,所以它们可以被共享;
创建字符串变量的方式:
1、String 变量 = 字符串字面值;
例如:
String str = "hello";
2、String 变量 = new String(字符串字面值);
例如:
String str = new String("hello");
面试题:
String str1 = "hello";
String str2 = "hello";
str1 == str2 true
String str3 = new String("hello");
str1 == str3 false
String str4 = new String("hello");
str3 == str4 false
构造方法:
public String()--无参构造创建对象
创建空字符串对象
public String(char[] value)
将字符数组转为字符串类型
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
字符数组的修改不会影响到新创建的字符串的值 字符串的字符数组是新的字符数组
public String(char[] value,
int offset,
int count)
offset指定数组开始的下标 count表示个数
例如:
char[] cs = {'a','b','c','d','e','f'};
String str3 = new String(cs, 1, 3);//"bcd"
public String(String original)
String的常用方法:
1、public char charAt(int index)--返回指定索引的 char字符
例如:
String str1 = "hello";
char c = str1.charAt(0);
注意:
下标范围:0~长度-1
如果超出范围,则运行会抛出StringIndexOutOfBoundsException异常
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}
练习:循环遍历字符串的每一个字符
for (int i = 0; i <=4 ; i++) {
System.out.println(str1.charAt(i));
}
2、public int length()-获取字符串的长度
练习:循环遍历字符串的每一个字符
for (int i = 0; i <=str1.length()-1 ; i++) {
System.out.println(str1.charAt(i));
}
3、public int compareTo(String anotherString)--比较两个字符串的大小
结果返回值int:
0 当前字符串内容和参数字符串内容相等
正数 当前字符串内容大于参数字符串内容
负数 当前字符串内容小于参数字符串内容
源码:
public int compareTo(String anotherString) {
int len1 = value.length;//len1=3
int len2 = anotherString.value.length;//len2=2
int lim = Math.min(len1, len2);//lim=2
char v1[] = value;//v1=abc
char v2[] = anotherString.value;//v2=ab
int k = 0;//下标
while (k < lim) {
char c1 = v1[k];//c1=a
char c2 = v2[k];//c2=a
if (c1 != c2) {
return c1 - c2;//'c'-'e'
}
k++;
}
return len1 - len2;//3-2=1
}
4、public int compareToIgnoreCase(String str)
结果返回值int:
0 当前字符串内容和参数字符串内容相等
正数 当前字符串内容大于参数字符串内容
负数 当前字符串内容小于参数字符串内容
总结:
compareTo\compareToIgnoreCase方法通常用于字符串排序--有序集合
5、public boolean contains(CharSequence s)--判断当前字符串是否包含参数字符串
CharSequence 接口
String是CharSequence 接口的实现类
6、public static String copyValueOf(char[] data)--将字符数组转为字符串类型
public static String copyValueOf(char data[]) {
return new String(data);
}
7、public boolean endsWith(String suffix)-判断当前字符串是否以参数指定的内容结尾
8、public boolean startsWith(String prefix)-判断当前字符串是否以参数指定的内容开头
9、public boolean startsWith(String prefix, int toffset)-判断当前字符串从指定下标开始是否以参数指定的内容开头
专题:
字符数组<->字符串:
字符数组->字符串:
new String(char[] cs);
String.copyValueOf(char[] cs);
专题:
字符串拼接
+
concat()方法
StringBuilder
StringBuffer
案例:
1、输出字符串中所有的数字字符
2、求字符串中所有数字的和
3、统计字符串中字母、数字、其他字符出现的次数