回顾总结12

常用类

Math

常用方法

  1. bas:绝对值
  2. pow:求幂
  3. ceil:向上取整
  4. floor:向下取整
  5. round:四舍五入
  6. sqrt:开方
  7. random:随机数[0~1)之间
  8. max:最大值
  9. min:最小值

Arrays

常用方法

arrays类包含了一系列静态方法,用于管理或操作数组(排序和搜索)

  1. toString:返回数组的字符串形式

  2. sort:自然排序,默认为升序
    还可以定制排序,通过传入一个接口Comparator实现匿名内部类,如果返回大于0,升序,返回小于0,降序

  3. binarySearch:二分搜索法进行查找,要求有序,如果存在返回数组所在下标,如果不存在,返回-(该数据应该所在的位置下标+1)

  4. copyOf(arr,newArr.length):当newArr.length > arr.length时,增加null,newArr.length < arr.length时,只拷贝前newArr.length个数据。

  5. fill(arr,填充值):数组填充,把数组用给的参数填充

  6. equals:数组元素一样时,返回true

  7. asList:将数组转换成List

    List asList = Arrays.asList(2,3,4,5,6,1);
    

    asList的编译类型是List,运行类型是Arrays下的静态内部类ArraysList

System

常用方法

  1. exit:退出当前程序,0表示正常退出

  2. arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf方法完成数组复制

    System.arraycopy(src,0,dest,0,3);
    //参数1:源数组,被拷贝的
    //参数2:拷贝的源数组的起始位置(索引下标)
    //参数3:目标数组,拷贝到
    //参数4:拷贝的目标数组的起始位置(索引下标)
    //参数5:拷贝个数
    
  3. currentTimeMillens:返回当前时间距离1970-1-1的毫秒数

  4. gc:运行垃圾回收机制

BigInteger和BigDecimal

BigInteger

比较大的整数

BigInteger bigIntrger = new BigInteger(String s)
    //s就是需要存储的数字

BigDecimal

比较大的小数

BigDecimal bigDecimal = new BigDecimal(String s)
    //s就是需要存储的数字

常用方法

  1. add:加
  2. subtract:减
  3. multiply:乘
  4. divide:除
  • BigDecimal的devide方法可能会抛出异常,因为无限小数。所以我们可以为它指定精度,如bigDecimal1.divide(bigDecimal2, BigDecimal.ROUND_CEILING),会保留分子的精度

日期类

Date(日期)

第一代日期类

获取当前系统时间

java.util包下

日期格式直接输出是国外的方式,所以要对格式进行转换,使用SimpleDateFormat类 ,把日期转换成相应的字符串形式输出。

SimpleDateFormat对象是用来转换日期格式的

Date d1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");//分别输出年月日,时分秒,星期
String format = sdf.format(d1);

Calendar(日历)

第二代日期类

是一个抽象类,构造器是protected的,通过getInstance方法来获取实例。主要提供大量字段和方法

为特定瞬间与一组如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获取下星期的日期)提供了一些方法

Calendar c = Calendar.getInstance();
c.get(Calendaer.YEAR);
c.get(Calendaer.MONTH)+1;//MONTH是从0开始计算
c.get(Calendaer.DAY_OF_MONTH);
c.get(Calendaer.HOUR);//12小时制,24小时制是HOUR_OF_DAY
c.get(Calendaer.MINURE);
c.get(Calendaer.SECOND);

Calendar没有专门的格式化类,所以需要程序员自己来组合显示

LocalDate、LocalTime、LocalDateTime

第三代日期,JDK8时加入

弥补前两代日期的不足

历史:JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类后被弃用了。Calendar存在的问题

  1. 可变性:像日期和时间这样的类应该是不可变的。
  2. 偏移性:Date中的年份是从1900开始的,而月份都是从0开始
  3. 格式化:格式化只对Date有用,Calendar没有
  4. 安全性:它们不是线程安全的,不能处理润秒等(每隔两天,多出1秒)

LocalDate(日期)

LocalDate只包含日期,可以获取日期字段(年月日)

LocalTime(时间)

LocalTime只包含时间,可以获取时间字段(时分秒)

LocalDateTime(时间日期)

LocalDateTime包含日期和时间,可以获取日期和时间字段(年月日 时分秒)

//1
LocalDateTime ldt = LocalDateTime.now();//返回当前日期时间的对象实例
ldt.getYear();
ldt.getMonth();
ldt.getMonthValue();
ldt.getDayOfMonth();
ldt.getHour();
ldt.getMinute();
ldt.getSecond();
//2
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dtf.format(ldt);

