JAVASE23天从入门到精通_Day11

StringBuilder/StringBuffer
StringBuilder/StringBuffer -> "可变字符串"/"字符串缓冲区类" -> 便捷操作字符串的类型 
	为什么有StringBuilder/StringBuffer这样的类呢? 字符串做拼接非常的消耗内存资源!
    	"Java" + "PHP" + "Python" -> 5StringBuilder/StringBuffer : 功能是一样的,但是StringBuilder效率高,安全性低,StringBuffer效率低,安全性高;    	

StringBuilder 的构造:
	StringBuilder() :  构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
  	StringBuilder(String str) : 实现 String 对象 --> StringBuilder 对象
  	
常用的成员方法:
	StringBuilder append(任意类型的数据):在sb对象的后方拼接传入的内容并返回自己!!
    StringBuilder reverse()  : 一键翻转 -> 一键把sb对象内部的字符进行翻转,并返回自己!!   
    StringBuilder insert(int offset,任意类型的数据)  : 在指定索引位置插入任意的内容,并返回自己!!    
        
    char charAt(int index) 
    int indexOf(String str) 
 	int lastIndexOf(String str)
    int length()  
    StringBuilder replace(int start, int end, String str)  
    String substring(int start)     
    String substring(int start, int end)  : [start,end)    
                                             
String --> StringBuilder
	利用StringBuilder的构造方法 : StringBuilder(String str) 
StringBuilder --> String
	1. sb对象 + ""  //前提 : sb对象内部表示的不是地址值而是sb的内容
	2. sb对象.toString() 
Object
Object : 超类 , 根类, 基类 ->Java中所有类直接或者间接的父类,所有的对象都可以使用该类中非私有的方法;

构造方法:
	Object() : 只有无参构造 -> 为什么每一个构造方法里默认赠送的是 super();

成员方法:
	String toString()  :返回该对象的字符串表示 -> 把一个对象转换成字符串
    boolean equals(Object obj) 
     
    int hashCode()  : 获取对象的hash值(没有重写父类的hashCode方法,hash值就是对象的10进制地址值)
    Class<?> getClass() : 获取对象的字节码对象    
Object中的toString方法
String toString()  :返回该对象的字符串表示 -> 把一个对象转换成字符串


    结论 :直接输出对象 就是 在输出对象.toString()


    toString方法源码
    return this.getClass().getName() +      "@" + Integer.toHexString(hashCode());
           com.atguigu.b_object.Student @    4554617c
     @的左边
        getClass() : 获取对象的字节码对象(字节码对象是根据字节码文件来的)
        对象的字节码对象.getName() : 获取对象的 全类名
     @ : 分隔符号 没有意义
     @的右边
         Integer.toHexString(this.hashCode())
            this.hashCode() : 获取对象的哈希值 -> 一般情况下对象的哈希值就是对象的10进制地址值
            Integer.toHexString(十进制地址值)  : 把传入的10进制数转换成16进制数

    需求: 如果你想输出对象的时候看到的不是对象的全类名@对象的地址值,而是想看对象的属性值
        解决方案 : 那么请重写父类的toString方法

    为什么有时候输出对象看到的不是对象的地址值而是对象的属性值 : 原因是对象所在的类重写了父类的toString()方法
Object类中的equals方法
 == : 比较基本数据类型的值是否相等,比较引用数据类型的地址值是否相等

     Object 类中的 equals 方法的源码:
        public boolean equals(Object obj) {
            // 调用方法的对象 == 传入方法的对象
            return (this == obj);
        }

     需求 : 希望用equals方法比较对象的时候不去比对象的地址值而是去比对象的属性值
        解决方案 : 请重写父类的equals方法 
Objects工具类
Objects工具类 : 对对象操作的工具类型 -> 此类最喜欢做非空校验!
    
静态方法:
	static boolean isNull(Object obj) : 判断对象是否为null -> null 就返回true,null就返回false 
    static boolean nonNull(Object obj): 判断对象是否不为null -> 不为null就返回true, null就返回false  
    static boolean equals(Object a, Object b) : 先对a对象进行非空校验,再调用a的equals方法
    		//自己比自己 || a不为null && a.equals(b)
    	return (a == b) || (a != null && a.equals(b));
	static int hashCode(Object o) : 对o对象进行非空校验再调用o对象的hashCode方法
		return o != null ? o.hashCode() : 0;

	static String toString(Object o) : 对o对象进行非空校验,再调用o对象的toString()
       Objects类中的toString(Object o)方法源码 : return String.valueOf(o);
	   String类中的valueOf(Object obj)方法源码 : return (obj == null) ? "null" : obj.toString();
	static String toString(Object o, String nullDefault) :对o对象进行非空校验,再调用o对象的toString(), 如果o为null,返回nullDefault
	return (o != null) ? o.toString() : nullDefault;
Math工具类
Math工具类 : 关于数学操作的工具类
	
静态成员:
	static double E  : 自然对数的基数
	static double PI  : 圆周率
	
	static int abs(int a)  : 求a的绝对值
	static double cbrt(double a)  : 求a的立方根
	static double ceil(double a)  : 天花板 -> 向上取整
	static double floor(double a) : 地板 -> 向下取整
	static long round(double a) : 四舍五入
	static int max(int a, int b) :2个数的较大值
	static int min(int a, int b) :2个数的较小值
    static double pow(double a, double b) : 求第一个参数的第二个参数次幂 
    static double random() : 生成一个随机数 [0,1.0)
BigDecimal类
BigDecimal: 关于小数的精准运算类 (原因: 二进制数无法精确的表示整小数)
    
构造:
	BigDecimal(double val) : 不要用! 因为会引起更大的误差!!
	BigDecimal(String val) : 推荐

