Object和常用APi

## Object类
    *是所有类的父类
    *所有的对象以及数组都是实现了这个类的方法
    
    String    toString(): 返回该对象的字符串表示.
        直接打印对象的名字就是调用对象的toString方法    例如:打印对象Person p 相当打印p.toString
        而直接打印对象的地址值没有意义,所以需要重写Object类的toString()方法.
            *重写格式:return "Person{name = name,age = age}"再字符串拼接
        看一个类是否重写了toString方法,直接打印这个类的对象就可以(没有意义,只需要记住我们的类要重写就行    )
            *例如Random没有重写 而Scanner进行了重写
            
    boolean equals(): 指示其他某个对象是否与此对象"相等"
        *方法源码    public boolean equals(Object obj){
            return (this == obj);
        }
            obj可以传递任意对象
            ==是比较符号 返回boolean值
            基本数据类型比较的是值
            引用类型比较的是对象的地址值
        
        *重写equals方法:
            问题:
                隐含一个多态
                多态的弊端:无法使用子类中特有的内容(属性和方法)
                Object obj = p2 = new Person("jack",18);
            解决:
                使用向下转型
        public boolean equals(Object obj){
            //传递本身比较
            if(obj == this){
                return true;
            }
            if(obj == null){//提高程序的效率
                return false;
            }
            
            if(obj instanceof Person){
                Person p = (Person)obj;
                boolean b = this.name.equals(p.name)&&this.age.equals(p.age);
                return b;
            }
            return false;
        }
        Objects中的equals,可以容忍空指针异常.
        
## Date
    *java.util.Date类,表示特定的瞬间,精确到毫秒
    毫秒值的作用:可以对时间和日期进行计算
    时间原点(0毫秒):1970-1-1 00:00:00
    毫秒转换为日期(天) /1000/60/60/24
    
    构造方法:
        空参数:Date()     Date date = new Date();
        带参数:Data(long date):传递毫秒值,把毫秒转换为Date日期 Date date1 = new Date(1533092163666L);
        
    long getTime():把日期转换为毫秒值
        返回自1970-1-1-0-0-0以来的对象的毫秒值
        System.out.println(date.getTime());   //1533092163666
    
## DateFormat
    *java.text.DateFormat
    继承自Format(抽象类)
    作用:格式化(日期->文本),解析(文本->日期)
    
    *成员方法
        String format(Date date)
            按照指定的模式,把Date日期格式化为符合模式的字符串
        Date parse(String source) 把符合模式的字符串转换为date对象
            parse方法声明了一个异常,解析异常
            如果字符串和构造方法的模式不一样,程序就会抛出异常
            要么处理这个一样,要么throws继续抛出这个异常
            
            
            
    DateFormat是一个抽象类,无法直接创建对象使用,可以使用SimpleDateFormat自类创建
    java.text.SimpleDateFormat extends DateFormat
        *构造方法:
            SimpleDateFormat(String parttern)
            用给定的模式和默认环境的日期格式符号构造
            参数:
                String pattern:传递指定的模式
                一种格式:"yyyy-MM-dd HH:mm:ss"
    
    使用步骤:1.创建对象:SimpleDateFormat
             2.调用方法 parse
                        format
    
    ### 练习:计算一个人出生了多少天.
        *思路:
                1.新建一个SimpleDateFormat对象(sdf),Scanner对象
                2.键盘录入 出生日期(String)格式和SimpleDateFormat一样
                3.利用sdf的parse()方法解析字符串为date对象
                4.使用getTime()方法得到两个时间的毫秒值
                5.计算差值/1000/60/60/24
                
        public static void main(String[] args){
            //新建一个SimpleDateFormat对象(sdf),Scanner对象
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入出生日期:xxxx-xx-xx:")
            
            //键盘录入 出生日期(String)格式和SimpleDateFormat一样
            String birthdayDateString = sc.nextLine();
            
            //利用sdf的parse()方法解析字符串为date对象
            Date birthdayDate = sdf.parse(birthdayDateString);//记得抛出异常
            
            //使用getTime()方法得到两个时间的毫秒值
            long todayTime = new Date().getTime();
            long birthdayTime = birthdayDate.getTime();
            long diffTime = todayTime - birthdayTime;
            
            //计算差值/1000/60/60/24
            System.out.println("出生的天数为:"+diffTime/1000/60/60/24)
            
        }

## Calendar
    *java.util.Calendar
    *日历类,是一个抽象类,里边提供了很多操作日历字段的方法
    *无法直接创建对象使用,里边有静态方法,getInstance(),该方法返回了Calendar类的子类对象
    *static Calendar getInstance():使用默认时区和语言环境获取一个日历
    *常用的成员方法
        int get(int field):返回给定日历字段的值(注意月份要加一)
        void set(int field,int value):将给定的日历字段设置为给定值
        有个重载的方法:set(2018,08,08);//设置年月日
        abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
        Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。就是把日历变成日期
    
## System
    *java.lang.System
    *类中提供了大量的静态方法,所以可以通过类名直接使用
    *常用方法:
            *static long currentTimeMillis():返回以毫秒值为单位的当前时间.
            *static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length):复制一个数组
                *src:源数组
                *srcPos:起始索引
                *dest:目标数组
                *destPos:目标数组的起始位置
                *length:要复制的数组元素的数量

## StringBuilder
    *java.lang.StringBuilder
    *字符串缓冲区,可以提高字符串操作的效率(看成一个长度可以变化的字符串)
    *底层也是一个数组,但是没有被final修饰,可以改变长度
    *StringBuilder在内存中始终是一个数组,占用的空间少,效率高一些如果超出了容量,会自动扩容(默认16字符空间)
    *StringBuilder与StringBuffer基本相同,但是后者是线程安全带额
    *构造方法:
            *空参数:StringBuilder()
            *带参数:StringBuilder(String Str)
    *成员方法:
            *StringBuilder append(...):向StringBuilder中添加任意类型的数据
                append方法返回的是this,使用append方法无需接收返回值
            *toString():转换为String对象
                StringBuilder和String可以互相转换
                String->StringBuilder :可以使用StringBuilder的构造方法
                StringBuilder->String :使用StringBuilder的toString方法
            *reverse():反转    
    
## 包装类
    *java.lang中,八种
    *除了int->Integer,char->Character其他对应的都是首字母大写.
    *装箱与拆箱
            *装箱:基本数据类型->对应的包装类对象
                    *构造方法:
                        Integer(int value)
                        Integer(String s)
                        NumberFormatException:s必须为数值型的,不然会报数字格式化异常
                    *静态方法:
                        static Integer valueOf(int i)
                        static Integer valueOf(String s)    
            
    
            *拆箱:包装类对象->基本数据类型
                    *成员方法:
                        int intValue():以int类型返回该Integer的值
    
    *自动装箱与自动拆箱
            *基本类型的数据和包装类之间可以自动的相互转换
            jdk1.5之后出现的新特性
            *自动装箱
                Integer in = 1;(相当于 Integer in = new Integer(1) ;)
            *自动拆箱
                in = in +2;(相当于 in = in.intValue()+2 = 3 ;)
    
    *字符串与基本类型之间的转换
            *基本类型转字符串:基本类型->String
                    *基本类型的值+""(最简单的方法):常用
                    *包装类的静态方法toString(参数),不是Object的toString重载
                    *包装类的静态方法valueOf(参数)
            *字符串转基本类型:
                    *使用包装类的静态方法parseXXX("对应类型的字符串")
                    例如Integer: static int parseInt(String s);
                    
    
    
    
    
    
    
    
    
    
    
    
            
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
            
            

你可能感兴趣的:(java基础(高级))