• Java基础00-常用API24


    1. Math

    Math

    1.1 Math类概述

    1.2 Math类的常用方法

     返回绝对值:是正数是时候直接返回参数本身,是负值的时候返回的是参数的相反数。
    参数是10时返回的是10,参数是-10的时候返回的是10。
    Math类的三个方法比较: floor() ceil() round()

    2. System

    System

    2.1 System类概述

    2.2 System类的常用方法

    currentTimeMillis计算时间

     方法示例:
    exit方法:
    在这里插入图片描述
    运行结果:
    结果为只有一个开始没有结束,因为在中间Java虚拟机已经被终止了。

    3. Object

    Object

    3.1 Object类的概述

    3.2 Object的常用方法

     

    equals方法中变量在前和在后的区别

    3.2.1 toString

    toString方法示例:

    创建一个学生类对象:
    有变量,构造方法,get,set方法。

     测试类:
    测试类中为name和age变量赋值,然后输出s,会输出什么那?

     运行结果:
    输出的是一串和变量没有任何关系的字符

     那为什么会输出这样一段字符那?
    接下来就要看System.out.println();中println的源码了。

     如果我们在类中重写了toString方法就不会输出这样的一串字符了。
    一般可以使用快捷键生成

    3.2.2 equals

    创建一个学生类:类中有变量和构造方法,get,set

    测试类:
    比较两个对象的内容是否相同

    运行结果:
    false可见()是实现不了不交两个对象的内容是否相同的
    因为s1和s2都是new出来的,代表的是一个地址值,比较地址值是看不出内容是否相同的。

    将()注释,使用equals方法比较

    运行结果:
    输出的还是false
    为什么还是false?往下看equals的源码

    归根到底还是用的(==)方法,所以也是行不通的。
    所以想要判断内容对象的内容是否相同只能重写equals方法了。

    在类中重写equals方法,直接快捷键生成即可,快捷键生成会生成两个方法,把hashCode方法删除即可。
    然后再运行测试类:
    确实变成了true,是为什么那?往下看

    结果是true

    4. Arrays

    4.1 冒泡排序

    将下面的身高由低到高排列,最后d会出现在最左边,b会出现在最右边。
    第一次比较,a和b比较,大的往后排,所以这次不变。现在的位置还是a b c d e
    第二次比较,b和c比较,大的往后排,将b和c调换位置。现在的位置是a c b d e
    第三次比较,b和d比较,大的往后排,将b和d调换位置。现在的位置是a c d b e
    第四次比较,b和e比较,大的往后排,将b和e调换位置。现在的位置是a c d e b
    接下来的比较b就不会参与了,是a c d e四个比较,和上面的比较过程一样。

     

    代码示例:

    public class ArrayDemo {
    
        public static void main(String[] args) {
            // 定义一组数组
            int[] arr = { 12, 34, 63, 11 };
            System.out.println("排序前" + arrayToString(arr));
    
            // length-1是为了防止索引越界;
            // 因为在比较相邻的两个数据时,第二个比较数据会是{i+1},
            // 如果第二个比较的数据正好是最后一个数据时,
            // 再{i+1}就会超出本来的索引。
            for (int i = 0; i < arr.length - 1; i++) {
                // 比较两个相邻的数据,如果第一个大于第二个就进入方法进行位置更替
                if (arr[i] > arr[i + 1]) {
                    // 先将arr[i]中的数据赋值给temp
                    int temp = arr[i];
                    // 将arr[i+1]的值赋给arr[i]
                    arr[i] = arr[i + 1];
                    // 将temp,也就是原来的arr[i]的值赋给arr[i+1]
                    arr[i + 1] = temp;
                }
            }
            System.out.println("第一次比较" + arrayToString(arr));
            
            //因为每次比较都要少一个数据,所以这里每次都要多减一个
            for (int i = 0; i < arr.length - 1 - 1; i++) {
                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
            System.out.println("第二次比较" + arrayToString(arr));
            
            for (int i = 0; i < arr.length - 1 - 2; i++) {
                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
            System.out.println("第三次比较" + arrayToString(arr));
            
        }
    
        /// 把数组中的元素按照指定的规则组成一个字符串: [元素1,元素2,...]
        public static String arrayToString(int[] arr) {
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for (int i = 0; i < arr.length; i++) {
                // 判断数组是否是最后一个,最后一个则不加逗号。
                if (i == arr.length - 1) {// 因为arr.length判断的长度是从1开始的,但是计算机的长度是从0开始的,所以要-1
                    sb.append(arr[i]);
                } else {
                    sb.append(arr[i] + ",");
                }
            }
            sb.append("]");
            // 将StringBuilder转化为String
            String s = sb.toString();
            return s;
        }
    }

    运行结果:
    第三次的结果就是我们想要的结果了,从小到大排列。
    但是这样的写法太麻烦,还能继续优化一下,向下看。

    优化后的代码:
    未优化的代码做的事情就是比较n-1次,所以可以直接用for循环表示,在for循环中进行比较。

    public class ArrayDemo {
    
        public static void main(String[] args) {
            // 定义一组数组
            int[] arr = { 12, 34, 63, 11 };
            System.out.println("排序前" + arrayToString(arr));
            
            //冒泡排序循环比较的次数是n-1,所以这里的循环次数也要-1
            for (int i = 0; i < arr.length - 1; i++) {
                //这里直接-i,就可以了,因为外面的循坏正好是从0开始一直到循环次数
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            System.out.println("排序后的:" + arrayToString(arr));
            
        }
    
        /// 把数组中的元素按照指定的规则组成一个字符串: [元素1,元素2,...]
        public static String arrayToString(int[] arr) {
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for (int i = 0; i < arr.length; i++) {
                // 判断数组是否是最后一个,最后一个则不加逗号。
                if (i == arr.length - 1) {// 因为arr.length判断的长度是从1开始的,但是计算机的长度是从0开始的,所以要-1
                    sb.append(arr[i]);
                } else {
                    sb.append(arr[i] + ",");
                }
            }
            sb.append("]");
            // 将StringBuilder转化为String
            String s = sb.toString();
            return s;
        }
    }

    4.2 Arrays类的概述和常用方法

    Arrays类位于 java.util 包中,主要包含了操纵数组的各种方法

    使用时导包:import java.util.Arrays
    Arrays类的常用方法

    代码示例:

    运行结果:

    5. 基本类型包装类

    基本类型和包装类型的区别
    Byte包装类
    Integer 包装类

    5.1 基本类型包装类概述

    除了char和int,剩下的包装类都是基本数据类型首字母大写。

    5.2 Integer类的概述和使用

    过时的方法也可以使用,但是不推荐使用。

    注意:根据String值创建Interger对象,String值只能是数字。

    5.3 int和String的相互转换

    代码示例:

    运行结果:

    5.3.1 案例:字符串中数据排序

    public class StringSort {
        public static void main(String[] args) {
            String a = "91 27 46 38 50";
            String b[] = a.split(" ");
            int c[] = new int[b.length];
            for (int i = 0; i < b.length; i++) {
                c[i] = Integer.parseInt(b[i]);
            }
            Arrays.sort(c);
            System.out.println(c);
            System.out.println(Arrays.toString(c));
            StringBuilder s = new StringBuilder();
            for (int j = 0; j < c.length; j++) {
                s.append(c[j]);
                s.append(" ");
            }
            System.out.println(s);
        }
    }

    输出结果:

    [I@28d93b30
    [27, 38, 46, 50, 91]
    27 38 46 50 91 

    5.4 自动装箱和拆箱

    代码示例:

    装箱:
    valueOf就是返回一个指定int值的Integet的实例,
    Integer i = Integer.valueOf(100),
    将100装箱成一个Integer实例

    拆箱:
    .intValue(),将包装类转换为基本数据类型就是拆箱。
    将ii的值转为int类型的过程就是拆箱。

    自动拆箱:

    运行结果:
    还是300

    最后说个小问题:
    如果Integer是null,装箱则会报错空指针异常,所以建议先判断一下判断是否Integet是否为空再决定是否执行。

     

     

    6. 日期类

    时间类

    6.1 Date类概述和构造方法

    Date

    public class DateClass {
        public static void main(String[] args) {
            Date d = new Date();
            System.out.println(d);//Tue Nov 24 21:15:59 CST 2020,当前日期时间
    
    
            Date date = new Date(1606219237000L);
            System.out.println(date);//Tue Nov 24 20:00:37 CST 2020
        }
    }

    6.2 Date类的常用方法

    public class DateClass {
        public static void main(String[] args) {
            Date d = new Date();
            System.out.println(d);//Tue Nov 24 21:15:59 CST 2020,当前日期时间
    
    
            Date date = new Date(1606219237000L);
            System.out.println(date);//Tue Nov 24 20:00:37 CST 2020
    
            long time = d.getTime();
            System.out.println(time);//1606224564404
    
            d.setTime(1606219237000L);
            System.out.println(d);//Tue Nov 24 20:00:37 CST 2020
        }
    }

    6.3 SimpleDateFormat类概述

    6.4 SimpleDateFormat类的构造方法

    6.5 SimpleDateFormat格式化和解析日期

    代码示例:

    格式化:
    将Date类型格式成String类型

    运行结果:
    这是方法默认的日期格式,还可以自己定义日期格式,向下看。

    定义日期格式:

    运行结果:

    还是不好看,继续优化:

    运行结果:
    这样就看着比较顺眼,具体想怎么改自己定义。

    解析:
    将String类型解析成Date类型
    字符串的模式和自定义的模式一定要一致,否则会报解析异常。

    6.6 Calendar类的概述

    Calendar
    Calendar:它为特定瞬间与一组诸如 YEAR(年)、MONTH(月)、DAY_OF_MONTH(日期)、HOUR(时) 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

     

    代码示例:
    在使用Calendar获取月份的时候,要注意Calendar获取月份是从0开始的,所以要+1。

    运行结果:

    6.7 Calendar类的常用方法

    get方法参考上面的代码示例
    剩下的两个方法往下看

    public class DateClass {
        public static void main(String[] args) {
            //当前时间是2021.4.16 23:51:48
            Calendar c = Calendar.getInstance();
            int cc = c.get(1);
            System.out.println(cc);//年,2021
            System.out.println(c.get(Calendar.YEAR));//2021
            System.out.println(c.get(Calendar.MONTH)+1);//4,月份的下标从0开始
            System.out.println(c.get(Calendar.DATE));//16日
            System.out.println(c.get(Calendar.DAY_OF_MONTH));//16日
            System.out.println(c.get(Calendar.HOUR));//11,12小时制
            System.out.println(c.get(Calendar.HOUR_OF_DAY));//24小时制,23
            System.out.println(c.get(Calendar.MINUTE));//51
            System.out.println(c.get(Calendar.SECOND));//48
    
            c.add(Calendar.YEAR,-2);
            System.out.println(c.get(Calendar.YEAR));//2019
            
            c.set(Calendar.YEAR, 2025);
            System.out.println(c.get(Calendar.YEAR));//2025
    
            c.set(2024, 04, 23);
            System.out.println(c.get(Calendar.YEAR));//2024
            System.out.println(c.get(Calendar.MONTH)+1);//5,月份的下标从0开始
            System.out.println(c.get(Calendar.DAY_OF_MONTH));//23
        }
    }

    代码示例:
    add方法:通过add方法我们可以给年份,月,日期,加上或减去时间值。

    当前时间

     

    运行结果:
    计算机年份是2048

    需求:10年后的5天前
    如果要增加年份或日期就不需要-号了,直接数字就可以了。

    运行结果:

    set方法:
    set方法设置当前日历的年月日
    月是从0开始的

    运行结果:
    Calendar的月是从0开始的,所以这里的12

     6.8 案例:二月天

    public class CalendarClass {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int year = sc.nextInt();
            Calendar c = Calendar.getInstance();
            c.set(year,2,1);//其实是3月1日
    //        c.add(Calendar.DAY_OF_MONTH,-1);
    //        System.out.println(c.get(Calendar.DAY_OF_MONTH));//这两种都可以
            c.add(Calendar.DATE,-1);
            System.out.println(c.get(Calendar.DATE));
        }
    }
  • 相关阅读:
    脑机接口不断迎来重大突破,“思想钢印”还会远吗?
    ICLR 2020 | 神经网络架构搜索(NAS)论文推荐
    人工智能理解常识的数十年挑战,如何让 AI 不再“智障”?
    You Are All Excellent 排序
    sort
    sort
    绝对值排序
    绝对值排序
    排序
    排序
  • 原文地址:https://www.cnblogs.com/ajing2018/p/14669172.html
Copyright © 2020-2023  润新知