`
羽风之扬
  • 浏览: 83693 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

第六课

阅读更多
目标
   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++;
}















  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics