java复习提纲.docx
《java复习提纲.docx》由会员分享,可在线阅读,更多相关《java复习提纲.docx(13页珍藏版)》请在冰豆网上搜索。
java复习提纲
java复习要点(2017)
第一章:
绪论
Java发展史
Java语言的创始人是JamesGosling
1995年,Sun公司正式推出Java并获得当年的十大优秀科技产品
1999年,Java成为企业级应用开发平台。
2009年,Oracle公司正式收购java的原开发商Sun,成为Java的拥有者。
Java的7个主要特点:
简单性网络特性多线程面向对象平台无关性解释性鲁棒性
Java的classpath环境变量设置的方法、设置值和所起的作用
设置方法:
P3
值:
jdk安装路径/lib
作用:
JVM会在这些路径里搜索.class文件,得到要加载的类
开发Java程序的三步流程:
编辑、编译、运行,各自由什么工具完成。
能举例说明
编辑:
任意文本编辑工具Eg:
notepad
编译:
javac编译器Eg:
javacfoo.java
运行:
java虚拟机Eg:
javafoo
Java的工作原理:
字节码与虚拟机机制,结合虚拟机的执行机制说明Java的解释性
字节码(bytecode):
class文件的编码,为平台无关的伪代码指令
虚拟机:
编译和运行Java程序所需要的各种命令与运行环境总称,由于字节码指令的集合模拟了一台虚拟的计算机,故称为虚拟机
执行机制(P22):
JVM从.class中加载字节码,进行合法性与安全性检测(数组越界等),然后解释执行代码(指令合法,翻译为机器代码供机器执行),或执行异常处理程序(指令非法)。
不断重复直到程序结束。
虽然有编译过程,但字节码的解释执行机制决定了Java是一种解释执行的语言。
Java程序分为哪几种,分别是什么?
两种:
Applet小应用程序与Application应用程序
第二章:
结构化程序设计
Java字符集采用的是Unicode字符集,它的特点是
双字节长,可支持多种语言。
其头128个符号与ASCII完全一致。
判断一个字符是否可以用作Java标志符的首字符的规则
Java标识符必须以Java字母开头。
Java字母:
英文大小写,下划线,美元符,其他语言字母(例如汉字)
程序性判断:
Character.isJavaIdentifierStart(charch)
Java的关键字
P27
java数据类型
p41,J_Swap例程
通过使用a=a^bb=a^ba=a^b从左到右三条语句,实现互换
P61.8.10结构化程序设计方法
Java结构化程序设计采用三种基本控制结构进行设计:
顺序/选择/循环结构
思想:
自顶向下,通过简单的规则不停分拆到语句层面为止
分拆方法:
(P57)
1)任意程序都可以用一个矩形框来表示,前面和后面加上开始与结束
2)流程图中的矩形框可以用任意多个串行的矩形框表示
3)矩形框也可以用控制结构流程图来替代:
4)不停应用上述2),3),直到程序设计结束
第三章:
面向对象程序设计
类的修饰词可以包括publicabstractfinalstrictfp等。
各自的含义。
无修饰词的含义P88
类的定义格式:
<修饰词>class类名[extends父类][implements接口1,接口2]
修饰词:
权限修饰词:
非内部类型只有public/无,内部类型有publicprotectedprivate无
public
protected
default(无)
private
同类
√
√
√
√
同包
√
√
√
×
子类
√
√
×
×
所有其他类
√
×
×
×
权限修饰词的限制,即从左边的位置能不能访问到被修饰的东西
特殊修饰词:
staticfinalabstractstrictfp
strictfp:
要求所有计算严格遵循IEEE754标准
abstract:
声明抽象类,禁止new,允许编写抽象方法
final:
禁止继承
static:
(仅内部类)静态内部类,断开与外部类具体对象关系
无修饰词,即默认访问权限,同包才能访问
域的修饰词包含:
publicprotectedprivatestaticfinaltransientvolatile。
各自的含义。
P88
域的定义格式:
<修饰词>类型名字/初始化变量列表;
修饰词:
权限修饰词:
publicprotectedprivate无,作用同上
其他修饰词:
finalstatictransientvolatile
final:
只可在声明/构造函数中初始化一次
static:
静态变量,所有该类对象共用一个
transient:
禁止该域被序列化
volatile:
禁止JVM访问优化,保证多线程同步
方法的格式与修饰词的含义。
P88
方法的定义格式:
<修饰词>返回类型名字(参数类型参数名称......)[throws异常声明]
修饰词:
权限修饰词:
publicprotectedprivate无,作用同上
其他修饰词:
finalstaticabstractstrictfpsynchronized
final:
禁止子类覆盖
static:
静态成员,与对象无关
abstract:
抽象方法,交由子类实现
strictfp:
严格遵循IEEE754
synchronized:
同步方式执行,必须获得对象锁
类的构造方法的3个特点。
P65
1.与类名相同
2.无返回值类型
3.任何一个类都有构造方法
父类构造方法与子类构造方法之间的关系。
在子类构造过程中,无论是以super(...)的形式在第一行显式调用或JVM强制在子类构造函数第一行进行的隐式调用,父类的构造函数会在子类一切构造行为开始前被调用
类的实例对象的生命周期P66
JVM提供空间--父类构造-->--定义初始化语句赋值-->--构造函数-->可用状态
--所有引用解除-->垃圾--finalize-->----回收
垃圾回收机制的原理与相关方法:
System类中的publicstaticvoidgc(),Object类中的protectedvoidfinalize()throwThrowable及其作用。
System.gc()建议JVM进行内存回收,不一定进行
finalize()在对象被回收时可能会被调用(一般GC时会被调用,但虚拟机关闭时不会),sun建议不要依赖这一方法
解释P68示例:
J_Finalize
面向对象的三大特征分别是:
P70
继承性,多态性,封装性
子类构造方法隐含对父类构造方法调用可能产生的语法问题与修改方法。
如果父类没有无参构造就会产生问题,显式传参调用即可
子类与父类对象进行类型转换的规则(3个)P72
子类变量可以隐式转换成父类
父类变量,如果指向的是一个子类对象,那么就可以显式转换成子类,
如果不是子类对象而试图转换会报运行时错误。
没有继承关系而试图转换的,会发生编译错误。
instanceof运算符的作用。
P73
ainstanceofB,无论a的类型如何,如果变量a指向的是类B的对象,就返回true,
否则返回false
注:
如果类B继承类A,那么类B的对象也能叫类A的对象,隐式类型转换
静态多态性与动态多态性的区别(overload与overwrite)
静态多态性:
通过不同的参数数量/类型/顺序让同一函数名展现出不同的行为
动态多态性:
子类通过编写除权限修饰词(等于广于父类版本)不同外其余完全相同的非静态方法,覆盖父类中的对应函数。
能举例说明动态多态性的优点与实现方法。
(结合要点29)
优点:
更好的扩展性,更低的耦合,新增数据类型不需要修改既有代码
super的三种用法P79
1)非静态方法中,访问父类型成员域super.x
2)非静态方法中,访问父类型成员方法super.x()
3)构造函数中调用父类构造方法super(...)
包起什么作用,如何定义,如何编译和运行有包的代码(P80)
注:
编译器会将编译结果放入包名指定的目录路径下,例如指定了包com.foo的文件编译结果会存在com目录里的foo目录里,但不能直接进去执行,还是要在根目录,即-d的位置执行
作用:
将相关类和接口封装在包里,更好地管理已经开发的代码
定义:
package包名,即packagecom.foo;
编译:
需指定-d参数,即java-d.main.java,另外需要注意被依赖的类必须先编译
运行:
若欲运行包内类的main函数,需要写全名,即javacom.foo.main,否则无额外要求
封装性是通过访问控制来实现的。
访问控制的四个级别见上面的修饰词内容
非内部类的访问控制有两种,类成员的访问控制有四种。
接口的定义格式与特点。
P94
格式:
<修饰词>interface接口名[extends接口列表]
可用修饰词:
权限修饰词,strictfp,abstract,其中abstract会强制拥有
特点:
强制性abstract,interface关键字
接口中成员域都具有public,static和final属性(P95)
接口中成员方法都具有public和abstract属性(P95)
接口与抽象类的区别:
(P95)
1.语义不同,接口不是类,不是一个“东西”
2.成员域和方法自动拥有上述修饰词,抽象类不会自动增加
3.抽象类可以有可变域,接口不能有
4.抽象类可以有具体方法,接口不能有具体方法
内部类分为实名内部类与匿名内部类。
非静态(static)内部类中含有的静态属性域必须具有final属性。
非静态(static)实名内部类中不能含静态方法。
(P97)
内部类在外部类之外的类名字为:
在外部类之外建立内部类对象的格式是:
(P97)
类名字:
外部类名.内部类名
创建:
(外部类里直接new即可,对在其他类里:
)
静态版本:
new外.内();Eg:
newOuterClass.InnerClass();
动态版本:
外.new内();Eg:
OuterClass.newInnerClass();
匿名内部类不具有类名,不能具有抽象和静态属性,不能派生子类(P100)
格式:
new父类/实现接口名(父类构造函数传参){类体}
匿名与实名的互相转化(P101-P104)
直接提取即可,注意extend和implements的区别
this和super对于引用域和方法的作用(P108代码)
本地变量可以“覆盖”类成员,子类成员域可以“覆盖”父类成员,
被覆盖的域/方法可以用this./super.访问,this是当前对象引用,super是父类对象引用
方法调用的参数为简单类型和引用类型的所产生的值传递效果的区别(P109-P113)
本质上都是值传递,
简单类型变量的值就是它本身,而引用类型变量的值是引用(指针)而已
区别:
函数内更改简单类型变量的值不会对函数外面有任何影响
更改引用类型变量本身的值也不会有影响
但对引用类型变量指向的类进行操作不会改变实参变量的值,
但会改变其指向的对象
P113的实例解释多态性。
J_Shape接口定义了面积计算接口,而子类实现这个接口,用访问权限更宽的函数覆盖这一方法。
在主函数的调用中,可以看到,虽然输出语句调用的都是从J_