第六课

目标
Object 类的介绍
字符串的应用
包装类应用
Java 中的异常处理机制

1、Object 类的介绍
Object 类在 Java 的基础包中 java.lang.Object
Object 类是 Java 中所有类的父类。所有对象(包括
数组)都实现这个类的方法。

构造方法: Object();

方法:
boolean equals(Object obj)
判断当前对象与参数对象中,值是否完全相等。
如果要比较两个对象中值是否完全相等,需要重写
Object 类中的 equals() 方法。手动指定对象中那些内容
一致,两个对象才相等。否则,obj1.equals(obj2) 比较
的是两个对象整体。
例如:比较两个组的项目哪个优秀,先要定一个标准。
如 界面美观、运行速度等标准。


Class getClass()
返回此 Object 的“运行时”类型。
在 Java 反射中会使用到,是 Java 反射的基础。


int hashCode()
返回该对象的哈希码值。
主要在 Java 集合中使用。

String toString()
返回该对象的字符串表示。
堆内存中,对象是一个整体,这个整体有一个名称
格式如下:"包名.类名@hashCode编码"
System.out.println(stu); //默认调用 stu.toString()
为了方便程序员查看对象,可以重写 toString()



finalize() 由垃圾回收器自动调用。当 JVM 判断某个
对象生命已经达到尽头了。
//在线程开发中使用
notify()
唤醒在此对象监视器上等待的单个线程。
notifyAll()
唤醒在此对象监视器上等待的所有线程。
wait()
---------------------------
注意:
equals() 方法
对称性:x.equals(y) 为 true;y.equals(x) 也为 true;
反射性:x.equals(x) 为 true
类推性:x.equals(y) 为 true;y.equals(z) 为 true;
x.equals(z) 也为 true;
一致性:x.equals(y) 为 true,在剩下的代码中,两个对象
调用 equals() 方法,返回值一直为 true
任何情况下:x.equals(null) 必返回 false;
x.equals(非 x 类型) 也必返回 false;

如果是 基本数据 类型,JVM 只在栈区 比较两个变量的值,只能用 ==
如果是 引用数据 类型,JVM 会在 堆区 比较两个对象本身。
比较两个对象中的值。
一般情况下,比较是把对象看做整体来比较的,可以重写该对象
类中的 equals() 方法,指定具体比较哪些属性值。

---------------------
hashCode() 得到一个对象的 哈希编码,该编码与对象
在堆内存中的地址,不是同一个值。
(1)如果 x.equals(y) 为 true ,那么 x.hashCode()==y.hashCode()
(2)如果 x.equals(y) 为 false,那么 x 、y 的 hashCode() 值
可能相等,也可能不相等。

hashCode() 方法与 equals() 方法关系密切。
如:在 集合对象 HashSet,能够存储任意类型的对象,但是
不能存放重复的对象
HashSet set = new HsahSet();

Student stu1 = new Sutdent();
stu1.setXX();

Student stu2 = stu1; //两个引用变量指向同一个对象

set.add(stu1);
set.add(stu2); //编译不能通过,内部如何实现???

HashSet 类型中默认封装了一个 “哈希编码” 的算法。
类似于考场上的座位号,与参加考试程序的考号的对应关系。
在考生进入考场之前,已经有算法,给每个座位编号。每进入
一个学员,由监考老师根据考号和座位号的关系直接分配座位。
假如考号对应的座位号上面已经有人,由监考老师调用 equals()
方法进行判断。
考场==> HashSet 对象
考生==> Student 对象

//幕后,JVM 调用“哈希算法”生成考场的 “座位号”
HashSet set = new HsahSet();

//幕后,JVM 调用“哈希算法”为学员对象生成 “考号”
Student stu1 = new Sutdent();

//幕后,JVM 会根据对应的 hashCode 编码,自动为每个
//Student 对象直接分配 座位号,不用与之前进入考场
//的其他学员一一对比。能够提高存储数据的效率
//而且也能够避免 同一个考场,出现两个重复考号的情况
set.add(stu1);

2、字符串的应用
String:长度不变的字符串
StringBuffer:长度可变字符串

内存中存储方式:
(1)String 的不变性;
字符串是常量;它们的值在创建之后不能更改。
String 对象是不可变的,可以共享。(在内存中完成)

String ss1 = "hello";

String ss2 = new String();
ss2 = "hello";
ss2 = ss1;

String ss3 = new String("hello");

ss1 == ss3 //false
ss1.equals(ss3) //true

在程序中,只要使用 不带 new 的字符串,JVM 都在 常量池中查找
如果找不到,就在常量池中创建一个该字符串

原因:
字符串在 Java 程序中太常用。每次使用 都 new ,
比较麻烦,为了方便代码编写,JVM 使用常量池,
普通字符串,放入 常量池,由 JVM 负责管理,当用户再次
使用相同的字符串,JVM 会自动从 常量池中取值,不用查找
并转换当前 JVM 中所有的对象。

不变性:往常量池中放入一个 字符串,该字符串永远都不可能
改变值.
程序中我们认为的字符串改变,都只是新建了一个字符串。

API 中的方法:
字符查找

子字符串查找

两个字符串比较

字符串的包含

字符串输出的格式化显示

字符串拆分
字符索引查找
字符串输出类型的转换 String 转换成 int




3、包装类应用


4、Java 中的异常处理机制

5、补充
instanceof 关键字
主用要与 Java 多态的时候,判断某个对象具体的类型
class Person{}
class Teacher extends Person{}
class Student extends Person{}
class Driver extends Person{}

//编译时类型 运行时类型
Person per1 = new Teacher();
Person per2 = new Student();
Person per3 = new Driver();

public void doWork(Person per){
if(per == null){return;}

//典型的多态应用
if(per instanceof Teacher){}
if(per instanceof Student){}
if(per instanceof Driver){}
}


public boolean equals(Object obj){}




作业
1、API 中的方法:
字符查找

子字符串查找

两个字符串比较

字符串的包含

字符串输出的格式化显示

字符串拆分
字符索引查找
字符串输出类型的转换 String 转换成 int

2、输出一个字符串中所有的大写字母、小写字母、非字母字符的个数。
(根据 ASCII 表的值来判断)
int allCount,lowCount,upCount,oCount;
for(int i=0;i<str.length();i++)
{
char c=s.charAt(i);

if(c>='a' && c<='z'){lowCount++;}else
if(c>='A' && c<='Z'){upCount++;}else{oCount++;}
}


3、判断一个字符串中,"sunjavaibmjavaoraclejavahellojavagoodjava"
java 字符串出现的次数。

String s = "sunjavaibmjavaoraclejavahellojavagoodjava";

String toFind="java";
int count =0;
//在字符串中找到第一次出现 java 的索引值
int index = s.indexOf(toFind);

if(index != -1){count++;}
//从该索引开始截取后面的字符串
s = s.subString(index+toFind.length());
//采用同样的截取方法,递归循环,直到把该字符串全部截取完毕
while(s.indexOf(toFind)!=-1)
{
index = s.indexOf(toFind);
s = subString(index+toFind.length());
count++;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值