API接口文档

什么是API?

 API是指应用程序的编程接口,用来让别人使用这个应用程序。关于API更加形象具体的说明见这里

API接口说明文档,用来告诉别人这个应用程序如何使用。

我们现在想要看java的API文档说明是想看看java是怎么设计的,写java的技术人员是怎么设计一些函数、数据类型等等的。

咋样能看到java的API

方法一:上链接

方法二:

Java框架结构(后续慢慢将这个补完整)

先看看java.base —— 描述java平台标准版的API功能

包含一堆package 和 services。

先来看包,里面有很多种包,java.io、java.lang包等等,java.lang很常见,先来看这个。

java.lang

点开java.lang发现里面描述了很多接口、数据类型类、和一些其他的东西。

查看class里面有Boolean、Byte、Interger、Object这样的类,继续点进去发现有很多关于这个类的说明、和方法解释;比如Object类有equal方法、getclass方法等,interger也有equal方法。

equal方法如何实现:

  • Object

这时候我们就很想看一下这个源码是怎样实现这个比较方法的,点到编译器里查看就会发现Object实现equal的方法特别简单。

==判等是判断两个对象是否地址相同

  • String

所以Object的equal方法只是判断两个对象是不是存放在同一个地址。但是显然这种方法不能适用于所有情况,比如对于String类型,可能两个对象不在同一个地址,但是内容相同,这样的情况应该怎么判断呢。—————— 在String这个类里面重写equal方法,(毕竟所有的类都是Object的子类嘛)

判断方法:

判断是否在一个地址,是则true,不在一个地址的情况下继续判断。

判断是否是同一种类型,是的话转型,不是则false。

转型之后,如果coder码相等或者COMPACT_STRINGS为假,就进行如下判断:

code码和COMPACT_STRINGS是个啥:

code码是给所有对象编号的一个hash码。

COMPACT_STRING判断字符串压缩以及联系判断编码的机制的解释如下:

 更加详细的解释后续补上。

 先判断长度,长度相等继续判断每一个值,所有值相等返回true,否则都要返回false(长度都不相等肯定是false啦)。

这个就是String全部判等过程,那么所有的类型可能都要重写自己的判等方法。

  • 其他

比如自己写的User类、数组等等。但是从String的判断过程中我们可以总结一个判断的流程框架。

  1. 判断两对象的地址是否相同。同则true,否则进入2。
  2. 判断两对象的类型是否相同以及对象是否为空。同且不为空则进入3,否则false。对象类型是否相同判断方法:
  •  interface                                               
  • getclass  

     3. 转型,转为本类类型。

  •  如果是整数、常量基本数据类型等等,用==判断。
  •  如果是String、Integer 等类型,用已有的equal判断,他们都是经过一遍重写的。
  •  如果是自己写的类要自己写判等方法。

ps: 一些常量值会直接放在常量池中,常量值相同,他们的地址是相同的,因此可以用==判断。

eg:   //User 不重写判等方法

User user0 = new User();

User user1 = new User();

user0.id="12345";

user1.id="12345";

user0.equal(user1);

public class Test {
    String testID;
    public boolean equal(Object anObject){
        if(this == anObject) return true;
        if( this!=null && anObject instanceof Test) {
            Test test0 = (Test) anObject;
            return (this.testID == test0.testID);
            //return (this.testID.equals(test0.testID));
        }
        return false;
    }
    public static void main(String[] args){
        Test test0 = new Test();
        Test test1 = new Test();
        test0.testID="12345";
        test1.testID="12345";
        System.out.println(test0.equal(test1));
    }
}

<其他架构后面继续补充>

练习

//User.java
public class User {
    String id;
    String name;
    int age;
    String phoneNum;
    Test test;
    Integer i;
    int[] arr;
    public User(){

    }
    public User(String id,String name,int age,String phoneNum,Test test,Integer i,int[] arr){
        this.id = id;
        this.name = name;
        this.age = age;
        this. phoneNum = phoneNum;
        this.test = test;
        this.i = i;
        this.arr = arr;
    }
    @Override
    public boolean equals(Object o) {

//自己写的方法:
        if(this == o) return true;
        if((o == null) || (this.getClass() != o.getClass())) return false;
        User user0 = (User) o;
        if(this.arr.length != user0.arr.length) return false;
        for(int i=0;i<this.arr.length;i++){
            if(this.arr[i] != user0.arr[i]) return false;
        }
        return ( (this.id.equals(user0.id)) && (this.name.equals(user0.name)) && (this.age == user0.age) && (this.phoneNum.equals(user0.phoneNum)) && (this.test.equal(user0.test)) && (this.i.equals(user0.i)));

//下面是idea自己生成的判等方法:
//        if (this == o) return true;
//        if (o == null || getClass() != o.getClass()) return false;
//        User user = (User) o;
//        return age == user.age && Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(phonenum, user.phonenum) && Objects.equals(test, user.test) && Objects.equals(i, user.i) && Arrays.equals(arr, user.arr);
    }

    public static void main(String[] args){
        int[] arr1 = new int[5];
        int[] arr2 = new int[5];
        for(int j=0;j<5;j++){
            arr1[j]=j+1;
            arr2[j]=j+1;
        }

        Test test0 = new Test();
        test0.testID =new String("001");
        Test test1 = new Test();
        test1.testID =new String("001");

        User user1 = new User("410","Stefan",27,"1234567890",test0,2,arr1);
        User user2 = new User("410","Stefan",27,"1234567890",test1,2,arr2);
        System.out.println(user1.equals(user2));
    }
}


//Test.java
public class Test {
    String testID;
    public boolean equal(Object anObject){
        if(this == anObject) return true;
        if( this!=null && anObject instanceof Test) {
            Test test0 = (Test) anObject;
            return (this.testID.equals(test0.testID));
        }
        return false;
    }
}

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