zoukankan      html  css  js  c++  java
  • 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));
        }
    }
  • 相关阅读:
    Atitit 趋势管理之道 attilax著
    Atitit 循环处理的新特性 for...else...
    Atitit 2017年的技术趋势与未来的大技术趋势
    atitit 用什么样的维度看问题.docx 如何了解 看待xxx
    atitit prj mnrs 项目中的几种经理角色.docx
    Atitit IT办公场所以及度假村以及网点以及租房点建设之道 attilax总结
    Atitit 工具选型的因素与方法 attilax总结
    Atitit.团队文化建设影响组织的的一些原理 法则 定理 效应 p826.v4
    Atiitt 管理方面的误区总结 attilax总结
    Atitit 未来趋势把控的书籍 attilax总结 v3
  • 原文地址:https://www.cnblogs.com/ajing2018/p/14669172.html
Copyright © 2011-2022 走看看