a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 124|回复: 0

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

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
①    局部内部类:在方法中定义的内部类称为局部内部类。 ' m! V  d) z% Q3 v( c) D
与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块。 8 \: G" D, S" \$ L+ G4 _
  # p% p- x7 N1 ~" i
注意:局部内部类不仅可以访问外部类实例变量,还可以访问外部类的局部变量(但此时要求外部类的局部变量必须为final)?? + n) _3 L5 c! W+ [0 Z0 C
在类外不可直接生成局部内部类(保证局部内部类对外是不可见的)。 . }; v% u6 Z2 o9 k, X
要想使用局部内部类时需要生成对象,对象调用方法,在方法中才能调用其局部内部类。 2 k, R" `- x7 O/ K( J/ F2 I
  
& N) [; i5 M% a$ R" G②    静态内部类:(注意:前三种内部类与变量类似,所以可以对照参考变量)
6 P! @$ ]6 B3 \( ^/ n静态内部类定义在类中,任何方法外,用static定义。
5 |  u4 [6 R& r* D" Y# y静态内部类只能访问外部类的静态成员。
3 l% |" s+ O! D7 q$ t1 |9 D0 e& w生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:
! z7 T3 H0 Z1 b7 s. I3 ~Outer.Inner in=new Outer.Inner();
" E2 L# R; T  b) W# f而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。
+ \) a  {6 W) c静态内部类不可用private来进行定义。例子:
7 Q6 H$ z" {# u6 k对于两个类,拥有相同的方法: % \6 M( a6 N, H7 j( Z3 b" g: l
People
# h" k# Z8 _% v: a7 W{
/ y; _3 v7 L% D6 Q  run(); % f( D- w7 X) C8 n# k/ }
}
9 Y; z/ C; v. B, LMachine{
. t6 R: p) t1 g$ `   run();
7 F* X1 v4 [5 b# q& {}
, K# ?' @# L* M: F1 Y+ \此时有一个robot类:
1 C% Y/ _% K8 b5 b/ D: J* uclass Robot extends People implement Machine.
) r, D1 P( |2 N% ]4 ]* M此时run()不可直接实现。 " {" Z9 n2 r4 x& _* ^4 h7 T
注意:当类与接口(或者是接口与接口)发生方法命名冲突的时候,此时必须使用内部类来实现。
0 f2 V0 r( U2 `1 h( U* b用接口不能完全地实现多继承,用接口配合内部类才能实现真正的多继承。
/ _' k' }! m2 M# c  6 {- ]8 T6 Z& z7 S, s6 a2 ^
③    匿名内部类(必须掌握):
" j- X, G3 @8 f6 n2 k匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。
' ]6 f9 {6 v9 V9 iIA被定义为接口。
! i2 B( D$ c) t0 n; jIA I=new IA(){}; ( c  l, i, U' G$ A8 x7 q! d8 g
注:一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。 ! q0 X2 U6 W% s; M7 x9 ?
因其为局部内部类,那么局部内部类的所有限制都对其生效。 0 }; P+ b( Q" {6 t( U  K: w, _
匿名内部类是唯一一种无构造方法类。 3 T# t0 a1 |  N
匿名内部类在编译的时候由系统自动起名Out$1.class。 ! a/ R8 k* ~( X  z" V8 t. Q+ w
  
: G6 h$ C  L! J3 t如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
$ R6 F6 U- u- j3 n) j因匿名内部类无构造方法,所以其使用范围非常的有限。 ' P: {3 }) ~- b$ ^3 S; j  Q5 q- L+ S
(下午:)Exception(例外/异常)(教程上的MODEL7)
4 E3 u1 S8 G/ H: N% o5 `' G对于程序可能出现的错误应该做出预案。
' i( A0 X% H3 E, u! R例外是程序中所有出乎意料的结果。(关系到系统的健壮性)
! ?- k) h0 n) K4 j) b/ ^  
$ V8 g/ Q5 X4 g/ g+ yJAVA会将所有的错误封装成为一个对象,其根本父类为Throwable。 " y, V* b2 m4 G/ A
Throwable有两个子类:Error和Exception。 ) E( d& W( Q8 d% h
一个Error对象表示一个程序错误,指的是底层的、低级的、不可恢复的严重错误。此时程序一定会退出,因为已经失去了运行所必须的物理环境。
7 N* M6 V1 Q* f! i6 m# }对于Error错误我们无法进行处理,因为我们是通过程序来应对错误,可是程序已经退出了。 - Q* f' s8 i) {! I& P! M
我们可以处理的Throwable对象中只有Exception对象(例外/异常)。
5 L( f2 D8 Z* b! R9 d; p* uException有两个子类:Runtime exception(未检查异常) 5 B9 e( B% P/ V. G  b& i7 a
非Runtime exception(已检查异常)
0 E) Q: D; ~( o1 B3 t9 q. K: d(注意:无论是未检查异常还是已检查异常在编译的时候都不会被发现,在编译的过程中检查的是程序的语法错误,而异常是一个运行时程序出错的概念。)
/ T* J. }5 \$ f% |0 @在Exception中,所有的非未检查异常都是已检查异常,没有另外的异常!! + \3 r: S7 I# o- n9 S* z
  + R; B/ ^) z$ d5 Y
未检查异常是因为程序员没有进行必要的检查,因为他的疏忽和错误而引起的异常。一定是属于虚拟机内部的异常(比如空指针)。
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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