目录
1. API概述
API : java语言中实际提供的类和接口
API 文档:对Java中提供的类和接口中的功能进行说明的文档。
2. Object
Object类是所有Java类的祖先(根基类)。每个类都使用 Object 作为 超类(父类)。所有对象(包括数组)都实现这个类的方法。
所有类直接间接继承Object ,为实现多态性.
如果在类的声明中未使用extends关键字指明其基类,则默认基类为 Object类
public class Person { }
等价于: public class Person extends Object { }
2.1 toString()
Object类中定义有public String toString()方法,其返回值是 String 类型,描述当前对象的有关信息。
String toString() 返回对象的字符串表示形式。
native:
修饰的方法称为本地方法(有些方法java是不实现的,直接调用本地操作系统中的方法)
输出一个对象时,默认回调用类中toString(), 我们的类中如果没有定义toString(),找父类中的toString()。
Object类中的toString()方法:
public String toString() {
getClass().getName()+"@" hashCode();---------------> 转成16进制的字符串
}
(1)没有进行toString()方法重写.
public class Car extends Object{
String name;
int price;
public Car(String name, int price) {
this.name = name;
this.price = price;
}
}
public class JavaApiDemo {
public static void main(String[] args) {
Car car = new Car("宝马", 3000000);
System.out.println(car);//javaapi.Car@1b6d3586
System.out.println(car.toString()); //javaapi.Car@1b6d3586
}
}
(2) 重写toString()方法: 将对象以字符串形式输出
public class Car extends Object{
String name;
int price;
public Car(String name, int price) {
this.name = name;
this.price = price;
}
//将对象以字符串形式输出
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}
public class JavaApiDemo {
public static void main(String[] args) {
Car car = new Car("baoma",100000);
System.out.println(car); //Car{name='baoma', price=100000}
System.out.println(car.toString());//Car{name='baoma', price=100000}
}
}
2.2 equals()
Object类中的equals()方法:
public boolean equals(Object obj) {
return (this == obj);
}
== (1)用于基本类型比较 比较的值是否相等
(2) 用于引用类型比较 比较的是引用地址(对象地址)是否相等
public class Car extends Object{
String name;
int price;
public Car(String name, int price) {
this.name = name;
this.price = price;
}
//将对象以字符串形式输出
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Car){
Car car = (Car)obj;
return this.name.equals(car.name)&&this.price==car.price;
}
return false;
}
}
public class ObjectDemo2 {
public static void main(String[] args) {
int a = 10;
int b = 10;
System.out.println(a==b);//true
Car car1 = new Car("bsj",100000);
Car car2 = new Car("bsj",100000);
Car car3 = car2;
/*
car1.equals(car2) 由于Car类中没有重写equlas(),那么调用Object类中的equals()
public boolean equals(Object obj) {
return (this == obj);
}
*/
System.out.println(car1.equals(car2));//true car1==car2
System.out.println(car2.equals(car3));//true Car car3 = car2;
/*
字符串类中重写了Object类中的equals() 实现是比较两个字符串中每一个字母是否相等
所以一般默认为equals() 方比较的是对象中内容是否相等
*/
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2));//true
}
}
System.out.println(s1.equals(s2));
字符串类中重写了Object类中的equals() 实现是比较两个字符串中每一个字母是否相等
所以一般默认为equals() 方比较的是对象中内容是否相等。
源码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
3. Arrays类
java.util.Arrays类
Arrays类中包含了许多关于数组操作的静态方法
3.1 equals() 方法
定义: 比较两个非同一数组是否相等,而数组本身的equals判断另一个数组是否它本身。
声明:public static boolean equals(type[]a,type[]a2)
public class ArraysDemo1 {
public static void main(String[] args) {
int[] a = {1,2,3};
int[] b = {1,2,3};
int[] c = {1,3,5};
//比较数组中的内容/数据
System.out.println(Arrays.equals(a,b));//true
System.out.println(Arrays.equals(a,c));//false
}
}
3.2 sort(排序)
作用于数组的所有元素 public static void sort(type[] a){}
public class ArraysDemo2 {
public static void main(String[] args) {
//sort 排序(底层使用快速排序)
int[] x = {5,4,3,2,1};
Arrays.sort(x); //数组a全部数据排序 0~length - 1
System.out.println(Arrays.toString(x));//[1, 2, 3, 4, 5]
int[] y = {5,4,3,2,1};
Arrays.sort(x,0,3);//对某个区间排序,开始位置(包含),不包含(结束位置)
//开始位置:fromIndex 结束位置:toIndex
System.out.println(Arrays.toString(y));//[3, 4, 5, 2, 1]
}
}
自定义对象排序
自定义类实现Comparable接口,需要重写compareTo方法
public class User implements Comparable<User>{
private String account;
private String possword;
private int id;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPossword() {
return possword;
}
public void setPossword(String possword) {
this.possword = possword;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User(String account, String possword, int id) {
this.account = account;
this.possword = possword;
this.id = id;
}
@Override
public String toString() {
return "Test{" +
"account='" + account + '\'' +
", possword='" + possword + '\'' +
", id=" + id +
'}';
}
/*
为我们的引用类型提供一个自定义排序规则,
方法会在Arrays类中的sort()方法底层调用
结果是用来判断大小 小于0 等于0 大于0
*/
@Override
public int compareTo(User o) {
return this.id - o.id;
//return this.account.compareTo(o.account);
}
}
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
User api1 = new User("123456","111111",1);
User api2 = new User("123457","111111",4);
User api3 = new User("123458","111111",2);
User api4 = new User("123459","111111",3);
User[] users = {api1,api2,api3,api4};
System.out.println(users);
//[Ljavaapi.User;@1b6d3586
Arrays.sort(users);
System.out.println(Arrays.toString(users));
/*[ApiDemo1{account='123456', possword='111111', id=1},
ApiDemo1{account='123458', possword='111111', id=2},
ApiDemo1{account='123459', possword='111111', id=3},
ApiDemo1{account='123457', possword='111111', id=4}] */
}
}
3.3 binarySearch(二分法/折半查找)
前提:有序的
import java.util.Arrays;
public class ArraysDemo3 {
public static void main(String[] args) {
//折半查找 前提:有序的
int[] a = {1,2,3,4,5,6,7,8,9};
System.out.println(Arrays.binarySearch(a,2,8,7));//6
System.out.println( Arrays.binarySearch(a,4));//3
//若返回负数则表示在数组中没有该值
}
}
3.4 数组复制(拷贝)
返回一个新数组,并且将原数组值复制到新数组中。(可以进行扩容)
import java.util.Arrays;
public class ArraysDemo4 {
public static void main(String[] args) {
//数组复制:
//传入原数组,新数组长度
int[] b = {1,4,7,3,2};
int[] c = Arrays.copyOf(b,10);
System.out.println(Arrays.toString(c));
//[1, 4, 7, 3, 2, 0, 0, 0, 0, 0]
}
}
3.5 toString() 方法
声明:public static String toString(type[] a){}
返回指定数组内容的字符串表示形式
例:上面所重写的toString()方法
@Override
public String toString() {
return "Test{" +
"account='" + account + '\'' +
", possword='" + possword + '\'' +
", id=" + id +
'}';
}