Instant时间戳

java.time.Instant类

可以和第一代的Date进行转换

类似于Date,提供了一系列和Date类转换的方式

Instant------------>Date:Date date = Date.from(instant)

Date------------>Instant:Instant instant = Date.toInstant()

//3
Instant now = Instant.now();
Date date = Date.from(now);
Instant instant = date.toInstant();

总结

第一代Date是通过new获取的日期和格式类,不安全。第二代Calendar改进,通过静态类调用getInstance方法获取日期,但是没能处理润秒等的问题,而且没有对应的格式化类。第三代LocalDate、LocalTime、LocalDateTime通过静态类调用now方法获取日期,处理了以上几代的缺陷。有格式化类DateTimeFormatter,通过静态类调用ofPattern方法进行日期的格式化操作

常用类作业

1. String_toCharArray

要求:将字符串中指定部分进行反转,比如将"abcdef"反转为"aedcbf",编写方法public static String reverse(String str, int start,int end)

思考:使用String的substring截取子串,用一个String接收,然后定义一个相同长度的新的String,进行交互数据,最后把反转过的String用StringBuffer的replace替换掉原有的数据。

优化:直接在原有的String上操作,只用生成一个新的String对象。先使用String的toCharArray把字符串转换成字符数组,然后在数组里操作。也不用新建数组进行end-start次交换,在原有数组上进行交换,能减少一半的次数。有两个变量记录开始和结束,每一次交换结束就前进一步,当差值不大于1的时候,说明交换完毕。然后新建一个String接收转换后的数组输出即可。

public static void main(String[] args) {    String str1 = reverse("abcdef",1,4);    System.out.println(str1.toString());    }public static String reverse(String str,int start,int end){    char[] chars = str.toCharArray();    char temp = ' ';    for(;start < end;start++,end--){        temp = chars[start];        chars[start] = chars[end];        chars[end] = temp;    }}

2. 异常处理

要求:输入用户名、密码、邮箱,如果信息录入正确,则提示注册成功,否则生成对应的异常对象

  1. 用户名长度为2或3或4
  2. 密码长度为6,并且要求全是数字
  3. 邮箱中包含@和.符号,并且@要在.的前面

编写一个验证方法userRegister

public static void main(String[] args) {    Scanner scanner = new Scanner(System.in);    do {        System.out.print("请输入用户名");        String name = scanner.next();        System.out.print("请输入密码");        String pwd = scanner.next();        System.out.print("请输入邮箱");        String email = scanner.next();        try {            userRegister(name,pwd,email);            System.out.println("注册成功");            return;        } catch (Exception e) {            System.out.println(e.getMessage());            return;        }    }while(true);}public static void userRegister(String name ,String pwd ,String email){        //第一关 用户名    if(!(name.length() >=2 && name.length() <= 4)){        throw new RuntimeException("账户名长度要在2到4之间");    }        //第二关 密码 这里出现了要判断字符是否为数字,代码太长,不便于写在这,        //我们封装成一个方法,专门用来判断是不是数字,然后在这里调用它    if(!(pwd.length() == 6 && isDigital(pwd))){        throw new RuntimeException("密码必须为数字组合");    }        //第三关 邮箱    int i = email.indexOf("@");    int j = email.indexOf(".");    if(!(i >0 && j > i)){        throw new RuntimeException("邮箱@和.的格式不对");    }}public static boolean isDigital(String pwd){    for (int i = 0; i < pwd.length(); i++) {        if(Character.isDigit(pwd.charAt(i))){            return true;        }    }        return false;}

3. String_split

要求:输入形式为:"Willian Jefferson Clinton",输出形式为:Clinton,Willian .J

public static void main(String[] args) {    printName("Willian Jefferson Clinton");}public static void printName(String str){    if(str == null){        System.out.println("不能为空");        return;    }    String[] names = str.split(" ");    if(!(names.length == 3)){        //(names.length != 3)        System.out.println("输入的字符串格式不对");        return;    }        //System.out.println(names[2]+","+names[0]+" ."+names[1].charAt(0));    String format = String.format("%s,%s.%c",names[2],names[0],names[1].toUpperCase().charAt(0));        System.out.println(format);   }
posted @ 2021-08-07 16:04  灰线  阅读(43)  评论(0)    收藏  举报