第五章:API(1)

学习目标:

掌握API相关知识

学习内容:

1、 基本数据类型封装类 2、 Object类 3、 Arrays类 4、 String类

学习时间:

2021年5月5日 2021年5月9日

学习产出:

1、 技术笔记 1 遍 2、CSDN 技术博客 1 篇

Java API概述

API(Application Programming Interface)应用程序编程接口

是对java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明

包装类(如:Integer,Double等)这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作方法。

基本数据类型封装类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VswgLMX7-1621042303926)(E:\Users\asus\AppData\Roaming\Typora\typora-user-images\1621038944929.png)]

对于包装类来说,这些类的用途主要包含两种:

​ ● 作为和基本数据类型对应的类类型存在。

​ ● 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。

Integer  n  = new Integer(10);
         // 包装的一些关于int类相关信息
          System.out.println(n.MAX_VALUE);//最大int型整数 2^31-1
          System.out.println(n.MIN_VALUE);//最小int型整数 -2^31
          System.out.println(Integer.SIZE);//Integer.SIZE:位数:32
          System.out.println(Integer.BYTES);//Integer.BYTES:字节数:4个字节

         Integer m =  new Integer("12");
         System.out.println(m+10);

        System.out.println(m.compareTo(n));//比较大小
        System.out.println(n.equals(m));//比较是否相等
        System.out.println(Integer.max(10,5));

        System.out.println(Integer.toBinaryString(3));//返回字符串表示的无符号二进制数值
        System.out.println(Integer.toHexString(17));//返回字符串表示的无符号十六进制数值
        System.out.println(Integer.toOctalString(9));//返回字符串表示的无符号八进制数值
         int x = 10;
         Integer  n  = new Integer(x);
         int m  =  n.intValue();//取出对象中包含的int值

         String s = "10";
         int y = Integer.parseInt(s); //将String类型转为int

         String s1  = n.toString(); //将整数 转为 String

         Integer in =   Integer.valueOf(x);
         Integer in1 =   Integer.valueOf("10");

装箱和拆箱A

装箱

​ ● 自动将基本数据类型转换为包装器类型

​ ● 装箱的时候自动调用的是Integer的valueOf(int)方法

拆箱

​ ● 自动将包装器类型转换为基本数据类型

​ ● 拆箱的时候自动调用的是Integer的intValue方法

int x = 10;
         /*
         基本类型转引用类型
         Integer  n  =  new Integer(x);
         Integer  n1  =  Integer.valueOf(x);
         */

         Integer n = x;  //自动装箱  默认调用valueOf()方法 创建一个Integer对象

             //n.intValue()
         int y = n;//自动拆箱  将引用类型转为基本类型  默认调用intValue()方法 取出包含的int值
/*
               自动装箱的问题

                  == 在比较基本类型时,比较的就是值是否相等
                  == 在比较引用类型时,比较对象在内存中的地址是否相等

                   自动装箱调用valueOf()
                   public static Integer valueOf(int i) {
                         判断值如果在 -128 到 127之间 会从缓存数组中取出一个对象返回,
                         多个值相同,返回的是同一个对象
                        if (i >= IntegerCache.low && i <= IntegerCache.high)
                            return IntegerCache.cache[i + (-IntegerCache.low)];
                        return new Integer(i);//不在-128 到 127之间会创建新的对象返回
                    }
            */
            Integer x = 127;
            Integer y = 127;
            System.out.println(x==y);//10 true  128 false


            Integer m = new Integer(128);
            Integer n = new Integer(128); //两个不同的对象比较
            System.out.println(m==n);//10 false  128 false

           System.out.println(127==127);

Object类

Object类是所有Java类的祖先(根基类)。每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。

如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类

//public class Person extends Object
public class Person

toString

        Person p = new Person();

        /*
          使用System.out.println(p);输出对象,此时会默认调用对象中的toString()
          当类中没有toString()时,默认调用父类toString()
           public String toString() {
                return getClass().getName() + "@" + Integer.toHexString(hashCode());
            }

            一般情况下可以重写Object类中toString()
        */
        System.out.println(p);

