现在的位置: 首页 > 综合 > 正文

JAVA基础知识精华总结

2018年05月01日 ⁄ 综合 ⁄ 共 3107字 ⁄ 字号 评论关闭

1、 对象的初始化  
  c2 @5 d0 ?; G' n
(1) 非静态对象的初始化  
. m( O: u+ ?2 W4 h: B( r
在创建对象时,对象所在类
的所有数据成员会首先进行初始化。  
$ J6 t) o  F+ H3 Q7 @+ Z1 M5 N, |
基本类
型:int型,初始化为0。  #
L0 v7 x" {% U" G2 F4 g+ _


如果为对象:这些对象会按顺序初始化。  
7 @, H3 _+ r* `  X4 E, j
※在所有类成员初始化完成
之后,才调用本类的构造方法创建对象。  # N; }- p* k4 u1 O

构造方法的作用就是初始化。  /
d2 F: x7 X2 a1 t


(2) 静态对象的初始化  
1 Z6 q. |' O+ t4 ?$ c- n
程序中主类的静态变量会在
main方法执行前初始化。  &
I9 J+ P" |) /; S6 M* _) }6 `


不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时
未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序初始化。  
- L  r5 ~0 V2 n% O, S. v
2、
继承时,对象的初始化过程  
) I. s& X5 Z; B# {! a  Y
(1)
主类的超类由高到低按顺序初始化静态成员,无论静态成员是否为private。  
$ d5 l8 ^. p: V% V, X
(2)
主类静态成员的初始化。  #
n' r/ C3 m; x, z! D: O, r


