13_API(一)总结——Object类、System类、SimpleDateFormat、Calendar类、包装类、正则表达式

一、Object类

    Object类是所有java类的根类。在这里有几个重要的方法
    1.Class getClass():返回此Object的运行时类
    2. boolean equals (Object obj):和其他对象比较,比较它们之间的地址是否一样
    3.int hashCode(): 返回该对象的哈希码值.(地址值的十进制表示) 可以和Integer.toHexString(int)使用查看一个地址的十六进制值
    4.String toString() 一个对象的字符串化输出。
    
    1).Class getClass() 的使用方法:

      //方式1 通过Object类的getClass()方法获取
      Teacher t = new Teacher();
      Class clazz = t.getClass();
   System.out.println(clazz);//包含了全路径的类名
  
      //方式2 通过类名调用属性class 来获取
    
Class clazz2 = Teacher.class;
 //方式3 通过Class类的静态方法forName()来获取
      Class clazz3 = Class.forName("com.itheima01.objects.Teacher");
      System.out.println(clazz == clazz2);
      System.out.println(clazz == clazz3);
      Teacher t2 = new Teacher();
      System.out.println(t.getClass() == t2.getClass());
    2) equals():没有重写的时候, 是比较两个对象的地址。注意是地址,不是内容。相当于"= ="号的比较
       来自Object类equals()的源码:
       public boolean equals(Object obj) {
       return (this == obj);
       }

以下的案例很好说明equals是比较地址值,而不是比较内容值
/*
 * String toString() 返回字符串的对象
 * getClass() 返回一个字节码对象
 * Integer.toHexString(int num):返回一个十六进制的整数
 * Object.hasHashCode():返回代表对象地址值的hashCode值
 * toString()方法快捷生成:alt+shift+s+s

 */
public class ObjectDemo {
 public static void main(String[] args) {
  Student s1 = new Student("zhangsan", 18);
  Student s = s1;
  Student s2 = new Student("zhangsan",18);
  
  System.out.println("Obejct中有一个hasHashCode(),这个方法是一个对象的地址的十进制表示:");
  System.out.println("对象s的哈希值:"+s.hashCode());
  System.out.println("对象s1的哈希值:"+s1.hashCode());
  System.out.println("对象s2的哈希值:"+s2.hashCode());
  
  System.out.println("s和s1比较:"+s.equals(s1));
  System.out.println("s1和s2比较:"+s1.equals(s2));
 }
}
 
输出结果:
Obejct中有一个hasHashCode(),这个方法是一个对象的地址的十进制表示:
对象s的哈希值:118352462
对象s1的哈希值:118352462
对象s2的哈希值:1550089733
s和s1比较:true
s1和s2比较:false


    3)toString():对象的字符串化。
    System.out.println();方法执行的是Object.toString();
    输出一个对象的时候,会输出这个对象的全路径类名+@+哈希地址值

 
 
二、System类

    1.static void arrayCopy(Object src,int srcPos,Object dest,int destPos,int length);
     src:源数组
     srcPos:从源数组复制元素的开始索引位置
     dest:目标数组
     destPos: 目标数组开始黏贴源素组元素的位置:
     length:这次复制的元素个数
   
    2.static long currentTimeMillis()  返回以毫秒为单位的当前时间
    
 应用1:用来计算一个算法所花费的时间
   
  long start  =System.currentTimeMills();
     //算法:
     for(int i = 0;i<1000000;i++)
     {
        System.out.println("Hello World");
     }
     long end = System.currentTimeMills():
     int time = end - start;
    
//i遍历范围    所花费的时间
  10000000:    70002ms
  1000000 :     7277ms
  100000  :      779ms
  10000   :      115ms
  1000    :       56ms
  100     :        5ms
3. static void exit(int staus) :终止Java虚拟机(status:惯例上0表示终止)
 
 
三、日期类:

  1.Date类:
    1).Date: 表示特定的瞬间,精确到毫秒,他可以通过方法来设定自己所表示的时间,可以表示任意的时间
    Date() :创建的是一个表示当前系统时间的Date对象 
    Date(long date) :根据"指定时间"创建Date对象
    2).void setTime(long time)
       long getTime()
       toLocaleString():将毫秒格式输出一个正常的日期
     2.SimpleDateFormat:
          1)格式化:date ->String:用 String  sdf.format();
          2)解析:    String->date:用sdf.parse(“要变成的日期格式”);
 
     
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//method();
//method2();
//使用指定的模式进行对象的构建
//1999年9月1日 10:10:10
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//格式化
Date date = new Date();
String s = sdf.format(date);
System.out.println(s);//2049年08月26日 13:39:12

//解析
Date d = sdf.parse("2049年08月26日 13:39:12");
System.out.println(d.toLocaleString());
}
四、Calendar类:

    日历类:可以对日期进行增查改。来获得想要的效果
  
/*
 * 第二题:分析以下需求,并用代码实现
 要求:利用Calendar类的方法判断当前年是闰年还是平年
 提示:
 闰年:二月有29天
 提示:将日期设置为3月1号,然后倒退1天至2月底,求出2月底是多少天
 */
 
public class MainApp {
 public static void main(String[] args) {
  Calendar c = Calendar.getInstance();
  int year = c.get(Calendar.YEAR);
  System.out.println(year);
  c.set(Calendar.MONTH, 2);
  c.set(Calendar.DAY_OF_MONTH, 1);
 
  c.add(Calendar.DAY_OF_MONTH, -1);
  int month = c.get(Calendar.MONTH);
  int day = c.get(Calendar.DAY_OF_MONTH);
  System.out.println((month+1)+"."+day);
  
  
 }
}
 

五、正则表达式:
 
 第三题:分析以下需求,并用代码实现
   (根据描述写匹配手机号和邮箱的正则表达式)
 1.根据描述写出正则表达式
  (1)手机号正则:
   第一位为1
   第二位为3或4或5或7或8
   第三~十一位为0~9的其中一个数字
  (2)邮箱正则:以@分界
   @ 符号左边为任意多个字母或数字
   @ 符号右边为任意多个字母或数字+点符号+任意多个字母或数字
 2.利用正则表达式完成以下需求:
  (1)判断手机号"11600014387"是否符合手机的格式
  (2)定义一个存放邮箱的字符串数组{"hhxx@163.com","18601066888","nxgw@yeah.net","jpql@sohu.com.cn","15115888028"}
  利用正则表达式过滤出所有的邮箱,打印正确的邮箱
 */
public class MainApp {
 public static void main(String[] args) {
  String regex = "[1]{1}[34578]{1}\\d{9}";
  String numStr = "16504698305";
  boolean  b = numStr.matches(regex);
  System.out.println("\"11600014387\"是否符合手机的格式:"+b);
  regex.toString();
  
  String mailRegex = "\\w*@{1}\\w*.\\w*";
  
  String[] strs= {"hhxx@163.com","18601066888","nxgw@yeah.net","jpql@sohu.com.cn","15115888028"};
  for(String s:strs)
  {
   System.out.println(s+":"+s.matches(mailRegex));
  }
 }



        
    3)toString():对象的字符串化。
    System.out.println();方法执行的是Object.toString();
    输出一个对象的时候,会输出这个对象的全路径类名+@+哈希地址值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值