java学习笔记(十二)
java部分:
Object类:
-
所有类的父类,所有类都默认继承Object
-
Object只有一个无参构造方法
-
Object类中没有静态方法,所以必须通过对象调用
-
成员方法 - 一共11个
① getClass():通过类的对象,获取字节码对象
类的加载:
xx.java -> xx.class ->(类加载) JVM -> 方法区
使用类的时候 -> 类只加载一次 -> 一个类会对应生成一个字节码对象
使用类的情况:
a. 实例化 -> new 对象
b. 调用类的静态变量/静态方法
c. 间接调用 -> 有父子类关系的, 使用子类之前会间接使用父类 -> 使用前都需要类加载
d. 反射 -> class.forName(“完整类名”)
e. 类名.class -> 获得字节码文件② clone(): 克隆
深克隆: 复制对象,是复制一份全新的属性和内容一致的对象
浅克隆: 复制引用,指针指向克隆的对象 调用方法时,要实现 cloneable接口,否则会出CloneNotSupportedException
③ 跟线程相关的方法
notify/notifyAll/3个wait()重载
④ finalize()(不推荐使用)
内存溢出:在内存中没有存储的地方
内存泄漏:内存被无效的对象占用,一个对象分配内存之后,在使用结束之前没有及时释放,导致一直占用内 存,没有及时清理,使得真正可以使用的内存空间在减少,短生命周期的对象被长周期的生命对象引用时就会容易出现内存泄漏的问题,此时推荐在不需要时赋值null,才会被JVM正常回收,否则只有长周期生命对象结束时才会回收。 除非非用不可,否则不建议使用,手动finalize而不自动回收会在finalize未实现时造成50倍的内存消耗,被finalize的对象是不会被JVM自动机制回收的,而是经过了特殊判别, 可能导致你的对象经过多个垃圾收集周期才能被回收 。
GC的调用:
a.GC:垃圾回收机制,定时清除内存,默认调用finalize方法
b.在程序开始执行的时候,就开始不定时回收标记的垃圾
没有引用的时候,就把堆中的对象标记成垃圾
c.Java原则上,不存在内存泄漏
d.也可以手动调用垃圾回收机制
System.gc(),但是这个方法的本质并不是立刻回收垃圾,而是强制通知JVM去回收,但是回收不一定成功过。 堆:如果没有引用,堆中对象就变成垃圾,等着GC回收
栈:方法结束,方法栈中的内容自动释放
⑤toString() : 获得一个字符串对象
默认实现:
getClass().getName() + "@" +Integer.toHexString(hashCode());
@前内容:表示完整的类名
@后内容:16进制的hashCode值(地址值)
结论:常用类,会默认重写toString方法
⑥hashCode():生成一个hash值(地址值) - 内存中的存储位置有关
native int hashCode
native: 本地接口
默认实现c++底层代码,计算方式 - 通过内存空间计算(算法),new的对象的hash值不一致
⑦equals():判断[两个对象]this和obj是否相等
this:表示当前对象
obj:传进来的参数
Object的默认比较方式:
return (this == obj); --比较地址值是否相等
java.lang - 基础类 Object String StringBuilder StringBuffer 包装类 线程
java.util - 工具类 Date Collection Map
java.text - 格式化类
java.io - IO流
java.net - 网络编程 TCP/IP
java.sql - 跟数据库相关
java.util - 工具类
跟时间相关的类:
long类型:
1.只能获取当前系统时间:
ps: System.currentTimeMills(ms)
2.作用:用来做简单的计算,或者短时间(7天以内)内的推算
3.注意:
在进行计算时,需要注意的是默认类型是int类型
如果超了int类型,会造成溢出,溢出后变成负数
所以,建议在做时间推算时 添加L/l标记是long类型
Date类:
1.作用: 只用来做时间的显示
2.构造方法
new Date() - 获取当前系统时间
new Date(参数) - 获取指定的时间
3.常用API
做时间的转换:
Date转换成long:
getTime()
long转换成Date:
setTime()
new Date(long)
Calendar类:
1.作用:用来做时间的推算和时间跳转
2.特点:Calendar是抽象类,所以不能new对象,只能通过静态方法调用
3.创建:
ps: Calendar.getInstance()
4.常用API
get() - 获得
set() - 推算
add() - 跳转
Calendar和Date的转换
getTime()
setTime()
Calendar和long的转换
getTimeMills()
setTimeMills()
java.text - 格式化
SimpleDateFormat:
常用API:
format(): 将Date按照指定格式输出
parse(): 将字符串转换成Date