java基础
& G* R. _! c4 Z7 d! I- 简述Java的基本历史8 i" {, B9 m; y9 x7 B' ~* G# f5 `4 I
java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机、冰箱等
5 h3 U! ~- F# U6 u' `- 简单写出Java特点,写出5个以上,越多越好
. O* }% ?- ]! Q0 }& n
简单的、面向对象的、分布式的、安全的、稳定的、与平台无关的、可解释的、多线的、动态的语言。 ' v0 M* z9 \7 l% a) j
- 什么是Java?. v. n0 L( z* ]- Q, E
JAVA:一种编程语言 一种开发环境 一种应用环境 一种部署环境
) K0 O6 s4 c [ X. P- 请写出Java的版本分类,以及每种版本的应用方向) M4 X* e7 Q0 z2 E7 E8 s
三种版本: JME:是面向内存有限的移动终端. 为消费性产品设计的; JSE: 是SUN公司针对桌面开发和低端商务计算方案开发的版本。为笔记本电脑、PC机设计的; JEE: 是一种利用JAVA 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。 为企业级的、服务器端的高端应用而设计的;
0 T1 ]5 R' O8 U" k) ^, ?) e$ n9 \- 描述Java技术的主要特性/ o5 ]- h0 O; Z
java虚拟机 垃圾回收 代码安全性
( y; i/ W( L9 _8 n3 Z- 描述 Java虚拟机的功能
4 ^5 D$ R- E8 k) Q3 e- B# M `
(1)通过 ClassLoader 寻找和装载 class 文件 (2)解释字节码成为指令并执行,提供 class 文件的运行环境 (3)进行运行期间垃圾回收 (4)提供与硬件交互的平台 / c( b2 Q1 c. e z+ V9 R$ O5 H
- 简述Java代码安全性
' ~7 b) n- a, z/ C
(1)编译时的错误检验 (2)类装载检查,把本机上的类和网络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马“的应用: k1 h) P6 g8 l1 ?( q; u' P
(3)字节码校验 (4)沙箱机制,限定访问权限 + h2 @7 x2 l% g8 a1 k2 K- w3 N6 f
- 描述Java垃圾回收机制5 x9 }1 F: l, n$ Y; E
Java 编程语言解除了程序员释放内存的责任。它可提供一种系统级线程以跟踪每一次内存的分配情况。在 Java 虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。垃圾收集在 Java 技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运行期间,所占用的内存一直往上涨, 很容易造成系统资源耗尽而降低性能或崩溃 。9 Y' s5 G6 V3 u0 V/ S/ F/ I
垃圾回收有以下特点:
4 Q$ R4 |% O' T8 Y; N (1)垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功能和行为。
# U( S9 a) x7 t: c/ J, h, C (2)有一些跟垃圾回收相关的方法,比如:System.gc( ) ,调用这些方法,仅仅是在通知垃圾回收程序,至于垃圾回收程序运不运行,什么时候运行,都是无法控制的。
) E( c ?% J6 D: E; [% \6 C (3)程序员可以通过设置对象为 null,来标示某个对象不再被需要了, 这只是表示这个对象可以被回收了,并不是马上被回收。; j O4 N; e3 W* p% K* B+ I
7 I( n( r" I/ {( U- W q
- 简述Java代码的运行过程
: `# ]0 \' D" ^; _
(1)加载代码 通过类装载器装载CLASS文件 (2)校验代码 由字节码校验 (3)执行代码 由解释器将字节码转换成机器码
5 R; G7 Q& \, a" ?1 e8 y9 T/ b, h4 r2 ]5 R- N
- 简述如何搭建Java开发环境; F( a3 T. \" M m3 _' J
首先下载安装JDK 然后配置环境 (1)配置PATH, (2)配置CLASSPATH (3)配置JAVA_HOME
) Y) ^5 ? @* g8 L5 `- n+ ] k; p- 简述classpath,path,JAVA_HOME的意义和配置方法. U! S! v/ p. b) N" k/ O% ]
path 操作系统运行环境的路径 classpath JAVA运行应用程序时所需要的类包的路径 JAVA_HOME 供需要运行JAVA的程序使用
! r9 M# B: W) ~: T. L- 请描述:一个完整的Java文件的代码分几个部分,每部分都起什么作用,大致的写法
! `5 }, h9 X9 h2 ~- O0 T
package 当前类所在位置 import 当前类运行时所需要的包或类 public class 类名 { 属性定义; 方法定义: 构造方法定义; public static void main(String args []) 例外{ 程序入口 语句; } } //注释
) q+ z, m/ P% M% A8 x2 Z/ [- Java代码的注释有几种?分别举例说明4 k# m9 N4 J% T5 m" \( i4 O% h
(1) // 单行注解 (2) /* */ 块注释 (3) /* * * 文档注释 */
8 e+ T [. z! D( J9 O- 什么是Java代码的语句,什么是Java代码的块,举例说明* z. d+ j; M9 s+ ^% x2 v" _8 X
语句 是一行以分号终止的代码,例:int a; 块 是以{ }为边界的一些语句的集合 例:public void tt( ){} & z6 q7 m3 x1 R( a3 V% Z
- 什么是标示符?
; ^2 s/ D$ { }, b& A标识符:是赋予变量、类、方法的名称。2 G9 [; Q. E3 }, n+ _8 j: t
) V" V' q6 U2 o$ ]( u4 \0 u
- 标示符定义的规则?" c+ H9 b7 b. b3 \
- 首字母只能以字母、下划线、$开头,其后可以跟字母’下划线、$和数字配置CLASSPATH
- 首字母小写中间用大写字母隔开
- 标识符具有一定的含义$ G6 Z; e5 h& R- C0 f
- 什么是关键字?
- s! G+ k* J+ k0 E {9 ~4 G关键字就是编程语言与机器语言的编码约定2 V% ?+ L& Y9 O3 B4 L p6 I
0 p$ q1 D$ ~- p! i4 V& r# r
- true、false、null、sizeof、goto、const那些是Java关键字2 ?$ j0 O2 @% C7 N8 Z
true 、false 、null 为JAVA的关键字 - Java的基本数据类型有几种?分别是?
) j v3 ^! R9 q4 J& n& mshort int long boolean float double char byte
) N+ X! t4 a5 A " ~/ |: j8 @8 a8 v
- 请写出每种基本类型的默认值?取值范围?分别给出一个定义的例子
" M2 U* L4 p* z, j+ i默认值 取值范围 示例
/ h: D0 i& W7 Z, B8 B' \
字节型 : 0 -2^7—-2^7-1 byte b=10; 字符型 : ‘ ′ 0—-2^16-1 char c=’c’ ; short : 0 -2^15—-2^15-1 short s=10; int : 0 -2^31—-2^31-1 int i=10; long : 0 -2^63—-2^63-1 long o=10L; float : 0.0f -2^31—-2^31-1 float f=10.0F double : 0.0d -2^63—-2^63-1 double d=10.0; boolean: false truealse boolean flag=true; 1 P0 @% Z) y4 U. L8 I. Y) @% j& x
- 在基本类型中,如果不明确指定,整数型的默认是什么类型?带小数的默认是什么类型?
/ n* h) h. ~% L: E; L) p3 l I& T
整数类型 默认为 int 带小数的默认为 double ) P) x! f1 C: `8 U. [
- 如何定义float类型和long型' O: a7 P! m7 k% L* r7 Y- I
float f = 1.2f long l = 1.2L " A9 U7 @9 v5 _- ^0 n; v
- 什么是变量?. P0 A# s$ p5 d* M' V* h3 U7 Y
变量是用来引用一块内存区域或一个值,用标识符来表示,可以通过操作变量来操作变量所对应的内存区域或值块的值。
4 H# X4 m* Z$ G1 d" b, [- 变量的定义规则?
: } p7 D# t8 P$ T7 Y4 t- 以字母、$、下划线开头,其后可以跟字母、下划线、$和数字;
- 首字母小写,中间单词用大写字母隔开;
- 名称具有一定含义;9 F& S5 f* T6 f" Y" J, z
4 F) N; v1 ]3 O+ O/ n$ S: @% z# z- 请写出Java编码约定中对下列部分的要求:类、属性、方法、包、文件名、变量、常量、控制结构、语句行、注释. `2 e3 B8 c5 p% @; e
类: 一个类文件中类名要和文件名相同,类名一定要以大写字母开头,单词之间用大写字母分隔 属性: 属性名首字母小写,中间用大写字母隔开。 方法: 方法名首字母小写,中间用大写字母隔开。 包: 引用包必须写在类文件的开头,有且只能有一个包,全部用小写字母。 控制结构:当语句是控制结构的一部分时,即使是单个语句,也应使用大括号将语句封闭。 语句行:每行只写一个语句,并使用四个缩进的空格,使代码更易读,注意用分号结束。 注释: 用注释来说明那些不明显代码的段落。 常量: 常量名一般用大写字母,单词之间用下划线分隔,一旦赋值不允许修改。 * G Q' e. P1 A" ~ r8 ~
- 什么是Javadoc?
; G8 x& K& z; m2 r8 m$ {
按照一定格式生成程序的文档的工具。 / G/ S! H S/ u7 n6 |9 K" [+ J( j, {
- 什么是引用类型?
+ V) k4 B& f1 x' S) [3 i" U用户定义类型, 它可引用类和数组。& u) h. R! p' q0 E# X/ y4 K) k
除去基本数据类型的其他类型都是引用数据类型。 - 什么是按值传递?什么是按引用传递?8 i3 |! ?# _4 k/ f& Q, p
按值传递:就是将该值的副本传过去(基本数据类型+String类型的传递,就是按值传递) 按引用传递:就是将值的内存地址传过去(除基本数据类型+String以外类型的传递,就是引用传递)
( I- H0 \+ D! e9 L' Z9 l- 如何创建一个新对象?如何使用对象中的属性和方法?
' m. [, U( e- F! s4 o+ `
使用new 关键字来创建一个新的对象; 通过对象的实例用”.“(点)来调用对象中的属性和方法; 静态的方法和属性,也可以直接用类名”.“(点)来调用;
# A: Y% d. B' l% O: F8 O- 简述new关键字所做的工作* c; Q: c" F$ ^
new 创建一个对象,并为对象分配一块内存。
& i6 ^* r) P4 i, P$ z 7 ?$ ^1 o5 N- X3 G& B+ q$ i
- 简述”=” 和”= =”的功能和区别- v+ K0 `# G' F9 \: o' M9 S1 M+ ?1 t
“=” 赋值, “= =”当比较基本数据类型的时候,判断前后两个值是否相等; 当比较引用数据类型的时候,判断= =前后两个值的内存地址是否相等; 区别: = :为赋值表达式 = = :为逻辑表达式 , c: }, B" ?% [6 q' M- G- D
- 什么是实例变量?什么是局部变量?什么是类变量?什么是final变量? |9 s4 K7 ?: p
实例变量: 类中定义的变量,即类成员变量,如果没有初始化,会有默认值; 局部变量: 在方法中定义的变量,必须初始化; 类变量: 用static修饰的属性; final变量: 用final 修饰的变量, " W- H- C( Y% Y+ \% i' ~! @: \+ y
- 简述上述各种变量的定义规则和使用规则?* I# B6 P9 K4 j9 m; x' F9 A
实例变量: 不需要static关键字来声明,需要类的实例(对象)调用(用”.“); 类变量: 用static修饰,可以用类名调用,也可以用类的实例调用; 局部变量: 在方法内任意定义变量即为局部变量; final变量: 一旦赋值,不可以再修改的变量; final属性只允许赋值一次,且只能通过构造方法赋值,定义后也就是一个常量; final修饰的变量,只允许赋值一次
1 {" s- W. e$ j N6 D- a++和++a的区别?5 ~3 c) L2 h; k0 |6 ~) ~
a++ : 先使用,后加1 ++a : 先加1,后使用
8 ?7 N4 U# ^/ B2 r? : 三目运算符: 表达式1?表达式2:表达式3 如果表达式1为true,执行表达式2,否则执行表达式3 &: 位运算:按位与 | &&: 逻辑运算:逻辑与 9 d+ p! P5 s" Z8 d! A4 |: a
- 请描述>>、<<、>>>的功能# m1 [/ b+ N' \) M0 M" b3 L
10>>4 :算术或符号右移位运算符 << :算术或符号左移位运算符 >>> :逻辑或无符号右移位运算符
; N7 g# V+ i6 ~1 d( j- 请描述什么是强制类型转换?什么是自动类型转换?什么是向上造型?并分别举例说明
a3 I8 [+ }5 S; O强制类型转换:在一个类型前面加( ),来强制转换 % `4 E+ _! g; T9 o
long l = 9L; int i = (int)l; 自动类型转换: int i = 5; String str = “”+i; 向上造型:把范围小的造型为范围大的类型: int i = 2; long l = i;
( n' N( J' \% F! j% d0 e6 Q" u- 请写出完整的if条件控制语句的结构 @: H0 r3 Q9 ~% L3 s$ O& c
if(布尔表达式){ 语句 }else{ 语句 }
8 g# Z k0 Y& v P4 }! I3 ]- 请写出完整的switch语句的结构
$ v" L; G6 H8 R; d9 oswitch(字符){
2 L2 y! O* B7 l0 X3 u, j7 a
case 字符: 语句 break; case 字符: 语句 break; default:语句 }
! X3 A, O$ f# f2 @# Z- 请写出完整的for语句的结构! A# q/ W, Z% ?7 Z4 _% e# P3 z, M9 G/ J
for(初始语句;条件语句;步长){ }
0 T0 x" N" S( C9 x6 H! t) B- 请写出完整的while语句的结构
0 Y9 e: P% i1 x
while(boolean语句){ } 9 h% L9 [( T6 d
- 请写出完整的do while语句的结构: c* G& X. [# X. [. R* @, j
do{ }while(boolean语句);
) l2 o7 u/ s1 }) ~- 请描述break 和 continue的功能和用法+ r' C; h3 z% A: i
break:终止(跳出)最近的循环 continue:跳出本次循环,执行下一次循环 3 ?) h+ G, f( r1 } x7 P
- 定义一个一维的int数组,先创建它,并初始化它,给它赋值,然后输出其中的一个值
3 X) R: Q3 `4 s6 g* U9 k" ^6 x
public class Arr{ public static void main(String args[]){ int a[] = new int[5]; a={1,2,3,4,5};//错误 , 只能在初始化时这样做 a[0]=1; a[1]=2; System.out.println(a[0]); } }
& ?3 J5 ~+ W U2 N0 C* T- 定义一个一维的A类型数组,直接定义并赋值,然后输出其中的一个值
! Y5 |+ l4 l3 i& F7 ^
public class A{ public static int i; public static void main(String args[]){ A aa = new A( ); A bb = new A( ); A a[] = {aa,bb}; a[0].i=2; System.out.println(a[0]); } }
0 e8 M' _/ n7 H+ S' t- 把上面的数组改成2维的数组7 G2 Z8 c" `# c d H0 y2 d
public class A{ public static int i; public static void main(String args[]){ A a[ ][ ] = new A[5][5]; a[0][0].i=2; System.out.println(a[0][0]); } } " {0 `+ |% t- W5 W4 G6 j
- 举例说明数组拷贝方法的使用:arraycopy方法
! a8 R8 b$ j. U, s- o! Y9 _" spublic class A{ 8 d1 ]5 N9 q4 q% l/ a5 w4 k
public static void main(String args[]){ int a[] = new int[5]; int b[] = new int[5]; System.arraycopy(a[5],0,b[5],0,a.length) System.out.println(b[0][0]); } }
3 q- Y2 u7 e f5 ~; X W% z9 ^- 什么是构造和析构方法?功能是?2 }' H0 J6 Y0 V$ o/ n
构造方法:每个类至少有一个构造方法,类初始化时调用的方法 1.方法名和类名相同 2.无返回值类型 格式:访问权限 类名(参数列表) {}; 1.自己定义构造后,就没有默认的构造方法 2.无构造方法时,默认为空参的构造方法(无参数,方法体为空)
+ O" F' Q/ M- ?6 C析构方法:finalize 类销毁时,自动调用方法 当对象在内存中被删除时,自动调用该方法 在此方法中可以写回收对象内部的动态空间的代码 5 u9 D' |8 B. a e
- 简述Java的访问修饰符类型?分别有什么功能?
$ c0 S9 z5 e, h
public 公开的,任何一个类都有可以访问 protected 同包同类,只可被它的子类访问 default 只能被同一个包中类访问 private 私有的,只能在本类中被访问
$ k; y1 \% E8 E$ x1 q5 Y2 X& i2 o# M8 I, z( L0 R+ Q
( Q9 a$ A- q1 S1 I" y
) B; w P" ^: p# D/ w: Y7 F& t; Z, `0 T+ S
& E, r9 o1 V8 I2 g7 |" T1 r' C2 S4 f# ^2 U$ f) J) [9 Z
' A6 N0 X: y: i9 c0 R
4 h4 e$ F" l5 |/ g
% W9 h' I9 s7 w% [6 p7 C$ V- 分别说明:在类上、在属性上、在方法上能使用哪些访问修饰符. o" ^) {0 k! g! {% ]# j
在类上:public default final 在方法上: 访问权限:public protected private default 方法修饰符:static final 返回类型:void 在属性上:public protected private default static final
# ~. J$ R* J. P- 简述什么是包?包的功能
) Z0 B: c3 s- U+ K
包:对所定义的多个JAVA类进行分组,将多个功能相关的类定义到一个包(文件)中。 功能:1.易于查找和使用适当的类 2.包不止包含类和接口,还可以包含其它包,形成层次的包空间 3.有助于避免命名冲突
: j7 B6 ]- k; u" k+ D. s- 请写出5个以上的JDK中的包,以及他们的基本功能
8 ?* h' k5 O9 } x
java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面 java.lang: 提供java编成语言的程序设计的基础类 java.io: 包含提供多种输出输入功能的类, java.net: 包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET, java.applet: 包含java小应用程序的类 java.util: 包含一些实用性的类
* U [: Z( O6 d3 d- 什么是包装类?Java中都有哪些包装类, g. c1 a- W2 G1 a \ B1 l5 G' S
在JDK中针对各种基本类型分别定义相应的引用类型 ————–称为封装类9 G; ]7 ]( w$ S2 ]) I5 I6 b
Boolean Byte Short Integer Long Float Double Character
" x( @+ N+ I* U& m! e" w- OOP(面向对象)语言的三大特征是? ^4 w5 y8 o# u2 X" b( d) x
封装性,继承性,多态性, X5 A9 v) u" G* j; l4 N( o) X
2 m8 B1 ^" I$ I8 U+ Y# Z* S' s- 分别表述类的三大特性及其他们的功能
, |8 C# ~( c" G
封装:隐藏类的实现细节、迫使用户去使用一个接口去访问数据、使代码更好维护 继承:子类可以直接继承使用父类的方法,程序员只需要做的是定义额外特征或规定将适用的变化 多态性:同一个行为具有多个不同表现形式或形态的能力 : D2 A9 o; [- z. W Q3 S; I2 x
- 如何实现继承?继承的规则?. r" \6 H! K" C- p! g. J! R: Q9 X
public class A extends B{ } - 单继承性
- 构造方法不能继承
- super引用父类,调用父类的属性,方法
- 当子类中出现与父类的方法名,返回类型,参数列表相同的方法时要覆盖此方法. y& q- Q1 s+ o# |
- 简述this和super的功能和用法
9 N/ ~9 J1 w" n2 G5 W
this : - 能访问除构造方法以外所有的属性、方法,通过this. 来调用方法和属性
- 不可以在静态方法中使用,
- 在调用其它构造方法时,必须放在该构造方法的第一行
- 在构造方法中使用this(参数列表),相当于调用本类的其它构造方法,它必须作为构造方法的第一句
' ^# @8 y9 {+ y) ~2 S" \ 3 y c3 X3 Y' x( }0 Z+ g* x" M& u
super :访问父类 - super. 点取父类中被子类隐藏的方法和属性,
- 通过 super(参数列表) 来调用父类的属性和方法,在调用父类的构造方法时必须放在子类构造方法里的第一行;% E8 m0 v% L; Q/ }' ~4 e" Y$ ]
. T9 D- @5 U; U9 M; a$ ^# ?5 F" h- 如何确定在多态的调用中,究竟是调用的那个方法?) X* t0 Y$ ^+ ]6 O4 g
new的是哪一个类就是调用的哪个类的方法。
5 W- U8 ?" ~. E6 n+ [" F( P
, I6 _* L( m+ |0 o, L/ C/ Q3 L& T6 \1 s- 请描述方法定义的完整的语法结构; {% v; J$ X6 [% i9 k0 s( C
权限修饰符 修饰符 返回类型 方法名(参数) 例外{ 方法体; } # Z) ]' @: ? N; O- D; T
- 什么是重载?) h( t3 r, L* H9 J4 b# k
在一个类中出现方法名相同,但参数列表不同时,这种情况就是重载。8 w0 R0 X, w) o
" k& s3 L9 o, t9 D! | ]
- 简述重载的规则* j3 X ^, D% `" a4 R' R# O
- 方法名称必须相同;
- 参数列表必须不同(个数不同,或类型不同,或参数排列顺序不同);
- 与返回类型无关;
! x5 }- N2 O Y
- 什么是方法的覆盖?什么情况下出现?
1 \& O# y' f8 I: `% g, P! Y0 \- r
方法覆盖: 子类可以修改从父类继承过来的行为,也就是说子类可以创建一个与父类方法有不同功能的方法,但具有相同的:名称、返回类型名和参数列表。 在父子类的情况下出现时。 6 [6 E) n; `# B% k& F
- 方法覆盖的规则?5 L# L1 Z" g- N) P) }# U
- 方法名要和父类中被覆盖的方法名相同,返回类型相同,参数列表相同。
- 访问权限要大于等于被覆盖方法的权限。
- 例外列表要小于等于被覆盖方法的例外列表。
' r% g% R. a' }8 c
/ C8 W; Y/ O# a' Q( k4 O- static修饰符的功能是?可以用在什么地方?怎么访问?+ `0 V9 G: p) S. K
static 修饰符功能: , Y+ O+ S' B8 d( g' O3 B5 \5 Q
- 共用一块内存区域,也就是用static修饰的变量或成员方法对所有类的实例都是相同的
- 静态成员方法和静态变量的优点在于他们能在没有创建类的任何一个实例的情况下被引用。
- 可以用在方法或属性上
7 E7 R$ W8 d; \2 Y1 Y! k
访问方式: - 直接使用类名调用
- new 一个实例,用实例调用. `; Z2 V5 @- E" I+ X
) i; c) V# S: F2 o8 n5 V- static的基本规则
# O$ x: ?, {. w- 类中的静态方法只可以调用静态的属性和方法,不允许调用非静态的属性和方法。
- 静态变量为类变量,可以用类名直接调用静态的属性和方法。
- 静态方法中不允许出现this和super
- 构造方法不允许声明static
- 非静态变量为实例变量,通过实例调用
- 静态方法不能被非静态方法覆盖6 V, K0 q% ]" l' O2 j
' R0 d1 O0 n9 J7 R7 [
2 h) Z% F* @( i/ e- final修饰符的功能是?可以用在什么地方?' i3 N/ W2 `0 w+ n5 v
功能:final标记所有通用的功能,不能随意更改 可以用在类、属性和方法上 8 _, U" M( S$ }& L; T% v
- final的基本规则2 _3 d( m( }; p: L& ?) l& V1 j0 A! Z
- final修饰的类不能被继承
- final修饰的成员变量只允许赋值一次,且只能通过构造方法里赋值。
- final修饰的局部变量即为常量,只能赋值一次。
- final修饰的方法不允许被子类覆盖。
& i9 W+ M6 p7 H" U$ K
: T, G) S+ S9 ~0 `& c
- h' ~- H2 T; c1 h6 T, @% I) R
( g' R. D0 b. X( B! ?; m
- 什么是抽象方法,什么是抽象类4 F5 y- a( n1 z1 e- R3 @
用abstract修饰的方法,只有方法的声明,而没有方法的实现,就叫抽象方法。 用abstract修饰的类,就叫抽象类。 0 _0 v' ?7 R H& a0 i. o
- 抽象类的规则 y8 f- K8 F- C$ ?9 I: @# z/ G
- 抽象类内部可以没有抽象方法
- 必须用abstract修饰
- 不能够直接使用抽象类,必须通过子类继承并且实现
- 抽象方法不允许被private修饰
, }& t3 ?! t0 s. P5 v% U
8 |7 |) V3 i& V6 @2 V
- 什么情况下使用抽象类
& M- n! D: z0 r$ O k _/ x! _- 当一个类的一个或多个方法是抽象方法时;
- 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时;
- 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时;- n( V9 N+ V; ]2 F4 E# {8 F
6 y) ~' e. h' y6 J1 W; t# M: ? X, e- equals方法和”= =”的功能和区别8 O/ y% ^6 }2 W# B& m
功能:判断对象是否相等 区别: equals方法比较的是对象的值 = =:比较的是对象值的内存地址,对基本数据类型来说= =比较的是数值 ( i2 |6 Q" s7 a. t5 z/ Z5 y8 W
- toString方法的功能和基本写法. ]8 A' R, z9 f2 j% B0 b
返回一个String类型 public String toString(){ return “”; } 1 F$ \2 {, R3 j8 k' f" A1 W
- String的方法的功能和基本使用方法,请描述5个以上
, w* I) ]4 F- ^3 D- L" S0 g
substring(参数1,参数2); 功能:取字符串中参数1到参数2的的所有字符; “String”.subString(0,1); replace(参数1,参数2); 功能:用参数1中的值替换字符串中所有参数2的值 “String”.replace(ing,tt); equals( ); 功能:判断两个字符串是否相等 “String”.equals(“tt”); trim( ); 功能:去掉字符串两边的空格 “String”.trim(); indexof( ); 功能:查找字符串中参数所在位置,并返回字符串第一个出该参数的下标 “String”.indexOf(“ing”); split( ); 功能:根据参数分割该字符串 “String”.split(“-”);
% N7 I, f' l" C! n' r- 为什么使用StringBuffer类?有什么功能和优点?
. ^, f. c4 p z' \% y. s" M2 w–只创建一个对象 9 h- `8 C! k2 @! `- u+ K9 k
–StringBuffer 对象的内容是可以被修改的 –除了字符的长度之外,还有容量的概念 –通过动态改变容量的大小,加速字符管理 2 v2 m1 V; v8 ^, v( X
4 g2 F U3 }2 t/ j% H1 w
- 举例说明如何使用StringBuffer
i) J; u7 f( [
StringBuffer sb = new StringBuffer(); sb.append(“aaa”);
* M- g& a5 }4 F, w$ ?- 如何使用Java读写系统属性?+ y3 X- l7 a7 i8 T: ], ]& ` x
读:
- \2 X- f, u8 |- \& ]1 W% d
/ w" f0 q9 _$ K6 c# Q, {- H/ c
Properties props = System.getProperties();
' y8 }9 y, R9 ^) z Enumeration prop_names = props.propertyNames();
; U$ N8 I! Z) ]2 q9 W while (prop_names.hasMoreElements()) {% A/ T: R' u& ^2 G9 E; o4 n" P$ E
String prop_name = (String) prop_names.nextElement();
. ?9 a$ a/ L/ `) j5 u* v String property = props.getProperty(prop_name);# K1 I7 b2 a9 g* ~6 |, O( x
System.out.println(“Property ‘” + prop_name + “‘ is ‘”+ property + “‘”);# H! |) ]1 d4 h
} 写:) H# i/ |7 t7 S5 m# W! w3 T9 @2 f' m1 x
System.setProperties(props);
* P# d/ ^2 z! E: \. c$ E ) h2 ^6 P n! O9 s& K* C
用法: public class Test {
7 K- Z9 E8 A& S public static void main(String args[]) {4 o t @2 K% Y' t2 r- M9 y3 O
try {2 X; M$ w+ o9 ?- U7 J2 b
String name = “test.properties”;' H8 Z2 e% c& f. l m( H
InputStream in = new BufferedInputStream(new FileInputStream(name));+ S5 b9 [6 P) |& v$ n" N
Properties p = new Properties();; W' I1 a7 y: @+ J) t
p.load(in);6 S) }0 a5 f0 G6 l! P8 ]
System.out.println(“a的值==” + p.getProperty(“a”));
* \' j: j/ {& ^ } catch (Exception err) {
: U& G( v- E. U+ e _2 k err.printStackTrace();' Z6 Q }" l7 r$ T
}
! ]+ }$ J, T9 |# t }- R% {) {9 G ~, h6 t+ g
} ' S2 X0 X. {( T/ h7 e# T' x0 S2 N7 G ^
, S$ \' x. s* Y5 C: |& W1 g- 什么是接口?接口的定义规则?' `0 X% y. g% [
接口是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。4 I- I' P# N- Z \4 N
public interface Tt { public void outPut( ); public int tt( ); } , }8 y, x" e: D0 ^
- 接口的作用?为什么使用接口?6 r; G$ G" n5 n0 \% @
多重继承 : Q( [& f4 f. c( q8 w( ?
封装、隔离 功能,实现的分离 多态 便于后期维护 接口是可插入性的保证。
0 W) o$ Y, T& o# F3 n" E$ I- 什么是多重接口% H# ]3 ^: D# J8 a' t) ^( A* ? T
就是一个类实现多个接口3 }& {4 G1 n6 {& x; X
8 I3 n8 T# }3 J* G2 q d9 }- 描述接口的基本思想?" R1 @: A4 h1 \. b( C6 m
封装 隔离 接口及相关机制的最基本作用在于:通过接口可以实现不相关类的相同行为, 而不需考虑这些类之间的层次关系。 根据接口可以了解对象的交互界面,而不需了解对象所属的类。 面向对象程序设计讲究”提高内聚,降低耦合”。
) P1 a9 i; @3 U9 t$ d) z- 如何在代码中使用接口?9 P6 L. @3 a' K9 V8 G! T' u
public class MyCast implements Tt{ public void outPut( ){} public int tt( ){ return 0; } }
( M# V7 _3 |; A, |/ O/ `( |9 Y- 举例说明如何把接口当作类型使用4 ^6 H. x& p6 t7 L
public interface Animal(){ public void tt( ); } public class Dog implements Animal{ public void tt ( ){} }
% f* T( J$ l5 l( ZAnimal ani = new Dog();
/ T! J# v9 w* r7 l; |) {0 s- 如何选择接口和抽象类?为什么?+ X( L7 u$ T5 g4 R6 h5 h
优先选用接口,尽量少用抽象类. Y# |; R% e4 u: L7 o
在下列情况下选择抽象类:需要定义子类的行为,又要为子类提供共性的功能。' @5 X3 x: I; t+ W# ?1 ?9 M
8 ~; b! t# M! t+ g) D. N- 什么是异常,异常的分类?# |/ u3 a2 N/ B3 s
程序中导致程序中断的一些情况叫做异常,一般程序员可以处理。
]# a6 r: i( x# J% y) S异常分为运行时异常和非运行时异常(一般异常)
6 ~7 _/ l" \- A9 `运行时异常是指因设计或实现方式不当导致的问题。也可以说,是程序员的原因导致的,本来可以避免发生的情况。例如:BufferOverflowException, ClassCastException,IndexOutOfBoundsException,ArithmeticException。出现这些异常的代码不需要try块包围。! P! c# H; X1 x6 S- N, I* R
非运行时异常是指除运行时异常以外所有的异常,出现这些异常的代码必须用try块包围。例如:FileNotFoundException,EOFException,1 ~. u0 }% b9 d1 N0 x
* [9 U/ J% Q# L F7 k- 简述处理异常的两种方式?$ z- [4 J" B' I3 R4 H1 v8 Y3 c A! l
抛出(throws)和catch语句处理0 P J0 Z9 I: \ ?& V, }
/ ^& w6 P- U9 e2 W2 z
- 简述try块的功能和规则! G, }# }& J6 V3 V- T/ O9 d
try块内部一般写一些编程人员认为可能会出现异常的代码,使程序运行时不会因为出现异常而中断。
+ O8 p) i$ ^& K7 {- 简述catch块的功能和规则8 a* J# y6 X7 W* t
功能:可以截获所声明的异常,并在语句块内对其进行处理 规则:catch(Exeption e){ e.printStackTrace( ); } ( L, G% Y( S, m" n+ X
- 简述finally块的功能和规则
* W) X: I Y/ x4 [
finally块一般写一些不论是否发生异常都必须执行一次的代码 例如关闭与数据库的连接等 : I# C; |) Y) ]1 g, x+ m6 K
- 简述throw和throws的功能和使用方法
0 L4 M, H' c% g8 X2 ~
throw 指编程人员主动抛出一个异常 throw new NullPointerExeption( ); throws指程序遇到异常情况自动的被动抛出一个异常 public void test( ) throws Exeption{} 6 N& F0 j0 r) e1 U$ D+ m
- 异常的分类?
- X# a r: Z$ w: b+ b
错误(Error): JVM 系统内部错误、资源耗尽等严重情况,程序员不可控制 例外(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,程序可以控制 9 Y- k' H) K. j9 m
- 什么是预定义异常
. c) Y* z. V+ |6 P7 N. }1 |
java程序中预先定义好的异常叫做预定义异常
& J% d% {8 l4 b$ T/ R; \- 简述自定义异常的规则5 l* |( @$ W/ P7 N8 h
写一个类继承Exception 用户自定义异常通常属Exception范畴,依据惯例,应以Exception结尾,应该由人工创建并抛出。 ! e) L# }/ _- z7 M
- 什么是断言?
& u# x- K* _! j. J& v6 `* J! [0 }
用来证明和测试程序的假设。 ' K; P+ p* W' k7 m
- 如何使用断言?举例说明
7 S& Z( U" L5 j7 A7 l
一种是assert<<布尔表达式>>;另一种是assert<<布尔表达式>>:<<细节描述>>。 assert a= =10 : “这里a等于10″;
& N- ^2 H: W" B1 H. T |