重写toString

@Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

equals方法

/*
     Object类中equals
         public boolean equals(Object obj) {
            return (this == obj);
         }
    */
     public static void main(String[] args) {
         Person p1 = new Person();
         p1.setName("张三");
         p1.setAge(20);

         Person p2 = new Person();
         p2.setName("张三");
         p2.setAge(20);
         System.out.println(p1.equals(p2));

         String s = new String("abc");
         String s1 = new String("abc");
         System.out.println(s==s1);//false
                         //String类重写了equals()  比较的是对象中包含的内容是否相等
         System.out.println(s.equals(s1));//true

         Integer x = 128; //new Integer(128);
         Integer y = 128; //new Integer(128);
         System.out.println(x==y);//false
         System.out.println(x.equals(y));//true
         //几乎API中所有类都重写Object类中equals(),比较的是对象中包含的内容是否相等
     }

Arrays

java.util.Arrays类

用于操作数组工具类,里面定义了常见操作数组的静态方法。

equals 方法

int [] a = {1,2,3,4,5};
        int [] b = {1,2,3,4,5};
        System.out.println(a==b);//flase
        System.out.println(Arrays.equals(a, b));//true
        /*
            * public static boolean equals(int[] a, int[] a2) {
            if (a==a2)
                return true;
            if (a==null || a2==null)
                return false;

            int length = a.length;
            if (a2.length != length)
                return false;

            for (int i=0; i<length; i++)
                if (a[i] != a2[i])
                    return false;

            return true;
      }*/

sort-排序

      int [] a = {5,4,3,2,1};
      //Arrays.sort(a);//0---length-1  对整个数组进行排序
      //public static void sort(type[] a, int fromIndex(包括), int toIndex(不包括))
      Arrays.sort(a,0,3);//0  --- 3-1    对指定的区间进行排序
      System.out.println(Arrays.toString(a));

自定义对象排序

自定义类实现Comparable接口

重写compareTo方法

//用来做比较, 提供的一个自定义排序规则的方法
    //compareTo()方法会在sort()的底层中调用
    @Override
    public int compareTo(Student o) {
        //return  this.num-o.num ;// 小于0   等于0  大于0
        return this.name.compareTo(o.name);
    }
         Student [] students = new Student[5];

         Student s1 = new Student(101, "张三1");
         Student s2 = new Student(102, "张三2");
         Student s3 = new Student(103, "张三3");
         Student s4 = new Student(104, "张三4");
         Student s5 = new Student(105, "张三5");

         students[0] = s2;
         students[1] = s5;
         students[2] = s1;
         students[3] = s4;
         students[4] = s3;

         //对引用类型数组进行排序时,类实现
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));


        String [] sarr = {"a","c","d","b"};
        Arrays.sort(sarr);
        System.out.println(Arrays.toString(sarr));

