API - Application Program Interface
- 类的说明书:即叫什么(类名)
有什么属性(类的解释)
有什么(属性,方法,构造方法)
具体如何做(每个方法的使用说明)
Object类:超类(所有类的父类)
每个类都使用 Object 作为超类,所以所有对象(包括数组)都可以实现这个类的方法。
- hashCode() : 可以理解为对象在内存的位置信息
public static void main(String[] args){
Object obj1 = new Object();
System.out.println(obj1 .hashCode());
}
- toString() :以字符串的形式返回当前对象信息,建议每个子类都重写
//自动生成(格式并不好看,可以自行更改)
@Override
public String toString() {
return "Test [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
+ "]";
}
- equals
1 Object类的equals方法内部使用 == 判断对象的地址是否相等
2 但是在实际开发中,更多的是比较对象的内容
我们认为 两个对象的内容完全一致,就认为俩对象相等
所以,建议Object的子类都重写equals,用于比较对象内容而非地址
public class Student {
String name;
public Student(String name) {
this.name = name;
}
}
public static void main(String[] args){
Student stu1 = new Student("张三");
Student stu2 = new Student("张三");
if(stu1.equals(stu2)){
System.out.println("等于");
}else{
System.out.println("不等于");
}
}
- equals重写
public class Student {
String name;
public Student(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
Student stu = (Student) obj;
if(this.name.equals(stu.name)){
return true;
}
return false;
}
}
- equals 和 == 的区别?
1 在Object类中 ,都是比较对象的地址
2 在其他子类中 , 一般都重写了equals,用于比较对象内容
3 equals是方法
String类
- String类,不能被继承,Java 程序中的所有字符串(如 “abc” )是此类的实例实现。 程序中任何一个字符串值都是String类的对象。字符串是常量,它们的值在创建之后不能更改(平时改变的是String类对象的引用而不是它的值本身)。
- replace(): 替换使用“A”替换字符串序列中所有与“a”匹配的子字符串。该替换从字符串的开头朝末尾执行,例如,用 “b” 替换字符串 “aaa” 中的 “aa” 将生成 “ba” 而不是 “ab”。
- replaceAll():替换此字符串所有匹配给定的正则表达式的子字符串(用replace替换的时候不可以使用正则表达式)。
- split():根据给定正则表达式的匹配拆分此字符串。
static public void main(String[] args){
String str1 = "java".replace("a", "A");//替换字符
System.out.println(str1);
String str2 = "java123".replaceAll("\\d", "A");//按正则表达式替换字符
System.out.println(str2);
String str = "java123";
String[] str3 = str.split("\\d");
System.out.println(Arrays.toString(str3));
String[] str4 = str.split("");//按正则表达式截取转换数组
System.out.println(Arrays.toString(str4));
String str5 = str.substring(1);//从下标“1”开始,截取下标1之后的字符串返回
System.out.println(str5);
char[] str6 = str.toCharArray();//拆分成字节型数组
System.out.println(Arrays.toString(str6));
System.out.println(" java ".trim());//过滤前后空格
//(stataic) valueOf(参数) 可以将任意数据类型的数据转为字符串返回
System.out.println(String.valueOf(true));//转换后true不再是布尔类型而是字符串类型
char str7 = str.charAt(2);//返会字符串中下标为2的字符
System.out.println(str7);
}
package com.Fx;
import java.util.Arrays;
public class StringTest {
public static void main(String[] args) {
System.out.println("1."+"java".concat("222"));//拼接
System.out.println("2."+"java".contains("2"));//判断包含
System.out.println("3."+"com.java".startsWith("com."));//判断前缀
System.out.println("4."+"java.txt".endsWith(".txt"));//判断后缀
//忽略大小写判断字符串相等
String s2 = new String("Java");
String s3 = new String("java");
System.out.println("5."+s2.equalsIgnoreCase(s3));
byte[] bytes = "abcABC".getBytes();//转换为byte类型的数组
System.out.println("6."+Arrays.toString(bytes));
//返回字符下标(找不到返回-1)
int i1 = "Java".indexOf('o');
int i2 = "Java".indexOf('a',2);//下标2以后的字符
int i3 = "Java".indexOf("av");
System.out.println("7."+i1);
System.out.println("7."+i2);
System.out.println("7."+i3);
int length = "".length();//返回字符串长度
System.out.println("8."+length);
System.out.println("8."+"".isEmpty());//判断是否为空
}
}
- 部分正则表达式
- 反转
package com.API;
import java.util.Arrays;
public class A {
public static void main(String[] args) {
char[] i = "java".toCharArray();
System.out.println(Arrays.toString(i));
char tem;
for (int j = 0; j < i.length/2; j++) {
tem = i[j];
i[j] = i[i.length-j-1];
i[i.length - j -1] = tem;
}
System.out.println(Arrays.toString(i));
}
}
- 去重
package com.API;
public class B {
public static void main(String[] args) {
String str = "soutssysaadvcb";
String str1 = "";
for (int i= 0; i < str.length(); i++) {
char t = str.charAt(i);
str1 = (str1.indexOf(t)==-1)
?str1.concat(String.valueOf(t))
:str1;
}
System.out.println(str1);
}
}
Stringbuffer
- 线程安全的可变字符序列. 效率低
package com.Fx;
public class StringBuffertest {
public static void main(String[] args) {
//stringbuffer提供了一些可以改变字符序列的方法
StringBuffer sb = new StringBuffer("java");
sb.setCharAt(1, 's');//替换下标为1的字符为's'
System.out.println("1. "+sb);
sb.deleteCharAt(1);//删除下标为1的字符
System.out.println("2. "+sb);
sb.insert(2, 1.5);//将下标为2的字符替换为''字符,""字符串,或者数字(不限于整数)
System.out.println("1. "+sb);
// append()返回的是SB对象的一个引用
StringBuffer sb1 = new StringBuffer("java");
StringBuffer sb2 = sb1.append(1);
StringBuffer sb3 = sb1.append("big");
StringBuffer sb4 = sb1.append(true);
System.out.println(sb1);// java1bigtrue
System.out.println(sb2);// java1bigtrue
System.out.println(sb3); // java1bigtrue
System.out.println(sb4); // java1bigtrue
}
}
StringBuilder
- 不保证线程安全的可变字符序列.与StringBuffer 的API完全一致, 效率高.
包装类
- 包装类主要指 将8种基本数据类型包装成对应的类.