日期类 日历类 递归调用

回忆

  • 权限修饰符

    • public: 任何地方都可以
    • protected:同包,不同包中的子类
    • 默认: 同包
    • private:类内部
    • 修饰符的使用
      • 类上
        • public、默认。abtract 、final。
        • 常用:public
      • 方法上
        • 权限修饰符,abstract、final、static
        • 常用:public
      • 成员变量上
        • 权限修饰符、final、static
        • 常用:private
      • 构造方法
        • 权限修饰符
        • 常用:public
  • 内部类

    • 类的内部定义了其它类
      • 成员内部类
        • 定义在成员的位置
      • 静态内部类【常见】
        • 定义在静态的位置
      • 局部内部类
        • 定义在方法体内
      • 匿名内部类【常用】
        • 直接new的抽象类、接口。
  • Object对象

    • equals
      • 默认比较地址 ==
    • toString
      • 打印默认都会调用
  • String对象

    • 字符串比较特殊,字符串常量就是一个对象。但是他们是共享的。
    • equals
      • 被重写。比内容。将来String比较要使用equals
    • length()
    • indexof()
    • startsWith()
    • endsWith()
    • split()
    • replace()
    • toUpperCase()
    • toLowerCase()
    • subString()
    • charAt()
    • toCharArray()
    • getBytes()
    • matches()
    • replaceAll()
    • 其它转字符串的通用方法: String.valueOf() 静态方法
  • StringBuffer、StringBuilder对象

    • 它是用来做频繁的字符串操作(增、删、改),用字符串+等运算效率低。
    • 线程安全,效率低: StringBuffer
    • 线程不安全,效率高:StringBuilder
    • append()
    • insert()
    • delete()
    • reverse()
    • replace()
    • toString()转字符串
  • 正则表达式

    • 功能强大的,语言无关的模式匹配工具

    • x x 
      . 任意字符
      [abc] a或b或c 之一
      [^abc] 非a且非b且非c
      a|b  a或b
      [a-z]  a-z中的所有小写字母
      \d  数组
      \D 非数字
      \w  字母
      \W 非字母
      \\ \
      \r  
      \n
      \t
      *   0次或多次
      +   1次或多次
      ?   0次或一次
      {m}  m次
      {m,}  至少m次
      {m,n}  至少m次最多不超过n次
      
    • java.util.regex

    • Pattern

      • compile
      • matcher
    • Matcher

      • find
      • group
      • start
      • end

Date日期类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NfCqbVVt-1593181644984)(imges/image-20200624092205754.png)]

构造

  • Date() : 此时此刻
  • Date(long date) : 距离1970年1.1 0:0:0.000 的毫秒数的一个时间值。

常用方法

 boolean after(Date when) 
          测试此日期是否在指定日期之后。 
 boolean before(Date when) 
          测试此日期是否在指定日期之前。 
 int compareTo(Date anotherDate) 
          比较两个日期的顺序。 
 boolean equals(Object obj) 
          比较两个日期的相等性。 

long getTime() 
          返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 
    public static void main(String[] args) {
        Date now = new Date();// 取的是操作系统的时间
        Date now2 = new Date();
        Date dt  = new Date(now.getTime()+20000);//当前时间20000毫秒以后的日期。  20秒

        System.out.println(now.before(dt));//true
        System.out.println(now.after(dt));//false
        System.out.println(now.compareTo(dt)); // -1  在前是-1  , 在后是1  相同时0
        System.out.println(now.equals(dt));//false
        System.out.println(now.equals(now2));//true: 间隔不到1毫秒。
    }

Calender日历类

注意:星期和月份跟我们的实际不一样,实际都比它多1

此类主要提供日期计算相关的功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MiCgPkWO-1593181644988)(imges/image-20200624093649128.png)]

构造

  • 直接实例化 GregorianCalendar
  • 【常用】 Calendar.getInstance();

常见方法

 boolean after(Object when) 
          判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。 
 boolean before(Object when) 
          判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。 
 int compareTo(Calendar anotherCalendar) 
          比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。 
  boolean equals(Object obj) 
          将此 Calendar 与指定 Object 比较。     
     
 
 //调整日历(默认是现在)
 void setTime(Date date) 
          使用给定的 Date 设置此 Calendar 的时间。 
 void setTimeInMillis(long millis) 
          用给定的 long 值设置此 Calendar 的当前时间值。 

    //能根据field的不同,来设置日历的不同部分。
     // YEAR   , +1 明年  -1 去年
          
abstract  void add(int field, int amount)  
int get(int field) 返回给定日历字段的值。 
 void set(int field, int value)  //万金油方法
          将给定的日历字段设置为给定值。 
 void set(int year, int month, int date) 
          设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 
 void set(int year, int month, int date, int hourOfDay, int minute) 
          设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。 
 void set(int year, int month, int date, int hourOfDay, int minute, int second) 
          设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 
 abstract  void roll(int field, boolean up) 
          在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。 
 void roll(int field, int amount) 
          向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。        
//练习:
//看看你出生到现在活了多少天了?


//比如说:获取这个季度的第一天
//在比如说:获取去年的这个月的第一天
//再比如:获取上个月的最后一天
//在比如:获取去年的最后一天
//再比如:获取去年2月份的最后一天.
//再比如: 现在距离2025年1月1号还有多少天
// 后者,今天是分手后的第几天
//.....

日期的格式化

可以格式化输出日期为我们想要的格式。

可以将String转换为Date类型。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N01uKswm-1593181644990)(imges/image-20200624113625841.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JSVRsykh-1593181644994)(imges/image-20200624113646676.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9sssvm2i-1593181644996)(imges/image-20200624113656070.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7SNzoxt6-1593181644998)(imges/image-20200624113729591.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tOQynzo1-1593181644999)(imges/image-20200624113754641.png)]