(3) 主类的超类由高到低进行默认构造方法的调用。注意,在调用每一个超类的默认构造 方法前,先进行对此超类进行非静态对象的初始化。  ! B; D8 L' N/ T4 j#
}! {, `% l, J


(4) 主类非静态成员的初始化。  # V  C' @2 n" w" a% `

(5) 调用主类的构造方法。  ,
H1 c, r, g4 ?7 {* C


3、 关于构造方法  
+ [7 i% t9 K) C6 q- R! T) k
(1)
类可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方法,否则在继承此类时,需要在子类中显式调用父类的某一个非默认的构造方法了。  
1 U4 H7 F+ Q  k1 s7 Z
(2)
在一个构造方法中,只能调用一次其他的构造方法,并且调用构造方法的语句必须是 第一条语句。  : g7 Z: @" h6 @0 `

4、 有关public、private和protected  
( }$ B- q# }4 q4 _: h
(1)
无public修饰的类,可以被其他类访问的条件是:a.两个类在同一文件中,b.两个类 在同一文件夹中,c.两个类在同一软件包中。  
/ y1 a3 Y: B, a! C; ?
(2)
protected:继承类和同一软件包的类可访问。  + [* M  ?" a8 M; J

(3) 如果构造方法为private,那么在其他类中不能创建该类的对象。  
; ?" b3 a1 w& {. _
5、 抽象类  
  Z5 I5 I* I" P' X- `
(1)
抽象类不能创建对象。    y'
@8 C/ q0 k* j


(2) 如果一个类中一个方法为抽象方法,则这个类必须为abstract抽象类。  
  j. {& s. W- o: /
(3)
继承抽象类的类在类中必须实现抽象类中的抽象方法。  - _) E4 C7 N( F. a) X6 k" W$ V9 |

(4) 抽象类中可以有抽象方法,也可有非抽象方法。抽象方法不能为private。  
3 f0 F+ c, y; H8 C) p- f8 s, {
(5)
间接继承抽象类的类可以不给出抽象方法的定义。  ) ^1 i3 W8 q8 v9 E

6、 final关键字    w!
O' _( j. U1 Z& f9 a- @( Y


(1) 一个对象是常量,不代表不能转变对象的成员,仍可以其成员进行操作。  5 b$ [4 C2 Z, q% v' B6 ~

(2) 常量在使用前必须赋值,但除了在声明的同时初始化外,就只能在构造方法中初始化  ! y/ J- h0 u' O" s( R

。  
& g( k' X5 I( w: o* S5 V
(3)
final修饰的方法不能被重置(在子类中不能出现同名方法)。  4 ^- [9 b# F$ E

(4) 如果声明一个类为final,则所有的方法均为final,无论其是否被final修饰,但数据  ; j& X; C6 z5 b7
J4 o) U


成员可为final也可不是。  
3 z7 J8 i0 e5 U: V+ W5 /4 O1 H, B
7、
接口interface (用implements来实现接口)  
! n2 f; c2 r' D
(1) 接口中的所有数据均为
static和final即静态常量。尽管可以不用这两个关键字修饰  , z) |# h4 @0 L0 s! H

,但必须给常量赋初值。  
& H+ I" D3 i: /6 w2 T
(2)
接口中的方法均为public,在实现接口类中,实现方法必须可public关键字。  * S' v/ R$ s6 C+ ^% d, s

(3) 如果使用public来修饰接口,则接口必须与文件名相同。  + G6 o# N, X/ m3 o

8、 多重继承  
% A: h* M# K) X% J! R
(1)
一个类继承了一个类和接口,那么必须将类写在前面,接口写在后面,接口之间用逗 号分隔。  
& q* M* g+ u0 b$ s1 d
(2)
接口之间可多重继承,注意使用关键字extends。  
2 Q* T5 B  c9 X; g/ ?# c" c( K' t
(3)
一个类虽只实现了一个接口,但不仅要实现这个接口的所有方法,还要实现这个接口  继承的接口的方法,接口中的所有方法均须在类中实现。  
6 Z4 @0 p, u  ^8 d6 o% W5 S
9、
接口的嵌入  ( E. H;
L, I) A


(1) 接口嵌入类中,可以使用private修饰。此时,接口只能在所在的类中实现,其他类不 能访问。  ' G; Q5 b( K! I

(2) 嵌入接口中的接口一定要为public。  
4 y  r# @2 M. f! g7 P& c( Y9 M
10、
类的嵌入  : p9 _3
T( L+ B0 F+ o4 ~


(1) 类可以嵌入另一个类中,但不能嵌入接口中。  
3 u! G5 S  T0 M
(2)
在静态方法或其他方法中,不能直接创建内部类对象,需通过手段来取得。  
0 u. A$ i% s" P
手段有两种:  
+ q. k; /* G2 H/ [
class A {  
) O" X- h7 y9 M, p
class B {}  
9 v6 W6 O/ i4 `" t- o: e
B getB() {  1 ~$ d2 C; n8 j# u%
m$ `


B b = new B();  
: v8 @/ f6 j1 V8 p7 m
return b;  
3 L; }/ u& J5 L% W' ?
}    k( d2 M* h( j9 Q) e

}  
' {; _1 d  G/ r, /- {( /% H4 q
static
void m() {    l.
B% c. a# M4 e


A a = new A();  
  s  H5 |! h0 }- E, n  K
A.B ab =
a.getB(); // 或者是 A.B ab = a.new B();  
5 B* K- m7 H$ E. F  l
}  + n8 B' H* C$ e8 E)
p6 r3 a


(3) 一个类继承了另一个类的内部类,因为超类是内部类,而内部类的构造方法不能自动  , V* [5 ~( R& N/ L

被调用,这样就需要在子类的构造方法中明确的调用超类的构造方法。
4 P$ K7 V+ b% f( p
接上例:  
, A2 s6 Q2 R% M8 N# z
class C extends
A.B {  
- B- v# k- g8 n  X5 B
C() {  
* s# P% n+ s8 O+ A; g% V
new
A().super(); // 这一句就实现了对内部类构造方法的调用。  ( @, V! X( {7 @

}  
8 G3 B- r$ }7 I4 l2 h0 h, I
}  
) U/ R7 ~3 b  p
构造方法也可这样写:  . c1 P6 d2 S+ M8 c8
L* n1 {


C(A a) {  
% p* `  K1 @$ g. h" ~
a.super();  6 V7 W2 d6 n  ]) t+ I

} // 使用这个构造方法创建对象,要写成C c = new C(a); a是A的对象。  
' h/ J- r1 T/ A7 o$ V
11、异常类  
0 V( w5 j  B- z* D
JAVA中除了
RunTimeException 类,其他异常均须捕获或抛

抱歉!评论已关闭.