a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 93|回复: 0

[基础知识] JAVA面向对象编程课堂笔记14

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
JAVA中有一个特殊的类: Object。它是JAVA体系中所有类的父类(直接父类或者间接父类)。 ) `3 ]# q! ^, \6 U2 u7 Y' n) }
  
- ?- H/ A( r8 a9 i$ E8 E此类中的方法可以使所的类均继承。
* K1 u9 J! E2 H6 R  
2 q" @8 l" T0 u* P* b' S* `" f以下介绍的三种方法属于Object: - |, W4 A1 y# i/ t3 H5 v$ x
(1)   finalize方法:当一个对象被垃圾回收的时候调用的方法。
5 Q' S0 b# _8 K1 X* d(2)   toString():是利用字符串来表示对象。
8 ?5 Q  V' e2 o  h$ m  O4 C- |) v当我们直接打印定义的对象的时候,隐含的是打印toString()的返回值。 % e* z' g' D0 Z' L" Z# L
可以通过子类作为一个toString()来覆盖父类的toString()。 1 J4 A2 o- P5 g; n
以取得我们想得到的表现形式,即当我们想利用一个自定义的方式描述对象的时候,我们应该覆盖toString()。 2 W9 U' ?9 Y3 w2 Q/ m
(3)equal ' @, _* ]9 C1 O  V( w
首先试比较下例:
  L$ `+ k0 b9 n* a0 W5 {. EString A=new String(“hello”); # r# P! U, [" |8 P* p* {  D9 v9 A
String A=new String(“hello”);
9 Z, E. D. s/ b" j, c0 H1 MA==B(此时程序返回为FALSE)
8 a+ M0 n  h* O) `7 A- a7 H因为此时AB中存的是地址,因为创建了新的对象,所以存放的是不同的地址。 9 o! K9 K! m) @
  1 \7 S) F3 t2 `8 g. _% Z8 d
附加知识:
7 c  \0 `9 U3 w% }字符串类为JAVA中的特殊类,String中为final类,一个字符串的值不可重复。因此在JAVA VM(虚拟机)中有一个字符串池,专门用来存储字符串。如果遇到String a=”hello”时(注意没有NEW,不是创建新串),系统在字符串池中寻找是否有”hello”,此时字符串池中没有”hello”,那么系统将此字符串存到字符串池中,然后将”hello”在字符串池中的地址返回a。如果系统再遇到String b=”hello”,此时系统可以在字符串池中找到 “hello”。则会把地址返回b,此时a与b为相同。 $ O* o7 G$ |& e  {7 V" w
  * m% |) X  p/ c$ q/ L1 a# I1 Z# ^2 G. T
  " z# K8 D, o% I
String a=”hello”;
' \* @8 V. y) B! F& R0 QSystem.out.println(a==”hello”);
  y) r" s/ y6 f( _9 |& Q2 [系统的返回值为true。
7 ?8 E- T, @+ K* c8 s( l  * T/ N1 G2 a! Q2 p
故如果要比较两个字符串是否相同(而不是他们的地址是否相同)。可以对a调用equal:   c& K( a  V" T  Q1 }1 W
System.out.println(a.equal(b));
/ T/ u* X2 @( V. T: l. l& `1 Uequal用来比较两个对象中字符串的顺序。  ; D8 j# ^- |6 Z4 [. E. L
a.equal(b)是a与b的值的比较。 8 z; b8 `4 L9 o6 [& {! u, H2 P
  
1 r3 A, w$ @8 P  ! y& f$ D$ r' r1 Z6 M# w
注意下面程序: : Q3 w0 I7 [6 d1 P2 c3 w
student a=new student(“LUCY”,20);
: |+ r& C1 \, \' C0 j! ostudent b=new student(“LUCY”,20);
4 v* b8 D' E- MSystem.out.println(a==b);
6 K/ b# h- I8 m; GSystem.out.println(a.equal(b)); 4 D0 ^" x- U! d2 s
此时返回的结果均为false。 7 C9 g: Z/ P$ R! X$ K: Q- F
  4 z# v# D1 _7 K; A, @
以下为定义equal(加上这个定义,返回ture或false)
8 O8 k* M5 z6 Lpublic boolean equals(Object o){ 0 v- m7 ^. l! L5 ^( a
  student s=(student)o; % C* ^" T, B4 V2 E" U9 ^
  if (s.name.equals(this.name)&&s.age==this.age)
( D% x/ i1 o# v) I, J' ]5 M" [else return false; 3 u& I4 S: C$ T5 \1 v2 T( C  _; n4 [/ z
}如果equals()返回的值为
) U% M1 d; O- `# }  
$ [' ^" O' g, N7 d* H$ \' ^% S4 \以下为实现标准equals的流程:
+ b+ m: K. _$ x2 Zpublic boolean equals(Object o){
3 W1 L+ s/ L- e/ A3 E  if (this==o) return trun;  //此时两者相同 ! q- A2 q* i: g
  if (o==null) return false;
1 j6 ]3 @7 ^5 x- n  if (! o instanceof strudent) return false;  //不同类
5 a% u( W. A7 e3 B/ O7 t) B  studeng s=(student)o; //强制转换 3 A$ X( Y& ]) k6 U7 o! L
  if (s.name.equals(this.name)&&s.age==this.age) return true; 5 j! e8 Y! y" Q$ e/ X
else return false;
, A0 w9 Z0 n3 \& R$ u}
& p+ D( S. n( R0 F: K  % b( a8 [, W  g4 W! R
以上过程为实现equals的标准过程。 - e* L* X2 J3 H3 n* c/ |- f
  
8 n4 l7 v( u# q" n 练习:建立一个employee类,有String name,int id,double salary.运用get和set方法,使用toString,使用equals。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-7 16:58 , Processed in 0.180897 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表