四则运算的方法:: BigDecimal add(BigDecimal augend)  : 结果记得接收
	减 : BigDecimal subtract(BigDecimal subtrahend): BigDecimal multiply(BigDecimal multiplicand): BigDecimal divide(BigDecimal divisor)  
        
   BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)  : 带舍入模式的除法
   int scale : 保留小数点几位	
   RoundingMode roundingMode : 舍入模式
System工具类
System工具类 : 关于系统操作的工具类

静态成员:
	static InputStream in :“标准”输入流。 -> System.in : 只做键盘录入
	static PrintStream out : “标准”输出流。 -> System.out : 只做控制台打印
	static PrintStream err : “标准”错误输出流。-> System.err :  只做控制台打印(红色字体,开启新的线程打印)
        
   static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)   : 数组复制    
 		Object src : 源数组
 		int srcPos : 原数组定位 -> 源数组起始的复制索引
 		Object dest : 目标数组
 		int destPos : 目标数组定位 -> 目标数组起始接收的索引
 		 int length : 复制几个元素
 	static void exit(int status) : 退出JVM -> 大退
 		int status : 状态码 ->0即为异常退出
 		
 	static long currentTimeMillis() : 获取当前时间毫秒值	
 		当前系统时间 - 时间原点 --> 转换成毫秒单位 -> 方法结果
 		时间原点 : 1970010100:00:00 -> 格林威治时间
 		时间原点 : 1970010108:00:00 ->8区时间
 		现在的计算机是64位操作系统 : 现在计算机能表示的时间可以到宇宙毁灭!!
Arrays工具类
Arrays工具类 : 关于数组操作的工具类

static void sort(任意元素类型的数组)  :  快速排序完成数组元素的排序功能
static String toString(任意元素类型的数组)   : 漂亮的打印数组元素

static int binarySearch(数组, 要查找的元素) : 利用二分查找法查找元素的索引值 
	//二分查找的前提 : 序列有序!! 
	
static 任意类型[] copyOf(任意类型[] original, int newLength) : 把老数组的元素赋值到指定长度的新数组中,并把新数组返回
    	任意类型[] original : 原始数组
    	int newLength : 新数组的长度
    	返回值-> 任意类型[] : 新数组
    	
static boolean equals(任意类型[] a, 任意类型[] a2): 比较2个数组是否相同
	数组相同 : 长度相同,元素类型相同,每一个索引位置的值相同
	
static void fill(任意类型[] a, 任意类型 val) :把value值填充到a数组中
时间操作
1. 老美没有 农历 !! 不要操作农历!
2. 星期天是老美一个星期的第一天!  代码中: 2 生活中 :1
3. 月份索引是从0开始  代码 : 3 生活中:4
4. 月份和星期的简写英文   
5. 时间单位转换:
	1秒 second = 1000毫秒 MillisSecond
	1毫秒 = 1000微秒 MicroSecond
	1微秒 = 1000纳秒 NanoSecond
6. 时间原点 : 	时间原点 : 1970010100:00:00 -> 格林威治时间
			   时间原点 : 1970010108:00:00 ->8区时间
JDK8版本之前的时间操作
Date
Date : 日期 -> 一个时间瞬间 ,精确到毫秒
	请使用 :java.util.Date包下的Date;


构造方法:
	Date() : 创建一个Date对象,时间指向创建Date对象的一瞬间!
    Date(long date) : 创建一个Date对象
        1. 时间归零
        2. 加上传入的时间毫秒值
        3. 定格的时间瞬间 就是 这个构造表示的Date瞬间

    时间操作中看到long的参数类型 第一反应是 毫秒值!!
        
成员方法:      
    long getTime():获取Date时间所指向的时间瞬间的毫秒值
	void setTime(long time):设置时间
	    1. 先把时间归零
	    2. 在把传入的时间毫秒值加到时间原点上
	    3. 设置新的Date时间
	    
不同类型的时间之间做转换!
   long 类型的时间(时间毫秒值),Date类型的时间
   
   long 类型时间 -> Date时间
   		//这里会把时间归零!!
   		1. Date的带参构造方法 :  Date(long date)
        2. Date类中的setTime()方法 :  void setTime(long time)  
            
   Date时间 -> long 时间         
         long getTime():Date时间转换成long时间 ->long time =  date对象.getTime();  
SimpleDateFormat
Date类中对date对象进行格式化的方法:
	String toLocaleString()  : 以计算机系统所在时区的时间表示习惯格式化时间
	String toGMTString()  : 以零时区的表示习惯格式化时间
-----------------------------------
SimpleDateFormat : 格式化和解析日期的类
	格式化 : 让日期展示的更好看一些
	解析 : "2008年8月8日 8:8:8" 把字符串类型的时间定位到Date对象上
	
构造方法:
	SimpleDateFormat(String pattern) : 创建日期格式化对象
		String pattern : 时间格式代码
		时间格式代码 : yyyy年MM月dd号 HH:mm:ss
		
格式化: Date --> String
	String format(Date date): 把传入的Date对象进行格式化(按照创建sdf对象时给与的日期格式进行格式化)
解析: String --> Date
	Date parse(String time): 把传入的字符串时间定位到Date对象上,并把Date对象返回
Calendar
Calendar : 日历类 -> 关于日期的操作类

创建日历对象:
	static Calendar getInstance() : 创建其实是子类对象
	
日历对象的功能:
	查看和修改日期:
		//int field: 日期字段 -> 请往field传入Calendar.日期字段
		int get(int field):
		void set(int field,int value):
		void set(,,,,,)
            
 	转换功能 : 
		 Date getTime() : Calendar --> Date
 		 void setTime(Date date) : Date --> Calendar	
         
         long getTimeInMillis() : Calendar --> long 
         void setTimeInMillis(long millis)  : long --> Calendar
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值