常用类
Object
-
Object类时所有类的父类。
-
当一个类没有使用extends在指定父类的情况下,会默认为object为其父类。
-
当一个类指定父类的时候,按照继承的传递性,子类会间接的继承object。
-
所有类的对象,都可以看作是Object的对象。
方法:hashCode():哈希码 在数据结构中,有一种数据结构叫哈希表,哈希表需要用到哈希函数。 哈希函数:对Key进行运算,得到地址。 哈希表查找元素的效率:O(1). 为了提高哈希运算的效率,每一个对象都应该有一个hashCode。 哈希约定(哈希协定): 1)依次执行中,对象没有修改时,hashCode是不变的 2)相等的对象应该有相同的hashCode。 3)不相等的对象可以有相同的hashCode,也可以不同。应该不同。 Object的hashCode()返回的是内存地址。 equals() 比较两个对象是否逻辑相等【】。 只是其他某个对象是否与此对对象“相等” == 引用类型的对象是否指向同一地址。 Object的equals方法作用与==是一样的。 如果需要逻辑上的比较,必须重写equals方法,同时有必要重写hashCode,以维持哈希协定。 特点: 1)自反性 2)对称性 3)传递性 4)一致性 5)对于任何非空值,x.equals(null)为false。 clone() 创建当前对象的副本。方法修饰符为,protected。这个方法在当前包内java.lang】可以用。 要实现对象的克隆,必须重写clone方法; 类需要实现接口Cloneable ,才可以重写该方法,否则抛出CloneNotSupportExcept。 克隆不会调用构造方法,而是在原有的对象的基础上,从内存中拷贝一份出来。克隆也是一种创建对象的方式。 深克隆:深度复制 复制对象的同时复制引用对象的内存 浅克隆:浅表复制 复制对象的同时仅仅复制用用内容的地址。 finalize() 当垃圾回收器会在清理对象时,调用该方法,以释放对象所占用的资源。 toString() 将对象转换成字符串的形式。 通常需要重写该方法。 Object对它的实现时返回数据类型@hashCode(16进制) getClass() 获取当前对象的类型所对应的Class对象。 wait() 暂停当前线程 notify() 唤醒有wait暂停的线程。 notifyAll() 唤醒所有由wait暂停的线程
字符串
- String
字符串时常量,在创建之后不能更改。字符串缓冲区可以共享。
特点:
1)字符串是常量,保存字符串序列的属性value是一个常量数组,也没有提供修改下表元素的方法。String被final修饰为最终类,因此无子类。
2)可以共享
如果要比较两个字符串的值是否相等,必须要使用equals()方法。
所有的new都会在队中重新创建一个对象出来。
JDK8+常量池在堆中。JDK8以前的常量池在方法区中。
常量值运算会在编译时进行。
涉及到变量的计算,只能在执行时计算。字符串拼接会像new一样。
【小技巧】如果一个字符串的变量要与一个字符串的常量进行对比,要把常量写在前面,放置变量为null。
常量.equals(变量);//防止空指针
常用方法:
。 charAt(index)
。 compareTo()
。 toUpperCase()
。 toLowerCase()
。 equaqlIgnoreCase()忽略大小写进行比较
。 startsWith( )//判断某个字符串是否以某个字符串开始
。 endsWith( ) //判断字符串是否以某个字符串结尾
。 indexOf()
。 lastIndexOf()
。 replace(target,replacement) //字符串的替换,并不修改值,而返回一个新的字符串
。 split()//根据一定的要求拆分字符串。
。 subString()//拆分字符串、截取字符串。(左闭右开)
。 length()
。 isEmpty()
。 intern()//返回字符串的规范化表示形式。
。 trim()//删除头尾空白符的字符串
因为字符串是一个常量,所以所有试图改变字符串内容的操作都会创建新的对象。
字符串缓冲区StringBuffer支持可变的字符串
- StringBuilder:大部分实现中,要比StringBuffer要快。可变字符串,线程不安全,用于单线程,优先使用,效率更高。
初始容量是十六个字符
扩容:原来的容量<<1+2;
如果新的容量话不够用,这时候扩容到能容下所有字符的最小容量,也可以是16+n。
- StringBuffer:可变字符串,线程安全的,用于多线程,效率更低一些。
初始容量是十六个字符
时间日期
Java.util.Date
- 表示时间点。可精确到年月日时分秒毫秒。
- 时间戳:从1970年1月1日0点0分0秒,到当前时间所经历的毫秒数。使用long类型表示。
Date now=new Date();//表示对象创建时的时间的。
now.getTime();//获取从970到现在经历的毫秒数
java.util.Calender
JDK1.1新增的,专门用于时间运算的类。
- 获取当前时间
Calendar c=Calendar.getInstance();
c.get(Calendar.YEAR);//获取年份
c.get(Calendar.MONTH)//获取月份
c.get(Calendar.DAY_OF_MONTH)//获取天数
-
c.add(Calendar,DAY_OF_MONTH,1);//将天数往后退算一天后的日期
-
Data与Calendar相互转换
-
-
JDK8新的时间日期类
LocalDate:表示日期
LocalTime:表示时间
LocalDateTime:表示日期和时间
ZonedDate:表示带时区的日期
ZonedTime:表示带时区的时间
ZonedDateTime:表示带时区的日期和时间
1)创建对象
2)操作,获取设置年月日,时分秒,加减。
3)相互转换
4)时间日期与字符串之间的转换。
Date与字符串的转换
Java.sql.Date
Java.sql.TimeStamp
以上两个类,是在数据库访问时用的。他们都是java.util.Date的子类。
区别在于Date只表示你那余人。TimeStamp表示时间戳。
数学
-
Math:数学类
用于执行基本数学运算的方法。
floor():全舍舍入法,返回为double类型。
ceil():全入法,返回为double类型。
round():四舍五入,返回为long类型。 -
Math.random()随机数取值[0.0,1.0)
break也可以这样用。 -
Random:伪随机数的类
指定随机种子时,结果固定
包装类
什么是包装类
八种基本数据类型,面向对象的表示形式
基本数据类型 | 包装类 | |
---|---|---|
byte | Byte | |
short | Short | |
int | Integer | |
long | Long | |
float | Float | |
double | Double | |
char | Character | |
boolean | Boolean |
自动装箱和自动拆箱
-
自动装箱
基本数据类型的值,可以直接转换为相应的包装类型。
Byte、Short、Character既可以赋值为整数,也可以赋值为字符。
-
自动拆箱
包装类型的值,可以直接转换为基本数据类型的值。
只要符合基本数据类型的自动转换即可。
不同的包装类型不能使用等号或者不等号比较,不会拆箱。
基本类型与包装类型使用== !=时会自动拆箱
类似于String的常量池
在包装类型中,Byte、Short、Integer、Character也有常量池。
Byte -128~127
Short -128~127
Character 0~127
包装类型的值进行比较,必须使用equals方法。
包装类型的值,在进行运算时会先自动拆箱。