一.API
1.定义:Application Programming Interface,即应用编程接口,一切可调用的东西都是API。
2.例如:
Java.lang包,这个包会自动导入。
java.lang.Object,
java.lang.String,java.lang.StringBuilder/StringBuffer,
正则表达式,包装类等。
二.Object
1.定义:所有对象的顶级父类,存在于java.lang包中,这个包不需要手动导包。
2.常用方法:
<1>boolean equals(Object obj),指示其它某个对象是否与此对象相等。
<2>protected void finalize(),当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
<3>int hashCode(),返回该对象的哈希码值日。
<4>String toString(),返回该对象的字符串表示。
三.toString简单案例
public class ToString {
public static void main(String[] args) {
Person p = new Person("熊大",20,10,"森林");
System.out.println(p);
System.out.println(p);
}
}
class Person{
private String name;
private int age;
private double salary;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person() {
}
public Person(String name,int age,double salary,String address)
{
this.name = name;
this.age = age;
this.salary = salary;
this.address = address;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", salary=" + salary + ", address=" + address + "]";
}
}
四.equals简单案例
public class Equals {
public static void main(String[] args) {
//基础类型是按值比较。
int i1 = 10;
int i2 = 10;
int i3 = 12;
System.out.println(i1==i2);//True。
System.out.println(i1==i3);//False。
System.out.println();
//对象为引用类型,引用类型按照内存地址比较。
Tiger t1 = new Tiger();
Tiger t2 = new Tiger();
Tiger t3 = t1;
System.out.println(t1);//直接输出对象会输入一串地址。
System.out.println(t2);
System.out.println(t3);
System.out.println();
System.out.println(t1.equals(t2));//False。
System.out.println(t1==t2);//False。
System.out.println();
System.out.println(t1.equals(t3));//True。
System.out.println(t1==t3);//True。
}
}
class Tiger{
}
五.Hashcode简单案例
public class HashCode {
public static void main(String[] args) {
//比较八大基本类型时,判断的是值。
int a = 1;
int b = 1;
System.out.println(a==b);//True
System.out.println();
//比较对象时,比较的是对象的地址。
Integer x = 5;
Integer y = 10;
Integer z = x;//把x的地址赋给了z。
System.out.println(x==y);
System.out.println(x==z);
System.out.println();
System.out.println(x.equals(z));
System.out.println();
//测试hashCode()哈希值。
System.out.println(x.hashCode());
System.out.println(y.hashCode());
System.out.println(z.hashCode());
}
}
六.创建String对象
public class String_Create {
public static void main(String[] args) {
//方式1:new String(char [])
char [] c = {
'a','b','c','d'};
String s = new String(c);
System.out.println(s);
System.out.println();
//方式1:直接创建
String s2 = "abcd";//常量池中分配新的内存。
System.out.println(s2);
System.out.println(s==s2);//地址不同。
System.out.println(s.equals(s2));
String s3 = "abcd";//访问常量池中已经存在的对象。
System.out.println(s2==s3);//地址相同。
}
}
七.String常用方法案例
import java.util.Arrays;
public class String_Method {
public static void main(String[] args) {
String s = "abcdefg";
System.out.println(s.charAt(3));//返回指定索引处的char值。
System.out.println(s.endsWith("fg"));//判断是否以指定后缀结束。
String s1 = "abc";
System.out.println(s.equals(s1));//判断两个字符串的内容是否相同。
System.out.println(s.length());//查看长度。
String s2 = "1,2,3,4,5";
String [] strs = s2.split(",");//根据指定的符号切割字符串。
System.out.println(Arrays.toString(strs));//查看数组元素。
System.out.println(s2.startsWith("1,"));//True
System.out.println(s.substring(3,7));//截取数组含头不含尾。
System.out.println(String.valueOf(10));//把整数10转化为字符串形式。
}
}
八.StringBuilder/StringBuffer
1.特点:
<1>封装了char[]数组。
<2>是可变的字符序列。
<3>提供了一组可以对字符内容修改的方法。
<4>常用append()来代替字符串做字符串连接。
<5>内部字符数组默认初始容量16:initial capacity of 16 characters。
<6>如果大于16会尝试扩容,新数组大小变为原来的两倍+2,如果还不够,直接扩充到需要的容量大小。Int newCapacity = value.length*2 + 2;
<7>StringBuffer1.0出道线程安全,StringBuilder1.5出道线程不安全。
九.StringBuilder和StringBuffer的区别
1.在线程安全上,Buffer由旧版本提供,线程是安全的。Builder是jdk1.5之后产生的,线程不安全。
2.在执行效率上,StringBuilder第一,StringBuffer第二,String第三。
3.源码体现:本质上都是在调用父类抽象类AbstractStringBuilder来干活,只不过Buffer把代码加了同步关键字,使得程序可以保证线程安全问题。
十.包装类
包装类与基本类型的对应关系:byte-Byte,short-Short,int-Integer,long-Long,float-Float,double-Double,char-Character,boolean-Boolean。
十一.自动装箱和自动拆箱
1.自动装箱:把基本类型包装成一包装类的对象。Integer a = 5;a是引用类型,引用了包装对象的地址。编译器会完成对象的自动装箱:Integer a = IntegervalueOf(5)。
2.自动拆箱:从包装对象中,自动取出基本类型值。int i = a;a是包装类型,没法给变量赋值,需要把5取出来。编译器会自动完成拆箱:int i = a.intValue();。