yyyy-MM-dd HH:mm:ss

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bGNY7EXd-1593181645000)(imges/image-20200624114052075.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFK0oBWy-1593181645001)(imges/image-20200624114125794.png)]

递归调用

它是一种特殊的方法调用。一个方法,会直接或间接调用它自己,这种现象称为递归调用。

//A -> 方法体 A()   直接递归
public void method(){
    //....
    method(); //直接递归
}  

//A -> 方法体 B() -> B方法体 A()  间接递归
public void method1(){
    method2();
}

public void method2(){
    method1();//间接递归
}

递归要想正确使用,最关键的点在于退出条件的考虑。否则直接报内存不足异常。

因为:方法调用会入栈、一直入栈、如果没有合理退出,栈就会沾满、JVM就会抛出异常:

StackOverflowError -> 栈溢出错误

//处理 5!  
//递归的思路
5! = 4! * 5 
f(5) = f(4) * 5 ;
f(4) = f(3) * 4;
f(3) = f(2) * 3;
f(2) = f(1) * 2;
f(1) = f(0) *1 ;// 错误
f(1) = 1 ;//终止递归


public int jieCheng(int num){
    if(num==1)
        return 1;
    return jieCheng(num-1)*num;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aXY07K4K-1593181645003)(imges/image-20200624152952510.png)]

斐波那契数列

1 1 2 3 5 8 13 21 …

使用递归、非递归,给出N(15)项的结果

基本类型的包装类型

基本类型就是(4类八种)

byte /short/int/long/float/double/char/boolean

注意,它们不是面向对象的(没有属性和行为)。

而Java是一门面向对象的语言,所以,它提出万物皆对象。对应的,提供了上面的8种类型的对象的表示。

Byte、Short、Integer、Float、Double、Character、Boolean

它们的包都属于java.lang包,意味着可以直接在代码中使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WN30vWaT-1593181645004)(imges/image-20200624161949179.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78mpW4bo-1593181645005)(imges/image-20200624162005319.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tB3Akxy5-1593181645007)(imges/image-20200624162019475.png)]

存在基本类型到包装类型的转换(通过构造方法)

存在字符串到包装类型的转换(通过构造方法)

 int compareTo(Integer anotherInteger) 
          在数字上比较两个 Integer 对象。 
 boolean equals(Object obj) 
          比较此对象与指定对象。   
 static int parseInt(String s) 
          将字符串参数作为有符号的十进制整数进行解析。 
static int parseInt(String s, int radix)  //进制转换
          使用第二个参数指定的基数,将字符串参数解析为有符号的整数。 
 String toString() 
          返回一个表示该 Integer 值的 String 对象。 
static String toString(int i) 
          返回一个表示指定整数的 String 对象。 
static String toString(int i, int radix) 
          返回用第二个参数指定基数表示的第一个参数的字符串表示形式。 
static Integer valueOf(int i) 
          返回一个表示指定的 int 值的 Integer 实例。 
static Integer valueOf(String s) 
          返回保存指定的 String 的值的 Integer 对象。 
static Integer valueOf(String s, int radix) 
          返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。 

Java提供了 “装箱” “拆箱”的能力。意味着 基本类型和包装类型之间可以自动的相互转换。

    public static void main(String[] args) {
        //数字转字符串
        int a = 10;
        String s = 10+"";
        String s2 = new Integer(a).toString();
        String s1 = Integer.toString(a);
        String s3 = String.valueOf(a); //用的多


        //字符串转数字
        Integer integer = new Integer("10");
        int i = Integer.parseInt("10"); //用的多

        //包装类型如何进行运算呢?
        Integer i1 = 10;//自动装箱
        int i2=i1;//自动拆箱


        //从使用的角度来说,所有使用int的地方都可以传递Integer
        sum(i1, i2);
    }
    public static Integer sum(int a,Integer b){
        return a+b;
    }

System类

static long currentTimeMillis() 
          返回以毫秒为单位的当前时间。 
static void exit(int status) 
          终止当前正在运行的 Java 虚拟机。 
static void gc() 
          运行垃圾回收器。 //不代表立即回收掉不用的对象
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 
          从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。    

static Properties getProperties() 
          确定当前的系统属性。 
static String getProperty(String key)  //比如获取操作系统的类型
          获取指定键指示的系统属性。 
static String getProperty(String key, String def) 
          获取用指定键描述的系统属性。 

Arrays 数组工具类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-am8m7PUu-1593181645008)(imges/image-20200624173143484.png)]

将来实际开发中,如果跟数组有关的内容,优先考虑这个类。

static int binarySearch(byte[] a, byte key) 
          使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。 
static boolean[] copyOf(boolean[] original, int newLength) 
          复制指定的数组,截取或用 false 填充(如有必要),以使副本具有指定的长度。
static boolean[] copyOfRange(boolean[] original, int from, int to) 
          将指定数组的指定范围复制到一个新数组。   
static boolean equals(boolean[] a, boolean[] a2) 
          如果两个指定的 boolean 型数组彼此相等,则返回 truestatic void fill(boolean[] a, boolean val) 
          将指定的 boolean 值分配给指定 boolean 型数组的每个元素。 
static void sort(byte[] a) 
          对指定的 byte 型数组按数字升序进行排序。 
static String toString(boolean[] a) 
          返回指定数组内容的字符串表示形式。 

大的数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2NB34olb-1593181645009)(imges/image-20200624174205014.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdRDl4ir-1593181645011)(imges/image-20200624174525303.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值