没有合适的资源?快使用搜索试试~ 我知道了~
java高级应用.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 156 浏览量
2021-10-02
11:54:52
上传
评论
收藏 287KB PDF 举报
温馨提示
试读
18页
java高级应用.pdf
资源推荐
资源详情
资源评论
JAVA 高级应用(一)
一、JDK 核心类库 API
二、异常
三、集合
四、泛型
五、反射
---------------------------------------------------------------------
一、 JDK 核心类库 API
知识点:
1 java.lang.Object类
2 Objec 类中常用方法
3 java.lang.String类
4 StringBuffer 类和 StringBuider 类
5 java中日期表示方法
6 包装类及其方法
7 自动封箱与自动解箱
8 大数据类: BigInteger 和 BigDecimal
-----------------------------------------------------------------------------------------
1、Object 类
Object 类是所有 Java类的最终祖先,如果一个类在声明时没有包含 extends
关键字,那么这个类直接继承 Object 类。所有 java 类都继承了 Object 类的方法。
Object 类有一个默认的构造方法, 在构造子类实例时, 都会先调用这个默认的构
造方法。
public Object(); //方法体为空
任意类均可当做 Object 类来看。
2、Object 类共 11 个方法
其中,重要的方法有:
Object clone ();
Boolean equals(Object obj);
void finalize();
String toString();
1、protected Object clone()
(1)
protected
表示在子类中可以调用。
什么意思?
1、是指在 子类的方法中 可调,即需要在子类中写一个方法, 再调用, 同时
需要处理异常。
2、在继承关系的子类中,子类的本类对象,不能用其他类的对象 。
(2)标记接口 (
Cloneable
):没有任何方法的接口, 标记一下有什么功能和特征。
new一个本类对象, 可用本类对象调用, 而不能用其他类对象调, 若真要这样做,
可用标记接口,但要覆盖 Object 类的 clone ()方法,将其改为 public 。
即:一个类要想可以被 clone :需要做两步:
第一步:实现 Cloneable 接口
第二步:覆盖父类的 clone() 方法,并且将方法变为 public 的
(3)浅拷贝:只拷贝当前对象空间本身,但是当前对象指向的对象没有拷
贝( clone() )
被复制对象的所有变量都含有与原来的对象相同的值, 而所有的对其他对象
的引用仍然指向原来的对象, 换言之, 浅复制仅仅复制所考虑的对象, 而不复制
它所引用的对象。
Studen 对象
引用( teacher)
Age
拷贝 Student 对象
拷贝 Studen 对象
引用( teacher)
Age
Teacher 对象
(4)深拷贝:不仅拷贝当前对象,还要拷贝当前对象指向的其他对象(重
新写 clone() ;使用对象序列号)
被复制的对象的所有变量都含有与原来的对象相同的值, 除去那些引用其他
对象的变量。 那些引用其他对象的变量将指向被复制过的新对象, 而不再是原有
的那些被引用的对象。 换言之,深复制把要复制的对象所引用的对象都复制了一
遍。
完全拷贝:
Studen 对象
引用( teacher)
Age
拷贝 Studen 对象
引用( teacher)
Age
2、equals()
比较两个对象是否相等。 大多数情况下要覆盖该方法, 只有当被比较两个引
用变量指向同一个对象时, equals()方法才返回 True。
比较两个对象相等:比较规则由业务定,但要遵守下面五大原则:
反身性: x.equals(x)返回真;
对称性: x.equals(y)返回真,当且仅当 y.equals(x)返回真;
传递性: x.equals(y)返回真 , y.equals(z)返回真 ,则 x.equals(z)返回真;
持久性:对于 x.equals(y)反复多次被调用时,返回的结果都是一样的。
前提是:比较的两个元素没有发生改变
非空性:一个非空值和一个空值比较返回假, x.equals(null)返回假。
3、finalize()
垃圾收集器认为该对象为垃圾时,会调用该对象的 finalize()方法
finalize()方法一般情况完成的工作:释放资源的代码(数据库的连接,打开了一
个文件)
构造方法:对象的创建
finalize()方法:对象的销毁
finalize()方法不一定会 100%被调用,什么时候做,做不做都是未知数。 Jvm 关
闭,垃圾收集器还没有启动收集垃圾的时候 finalize()方法不会被执行。
finalize()方法被垃圾收集器自动调用, 而垃圾收集器的执行实际是程序员不可
控的,所以没有办法保证 finalize()方法一定在某个时刻执行。
4 、toString():返回一个对象的字符串描述
+ 号运算符如果有一边是字符串, 不管另外一边是不是字符串 (如果是个对
Teacher 对象
拷贝得到的
Teacher 对象
象,会自动调用该对象的 toString()方法),都会做字符串拼接, 返回一个字符串。
如果某类没有覆盖 toString 方法,直接输出该类的对象,输出的该对象的哈
希码的十六进制形式字符串( day10.Student@C17164)。如果没有覆盖 hashCode
方法,则是该对象在内存的地址值。
--------------------------------------------------------------------------------------------
三、 String 类和 StringBuffer 类
1 字符串类的两种生成方式
(1)String s = “hello”;
在对象池拿对象。先检查对象池中有没有,没有在堆中创建,并把新对象给对
象池,并且也把新对象给 S。
(2)String s = new String(“hello”);
生成新对象,普通对象实例化方式。
(3)String s2 = “hello”,对象池中有值相同的对象,把该对象赋给 s2 即可。
字符串的对象池:养对象的。把一些字符串对象放到池子里养着,用的时候
拿,不用了放回去。其他的对象也可以用,提高效率, 。
String 对象和普通对象( Student)是有差别的, String 有对象池
栈 堆 持久层
字符串对象池
数组空间,每个元素是指向某个对象的引
用
S
对象池是 JVM 管理的,我们没有办法干预其操作
JVM 启动的时候会创建 9 个对象池:八个基本类型的包装类对象池
2 对象池的意义
避免频繁的创建销毁对象,使得相同内容的对象可以复用
3 String s = new String(“hello”);创建了 2 个对象,内存空间发生了什么变化?
new String 的时候要传一个参数 ”hello”,参数是字符串常量,这时候会在堆
中创建对象,把引用放到对象池中,将创建的此对象作为参数构造 s。s
和”hello”两个对象的内容是一样的
4 字符串的值是不可改变的
任何时候改变字符串的值都会导致生成一个新的字符串对象,原来的字
符串对象的值没有改变
因为字符串的值不可改变我们才可以使用字符串对象池
如果在程序中要频繁的修改字符串的值,就不推荐使用 String 类,而是使用
类似于 String 类的 StringBuffer 和 StringBuilder
5 StringBuffer 和 StringBuilder 是值可以改变的,这种改变不会创建新对象
StringBuffer 是线程安全的, 可以在多线程的环境进行访问。 每个去访问数据
的方法都加锁了
StringBuilder 是线程不安全的,不可以在多线程的环境下访问。它的方法都没有
加锁。
线程安全:
hello
剩余17页未读,继续阅读
资源评论
资料大全
- 粉丝: 14
- 资源: 26万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功