a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 164|回复: 1

[基础知识] JAVA基础:JAVA基础知识精华总结

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
1、对象的初始化 4 Q/ a/ B# M  N; y/ E1 @2 j, r4 @1 q
: S2 W" w; U. D: Q1 G) J
(1)非静态对象的初始化
( G3 {3 F% t' g# |
( N( O% Y! _- Q0 }7 m在创建对象时,对象所在类的所有数据成员会首先进行初始化。 5 I5 A4 w( @, y, i' ]
- ^2 Z. m: q9 Y3 X" T! K) A
基本类型:int型,初始化为0。 ! A/ R; Y3 r9 x" ]3 N

* k6 i3 i6 m" @7 S9 C6 y: r5 E" O如果为对象:这些对象会按顺序初始化。 ( ?% r; }+ {+ G, }( X% ~" o* H

3 ?7 ]8 X3 i  c※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。 0 J! D# p) h& w3 T

) [0 [5 K7 @9 m' l# R0 Q构造方法的作用就是初始化。
$ {/ V+ v3 e: e# E( @0 s9 Z
2 a. c) B, K. @3 @3 K(2)静态对象的初始化
! u: y6 i7 x6 v+ b6 l $ u% B/ b# o% L/ `; k3 n2 o6 ~& i; h
程序中主类的静态变量会在main方法执行前初始化。 , W' T) Q! Q" X$ x8 E" S0 s1 u
/ d9 |9 C/ h' r& @& x# v- u2 m
不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序初始化。
( p+ @: N' G9 g6 o* H % |3 v2 b0 d9 J/ [7 ]
2、继承时,对象的初始化过程 7 R$ {7 @& H1 W0 d  Z' R% x9 F% Q

  f9 q4 X* l4 i% Q, {(1)主类的超类由高到低按顺序初始化静态成员,无论静态成员是否为private。
1 R3 Z9 h  H0 a& A& U+ _9 t+ W 4 f1 ~/ Z9 C' r1 F) l
(2)主类静态成员的初始化。
0 @5 {1 {% P6 c
0 N( D. W" t5 p5 Z" ]4 i* ?(3)主类的超类由高到低进行默认构造方法的调用。注意,在调用每一个超类的默认构造方法前,先进行对此超类进行非静态对象的初始化。 3 W+ o. L+ m9 q+ i' C- s/ G
4 P( N9 k$ l" f  X  `
(4)主类非静态成员的初始化。
! E, v  u# ]3 A) N2 y7 N2 L# g5 ]5 @' { 8 x9 \; ~. h1 V+ G+ g
(5)调用主类的构造方法。 : _1 T' R  P/ s/ s

9 l2 ^7 r$ {' y$ a- X0 o1 S3、关于构造方法 , ?, t% V; q" P; i/ S6 V$ `
) \+ F! Q  O. x0 ^
(1)类可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方法,否则在继承此类时,需要在子类中显式调用父类的某一个非默认的构造方法了。
8 x3 n/ o( u0 C; b$ t5 | 0 ?  Y, L2 n8 V  {! o
(2)在一个构造方法中,只能调用一次其他的构造方法,并且调用构造方法的语句必须是第一条语句。
$ n& e2 Z! f: S" B. L. ~
2 V  n4 |2 T; F' R1 L5 \7 G: u4、有关public、private和protected
2 e7 X! J; [( w8 ^- |1 P7 r 1 d" C2 Q% P! p; ], X+ t8 S
(1)无public修饰的类,可以被其他类访问的条件是:a.两个类在同一文件中,b.两个类在同一文件夹中,c.两个类在同一软件包中。
5 ~, F/ S; m4 q2 k2 }1 G- N4 T; c
$ k3 l: F0 F9 q9 k) X' ]2 R, U(2)protected:继承类和同一软件包的类可访问。 * Y$ S) s' i6 D- y

* l, \; }5 l# p(3)如果构造方法为private,那么在其他类中不能创建该类的对象。 & D9 r9 c& q6 Z% X1 C
" w3 j2 Q( X' C/ ?. c: K7 z0 `: B
5、抽象类
/ W- J; l. j5 Y+ T2 E. @8 o. Z
2 W% @, b2 u# m1 t% A# n7 O: L" w(1)抽象类不能创建对象。
! n+ G! W/ k% F) K7 Z: G + l$ V$ r( f; U7 N0 k
(2)如果一个类中一个方法为抽象方法,则这个类必须为abstract抽象类。
0 I3 e5 C& [9 P" T9 z1 f
0 L( ]( b: n. q+ M(3)继承抽象类的类在类中必须实现抽象类中的抽象方法。 ( l6 ?, U0 |3 v7 N8 X% i. p
/ M+ {# b5 J# v
(4)抽象类中可以有抽象方法,也可有非抽象方法。抽象方法不能为private。
' n6 l5 m3 t( [; F; j2 x 3 B: f+ m1 j, x0 a
(5)间接继承抽象类的类可以不给出抽象方法的定义。
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:28 | 显示全部楼层

JAVA基础:JAVA基础知识精华总结

6、final关键字
; `" j& d' u! W  @* ~& V : m) J' P" C# w- f% i; K2 j- @: n
(1)一个对象是常量,不代表不能转变对象的成员,仍可以其成员进行操作。
( C* i7 F1 `9 B( s1 n* R0 s2 w" O + @6 ^$ ~' r, W2 B5 p  m
(2)常量在使用前必须赋值,但除了在声明的同时初始化外,就只能在构造方法中初始化。 7 S. q0 M1 }/ K( y. [; ]4 ?5 b
3 R2 x6 f" H( Y7 z8 M1 n
(3)final修饰的方法不能被重置(在子类中不能出现同名方法)。 1 |) G/ J, m9 Q

! Z# ^9 N+ g: j1 D. l$ g(4)如果声明一个类为final,则所有的方法均为final,无论其是否被final修饰,但数据成员可为final也可不是。
" g# t; s0 J% d/ \* Y3 {
: c' i7 R( f6 {1 o: b5 m7、接口interface(用implements来实现接口)
! e" n/ {: D! Y3 J 9 p8 S6 j3 M9 X' s, r; \6 P% _
(1)接口中的所有数据均为static和final即静态常量。尽管可以不用这两个关键字修饰,但必须给常量赋初值。
( H1 G8 C' ^4 S& J, l3 i 1 i# m- }3 H3 i3 y" |5 I
(2)接口中的方法均为public,在实现接口类中,实现方法必须可public关键字。
$ ~' N4 b4 a) h3 C; B * D2 A  Y6 w& w+ K1 p' h
(3)如果使用public来修饰接口,则接口必须与文件名相同。 $ Z; Y  i; |$ K; c

# `) I) }! f. }- N8、多重继承
" x' s, H% u+ V- ^' s/ i
2 }' `" u  r! D3 j6 ^, W(1)一个类继承了一个类和接口,那么必须将类写在前面,接口写在后面,接口之间用逗号分隔。
; T/ P' r3 M# u- r   |( V# ?" o, `' w% Z
(2)接口之间可多重继承,注意使用关键字extends。 3 Q: K7 v2 G+ r" Q& w  \8 Q9 g

( O. U; i7 C! t# U, u- k1 D" k& R(3)一个类虽只实现了一个接口,但不仅要实现这个接口的所有方法,还要实现这个接口继承的接口的方法,接口中的所有方法均须在类中实现。 0 y( F7 R4 }" o1 n) e' c$ D/ G% T- q7 A3 {
" a1 w  D4 d! K- m* c
9、接口的嵌入
% G, u& J7 }4 a
- u6 U" n  ~) o# R6 Q% H(1)接口嵌入类中,可以使用private修饰。此时,接口只能在所在的类中实现,其他类不能访问。
# f. f9 e" p& p' D7 o% r 7 m: X; Q, h$ m! L6 q1 C
(2)嵌入接口中的接口一定要为public。 ; D7 {$ z* a. i& j
7 _, }1 M9 r' [1 n9 w& X9 u5 D8 {
10、类的嵌入
9 L4 m- X: X& @& }% y. ^
. t, G4 u4 ?2 @$ y, k' p8 j/ t% i(1)类可以嵌入另一个类中,但不能嵌入接口中。
9 |6 T# E* Y# p ( L/ C9 R1 @- g# c: B" E( h
(2)在静态方法或其他方法中,不能直接创建内部类对象,需通过手段来取得。
6 Q( d% {7 ~2 l, J, w4 ?! q8 | * H- T! p# x) g5 T' b* H) X+ x8 r- i( h
手段有两种:
( H$ v/ Q( l& Y" ~7 D. |5 a 0 A7 f' N, b' l) E' w
class A { class B {} B getB() { B b = new B(); return b; } } static void m() { A a = new A(); A.B ab = a.getB(); // 或者是 A.B ab = a.new B(); }   
! k/ {! c5 h2 e- t* x( W
3 {+ _; ?! e8 i0 o- l, j 3 `# e3 X& I+ J- r" _% R  M
(3)一个类继承了另一个类的内部类,因为超类是内部类,而内部类的构造方法不能自动被调用,这样就需要在子类的构造方法中明确的调用超类的构造方法。接上例:
8 ]+ x% }# f4 X' U% O5 o- [ 6 R9 @. w) e( g7 ?7 f. U
class C extends A.B { C() { new A().super(); // 这一句就实现了对内部类构造方法的调用。 } }    4 f2 v- D/ n; x8 a  R: m

* \9 h7 B3 w; d( D. {: \/ S8 _2 I # f5 d$ P* F7 L! u
构造方法也可这样写: 0 Z. B) `8 {) H1 D

/ P. }3 X9 O. H! M. h9 X* nC(A a) { a.super(); } // 使用这个构造方法创建对象,要写成C c = new C(a); a是A的对象。  
+ d% D2 [9 T! s$ y$ @& T1 o
7 F+ s6 H- c* {5 T1 v/ Y" b
2 B: E: C: x, o, `% r11、异常类 3 J" G2 S2 q7 J/ C

( e( r5 O; A- H4 Q2 {JAVA中除了RunTimeException类,其他异常均须捕获或抛出。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 07:46 , Processed in 0.213522 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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