binarySearch-二分搜索

        
        /*
        二分查询,查找指定值在数组中位置
        前提:数组要有序
        ● 声明: 
        public static int binarySearch(type[] a, type key)
        public static int binarySearch(long[] a,int fromIndex,int toIndex,long key)
        a - 要搜索的数组。 
        key - 要搜索的值。 
        fromIndex - 要排序的第一个元素的索引(包括)。 
        toIndex - 要排序的最后一个元素的索引(不包括)。 
        type - byte、double、float、object、long、int、short、char
        */
        int [] a = {2,1,3,7,6,5,8};

        Arrays.sort(a);
        //   1,2,3,5,6,7,8
        //如果key在数组中,则返回搜索值的索引;否则返回-1或者”-“(插入点)
        System.out.println(Arrays.binarySearch(a, 4));
        System.out.println(Arrays.binarySearch(a, 0,5,6));

        System.out.println(mybinarySearch(a,9));
    }

    public static  int mybinarySearch(int [] a,int key){
        int low = 0;
        int high = a.length - 1;
        while (low <= high) {
            int mid = (low + high) >>> 1;//找中间位置
            int midVal = a[mid];//中间位置值
            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -1;  // key not found.
    }

copyOf - 数组复制

//数组复制
        int[] a = {1,2,3,4,5};
        //返回一个指定长度的新数组,并将原数组中的内容复制到新数组中
        int [] b = Arrays.copyOf(a, 10);
        System.out.println(Arrays.toString(b));

String类

String类概述

​ 字符串是由多个字符组成的一串数据(字符序列)的字符串常量,java中所有字 符串都是String类的实例

两种创建形式

/*
      String 表示字符串
      所有字符串都是String类的实例(对象)
      字符串值不能改变(一旦给定字符串的值,值就不能改变) 因为底层用到一个final修饰的char 数组
          private final char value[];  底层是单个字符存储  char a=97 b=98 c=99
     */
public static void main(String[] args) {
           /*
             String对象的两种创建方式
             1.
             String s = "abc";

             2.
             String s1  = new String("abc");
            */

        String s1 = "abc";//首先会在字符串常量池中查找,如果没有,就在常量池中创建
        String s2 = "abc";//如果常量池已经存在,就不需要创建,直接返回地址即可
        System.out.println(s1==s2);//true
        System.out.println(s1.equals(s2));//true

        String s3 = new String("abc");
        String s4 = new String("abc"); //都会在堆中创建一个对象
        System.out.println(s3==s4);//false
        System.out.println(s3.equals(s4));//true
    }

判断

/*
            String 构造方法
           */
        String s = new String("abC");//创建一个""  this.value = "".value;
        String s1 = new String("abc");// this.value = original.value;


        /*
          判断
          boolean equals(Object obj)
          boolean equalsIgnoreCase(String str)
          boolean contains(String str)
          boolean isEmpty() boolean
          startsWith(String prefix)
          boolean endsWith(String suffix)
         */
        System.out.println(s.equals(s1));//判断两个对象中的内容是否相等
        System.out.println(s.equalsIgnoreCase(s1));//判断两个对象中的内容是否相等 忽略大小写
        String s2 = "abcdefg";
        System.out.println(s2.contains("ab"));//判断是否包含指定字符串
        System.out.println(s2.isEmpty()); //判断是否为空("")  为空返回true
        System.out.println(s2.startsWith("ab"));//判断是否以指定的字符串开头
        System.out.println(s2.endsWith("ab"));//判断是否以指定的字符串结尾
        System.out.println("a".compareTo("c"));//比较两个字符串的位置

获取

/*
            获取功能 int length()
            char charAt(int index)
            int indexOf(String str)
            int indexOf(String str,int fromIndex)
            String substring(int start)
            String substring(int start,int end)
           */

           String s = "abcdedfg";
                    // 01234567
           System.out.println(s.length());
           char c = s.charAt(3);//返回指定索引的字符
           System.out.println(c);

           int index = s.indexOf("d");//获取指定字符串首次出现的位置 从前向后找
           System.out.println(index);

          int index1 = s.indexOf("d",4);//从指定的位置开始,获取指定字符串首次出现的位置
          System.out.println(index1);

          int index2 = s.lastIndexOf("d");
          System.out.println(index2);

        String s3 = "abcdedfg";
                  // 01234567

        String s4 =   s3.substring(2); //从s3 截取指定区间的字符串  从指定位置开始 到  结束
        System.out.println(s3);//abcdedfg
        System.out.println(s4);//cdedfg

        String s5 =   s3.substring(2,6);//k指定区间截取  开始位置 -- 结束位置(不包含结束)
        System.out.println(s5);

转换

          /*
            String toLowerCase()
            String toUpperCase()
            String concat(String str)
            Stirng[] split(分割符);
           */

        String s = "abcdEFG";
        System.out.println(s.toLowerCase());//转小写
        System.out.println(s.toUpperCase());//转大写

        String s1 = s.concat("HIJK"); //两个字符串拼接 并返回新的字符串对象.
        System.out.println(s1);


        String s2 = "ab:cd:E:FGH";
        String[] array =  s2.split(":");//用指定符号 来分割字符串为数组
        System.out.println(Arrays.toString(array));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值