如果父类没有空参构造方法
//子类继承就会报错 因为子类的中含有空参构造
//并且在空参构造方法的第一行默认有super()调用父类的空参构造
//如果父类没有空参构造方法 则报错
// super();
Object
java.lang.Object
java中所有类的根类 所有的类都直接或者间接继承自Object类
构造方法
public Object()
toString
public String toString ()
返回该对象的字符串表示。 类名+@+地址值(哈希值)
在Object类中打印的是地址值 ,我们查看地址值没有用
子类一般都会重写此方法 返回对象的属性值
Person类重写Object类的toString方法
返回对象的属性值 对于当前Person类来说
就是返回name和age的值
简单来说打印的是引用类型的内容/属性,而不是地址值
equals
Object类方法
boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
如果不重写此方法 比较的是两个对象的地址值
子类一般都会选择重写此方法 不再比较地址值 而是比较属性值
( A == B )
如果比较基本类型 比较的是基本类型的数值是否相等
如果比较引用类型 比较的是地址值是否相同
(A.equals(B))
如果比较引用类型 比较的是内容是否相同
Person重写equals方法
不再比较地址值 而是比较属性值
也就是比较两个对象的name和age的值
重写:
public boolean equals(Object obj) {
//如果是同一个对象 直接返回true
if (this == obj){
return true;
}
//this不为null obj为null
if(obj == null){
return false;
}
return true;
hashCode
Object类
public int hashCode()
获取对象的哈希值
哈希值:可以理解为一个唯一值 相当于人一出生的身份证号 可以理解为是逻辑地址
如果不重写Object类的hashCode方法 比较两个对象的hashCode就是比较两个对象的地址值
如果重写了Object类HashCode方法 比较两个对象的hashCode就是比较两个对象的内容
如果想确定内容是否真的相同
可以先比较两个对象的hashCode
不同 说明这两个对象的内容一定不同
相同 不能说明这两个对象一定相同 需要继续比较equals
不同 一定不同
相同 则相同
重写:
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
String
特点
java.lang.String
1.所有字符串字面值 都是字符串对象 "abc"
2.字符串是常量 一旦创建 不能改变
3.因为不可改变 所以可以共享
字符串的比较
构造方法
public String();
public String(String str)
String s = new String();
String s2 = "";
System.out.println("|"+s+"|");
// ||
System.out.println("|"+s2+"|");
// ||
String s3 = "abc";
String s4 = new String("abc");
System.out.println(s3 == s4);//比较地址值 false
System.out.println(s3.equals(s4));//比较内容 true
字符、字节转换成字符串
String 构造方法
public String(char[] chs);
public String(char[] chs,int start ,int length)
public String(byte[] bytes)
public String(byte[] bytes,int start ,int length)
//字符数组 --->String
char[] chs = {'a','b','c','d'};
//将字符数组转换为字符串
String s = new String(chs);
System.out.println(s);
//将字符数组的一部分转换为字符串 从1索引开始 转换3个
String s2 = new String(chs,1,3);
System.out.println(s2);
//将字节数组 --->String
byte[] bytes = {65,66,67,68};
//将字节数组转换为字符串 解码
String s4 = new String(bytes);
System.out.println(s4);
//将字节数组的一部分转换为字符串 从0索引 转换两个
String s5 = new String(bytes,0,2);
System.out.println(s5);
将字符串转换为字符数组
String 类
public char[] toCharArray();
将字符串转换为字节数组
String 类
public byte[] getBytes();
//将str转换为字符数组
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
//将str转换为字节数组
byte[] strBytes = str.getBytes();
for (int i = 0; i < strBytes.length; i++) {
System.out.println(strBytes[i]);
}
根据索引找字符
public char charAt(int index) 根据索引找字符
String s = "I Love Java";
//根据索引找字符 如果索引不存在 抛出越界异常StringIndexOutOfBoundsException
char c = s.charAt(0);
System.out.println(c); //输出 'I'
//获取字符串长度
System.out.println(s.length());
for(int i = 0;i<s.length();i++){
char ch = s.charAt(i);
System.out.println(ch);
}
长度
数组
length属性
集合
size()方法
字符串
length()方法
//将字符串转为字符数组并遍历
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
System.out.println(chs[i]);
}
查找字符在字符串中出现的位置
int indexOf(int ch) 查找当前字符 在字符串中第一次出现的索引位置
int indexOf(int ch,int fromIndex) 从fromIndex开始查询
String str = "I Love Java";
int index = str.indexOf('a');
System.out.println(index);
//字符a第2次出现的索引位置
int index2 = str.indexOf('a', index + 1);
System.out.println(index2);
//ab在str2中第二次的索引位置
int abIndex2 = str2.indexOf("ab", abIndex + "ab".length());
int lastIndexOf(int ch) 查询指定字符 在字符串中最后一次出现的索引
int lastIndexOf(String str)
//查询\在字符串中最后一次出现的索引位置
int indexOf = path.lastIndexOf('\\');
System.out.println(indexOf);
字符串截取
String substring(int startIndex) 从开始索引截取到末尾
String substring(int startIndex,int endIndex) [start,end)
//截取Love 开始索引为2 结束索引为6 不包含6
String substring1 = str.substring(2, 6);
System.out.println(substring1);
//获取文件名
//获取\\最后一次出现的索引位置
int lastIndex = path.lastIndexOf("\\");
//从\\最后一次的索引+1开始截取 截取到末尾
String fileName = path.substring(lastIndex + 1);
System.out.println(fileName);
字符串大小写转换
String toUpperCase() 字符串转大写
String toLowerCase() 字符串转小写
//转大写
String s1 = s.toUpperCase();
System.out.println(s1);
//转小写
String s2 = s.toLowerCase();
System.out.println(s2);
字符串判断开头、结尾
boolean startsWith(String s) 判断开头
boolean endsWith(String s) 判断结尾
//判断字符串是否以I开头
boolean b = s.startsWith("I");
System.out.println(b);
//判断字符串 是否以java结尾
boolean b2 = s.endsWith("java");
System.out.println(b2);
//判断文件是否是Java文件
boolean b3 = fileName.toLowerCase().endsWith(".java");
System.out.println(b3);
字符串拼接、去空格
String concat(String s) 字符串拼接
String s = "abc".concat("bcd");
String trim() 去掉字符串两端的空格
String str = " ab c ";
String str2 = str.trim();
字符串内容替换、切割
String replace(char oldChar,char newChar) 将字符串中 oldChar 替换成newChar
String str = "abcdea";
//将字符'a'替换成*
String str2 = str.replace('a', '*');
String repalce(String oldString,String newString)
String str3 = str.replace("ab", "****");
System.out.println(str3);
//将" ------ "替换成一个" * "
String s1 = names.replaceAll("-+", " * ");
System.out.println(s1);
String[] split(String regex) 切割字符串
String nameStr = "柳岩-------唐嫣----金莲--大郎";
String[] arr = nameStr.split("-+");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
2.没有难点,都需要记住
3.开心,充实
4.总结StringBuilder,Date,Calendar,ArrayList添加/删除索引,冒泡排序