API
API
概念
API全名:application(应用) programming(程序) interface(接口)
API是应用程序编程接口
Java API
Java API就是sun公司提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。
我们可以通过查帮助文档来了解Java提供的API如何使用
Object类
Object类是所有类的父类,所有类都字节或间接的继承与Object类
Object类中提供了所有类都一定拥有的方法由java决定
常用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lhbsNFdU-1605616090629)(img\image-20201021142125921.png)]
getClass:之后反射部分会讲
notify、notifyAll、wait:之后多线程会讲
toString方法
将对象转换为字符串,Object类转换字符串的方法类似于打印地址
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
所有的类都继承于Object类所有都继承了这个方法,当进行对象的输出时默认调用该对象的toString()方法,将返回的字符串在控制台进行打印
在调用输出语句输出对象时,实际上时自动调用对象toString方法将对象转换为字符串之后进行输出
一般我们会重写这个方法,这样在进行对象输出时就会按照我们定义的方式进行输出
hashCode方法
每个对象是唯一的,即使多个对象属性方法全部相同那么也是多个对象,在java中为了对对象进行同一对象验证提供了hashCode方法,用于返回对象的唯一hashCode值
在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
hashCode值在对象运行过程中唯一不重复
两个对象hashCode值相等不一定是同一对象,但同一对象多次调用hashCode方法返回hashCode值一定相等
String s1="柴柕";
String s2="柳柴";
System.out.println(s1.hashCode());//851553
System.out.println(s2.hashCode());//851553
equals方法
Object类提供的equals()方法比较的是对象的内存地址.当两对象指向内存地址相同时,返回true
Object提供的方法不适用其他子类,所以,基本上所有子类都对equals方法进行了重写
子类如果重写equals方法那么必须重写hashCode方法
两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
equals与==的区别
1、语法上的区别
==是算术运算符 equals是方法
2、判断内容不同
==经常用于判决基本数据类型数值类型是否相等,也可以判断两个对象地址是否相等(同一对象)
equals只能判断引用数据类型
3、对于object类而言equals与==没有区别
equals默认使用==判断两对象是否相同
4、对于其他类重写equals方法而言的不同(String为例)
==判断的是两对象地址是否相同。equals判断的是两字符串对象内容是否相同
String类
引用数据类型,用于保存字符串,Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
字符串为常量,字符串值一旦初始化便不可以修改。
常量池:在java用于保存在编译期已确定的,已编译的class文件中的一份数据。
String s = "abc";
s="bcd";
//变量s保存的是常量abc所在的地址
//当重新赋值时会将新的常量地址进行赋值
//但是原字符串abc会一直存储在常量池中直至程序运行结束
String s1="bcd";
System.out.println(s==s1);
//因为相同常量只创建一次。再次使用直接将地址进行赋值
String 可以理解为特殊的字符数组
构造方法
String()
初始化一个新创建的 String 对象,使其表示一个空字符序列。
String(byte[] bytes)
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
String(byte[] bytes, int offset, int length)
通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
String(char[] value, int offset, int count)
分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
String s1=new String();//等价String s1="";
String s11=new String();
//由于使用new关键字创建的新对象虽然存储字符串相同但地址不同
//原因:对象存储数据为位置与常量存储位置不同
//System.out.println(s1==s11);
byte b[]={65,66,67,68};
String s2=new String(b);
//将数值对应字符编码进行转换之后连接
System.out.println(s2);//ABCD
String s3=new String(b,1,2);
//使用数组部分数据从索引1开始之后的2位数据
System.out.println(s3);//BC
char c[]={'a','b','c','d'};
String s4=new String(c);
System.out.println(s4);
String s5=new String(c,0,2);
System.out.println(s5);
String str1="hello";
String str2=" world!";
String str3="hello world!";
String str4=str1+str2;
String str5="hello"+" world!";
System.out.println(str3==str5);
System.out.println(str4==str5);
常用方法
charAt(int index)
返回指定索引处的 char 值。
indexOf(String ch)
返回指定字符在此字符串中第一次出现处的索引。
isEmpty()
当且仅当 length() 为 0 时返回 true。
lastIndexOf(String ch)
返回指定字符在此字符串中最后一次出现处的索引。
length()
返回此字符串的长度。
replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
startsWith(String prefix)
测试此字符串是否以指定的前缀开始。
toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
contains(CharSequence s)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
String str="abcdefgc";
// charAt(int index)
// 返回指定索引处的 char 值。
//String底层使用char数组进行数据存储所以可以直接返回某一索引数据
char charAt = str.charAt(0);
System.out.println(charAt);//a
// indexOf(String ch)
// 返回指定字符在此字符串中第一次出现处的索引。
int indexOf = str.indexOf("c");
System.out.println(indexOf);//2
// lastIndexOf(String ch)
// 返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf = str.lastIndexOf("c");
System.out.println(lastIndexOf);//7
// isEmpty()
// 当且仅当 length() 为 0 时返回 true。
//判断字符串是否为空字符串""
boolean empty = str.isEmpty();
System.out.println(empty);
// length()
// 返回此字符串的长度。
//返回存储数组的长度
int length = str.length();
System.out.println(length);//8
// replace(char oldChar, char newChar)
// 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replace = str.replace("c", "CC");
System.out.println(replace);//abCCdefgCC
// split(String regex)
String[] split = str.split("c");
//以指定字符进行字符串截取返回字符串数组
for (int i = 0; i < split.length; i++) {
System.out.print(split[i]+" ");
}
System.out.println();
// startsWith(String prefix)
// 测试此字符串是否以指定的前缀开始。
boolean startsWith = str.startsWith("abc");
System.out.println(startsWith);
// String toUpperCase()
// 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
String upperCase = str.toUpperCase();
System.out.println(upperCase);
// toLowerCase()
// 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String lowerCase = upperCase.toLowerCase();
System.out.println(lowerCase);
// contains(CharSequence s)
// 当且仅当此字符串包含指定的 char 值序列时,返回 true。
boolean contains = str.contains("cdef");
System.out.println(contains);
//String很多方法会返回新的字符串
//因为String存储的是常量 不允许修改,所以只能产生新的字符串保存结果
//不会修改原字符串数据
//但是会加大程序的负担
System.out.println(str);
总结:
1、String存储字符串常量不允许更改
2、String返回新的字符串不会修改本身
3、使用构造方法创建字符串对象与直接赋值存在差别
4、String本质是字符数组
更多推荐



所有评论(0)