Java复习总结.docx
《Java复习总结.docx》由会员分享,可在线阅读,更多相关《Java复习总结.docx(28页珍藏版)》请在冰点文库上搜索。
Java复习总结
第一章
(1)Java语言的特点
(2)Java语言的移植性为什么比较高
1.基本数据类型长度一致与平台无关
2.源程序经过编译器编译后转化为字节码,然后再通过解释器在各种平台的JVM上运行
(3)Java程序的编辑、编译和解释执行过程
JavacHelloWorld.java
JavaHelloWorld
(4)Java不同版本
(5)
J2SE应用程序分类
1.Javaapplication
2.Javaapplet
(6)JVM、JRE和JDK及其关系
(7)Java程序的结构特点
第二章
(1)Java的词法规则
1.使用国际字符集(Unicode)
2.标识符是以字母、下划线_、美元符$开头,后面可以是字母、下划线、美元符、数字(0~9)
3.标识符区分大小写
4.标识符长度不限
(2)常见的Java关键字和保留字
1.数据类型:
booleanintlongshortbytefloatdoublecharclass
interface
2.值:
truefalsenull
3.流程控制:
ifelsedowhileforswitchcasedefaultbreak
continuereturntrycatchfinally
4.修饰符:
publicprotectedprivatefinalvoidstaticstrictfpabstract
transientsynchronizedvolatilenative
5.动作:
packageimportthrowthrowsextendsimplementsthissuper
instanceofnew
(3)Java的数据类型分类
1.基本数据类型:
整型、浮点、布尔、字符
2.整型常量缺省:
int
3.浮点常量缺省:
double
引用数据类型:
类、接口和数组
(4)Java的数据类型转换
隐型类型转换:
自动类型转换
显型类型转换:
强制类型转换
byte(8)≤short(16)≤char(16)≤int(32)≤long(64)≤float(32)≤double(64)
(5)变量
1.变量初始化
2.理解变量的值
3.变量默认值
4.变量作用域
类内部和方法内部
并行
嵌套
(6)常量
1.Java字面常量
2.Java符号常量:
final修饰的变量
(7)运算符和表达式
1.算术运算符包括+、-、*、/、%、++、--等。
算术运算原则:
先乘除、再加减,括号优先。
整数除法会直接砍掉小数,而不是进位。
与C语言不同,对取余(取模)运算符%来说,其操作数可以为浮点数。
如:
37.2%10=7.2。
Java对加运算符进行扩展,使+能够进行字符串的连接
整数取余规则:
a%b=a-(a/b)*b
浮点数取余规则:
a%b=a-(b*q),这里q=(int)(a/b)
++i;--i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i的值均为i+1
i++;i--在使用i之后,使i的值加1,因此执行完i++后,整个表达式的值为i,而i的值
变为i+1
2.关系运算符
关系运算符用来比较两个值,返回布尔类型的值true或false。
比较运算,计算结果true或false
优先级
(>、>=、<、<=)>(==、!
=)
关系运算符低于算术运算符
3.逻辑运算符
也称布尔运算符,操作数是布尔类型,计算操作数的逻辑关系,计算结果"true""false"
&&:
and||:
or
4.位运算符
按位与运算(&)
参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。
按位或运算(|)
参与运算的两个值,如果两个相应位都是0,则该位结果为0,否则为1。
按位异或运算(^)
参与运算的两个值,如果两个相应位的某一个是1,另一个是0,那么按位异或(^)
该位的结果为1。
也就是说如果两个相应位相同,输出位为0,否则为1。
按位取反运算(~)
按位取反运算(~)属于一元运算符,它只对一个自变量进行操作(其他所有运算符都是二
元运算符)。
按位取反生成与输入位的相反的值——若输入0,则输出1;输入1,则
输出0。
左移位运算符(<<)
运算符<<执行一个左移位。
作左移位运算时,右边的空位补0。
在不产生溢出的情况
下,数据左移1位相当于乘以2。
右移位运算符(>>与>>>)
运算符>>执行一个右移位(带符号),左边按符号位补0或1
5.赋值运算符
简单赋值运算符=
复合赋值运算符
+=、-=、*=、/=、%=
<<=、>>=、&=、^=、|=
6.三目运算符
x?
y:
z;
7.其他运算符
()和[]
括号运算符()的优先级是所有运算符中最高的,所以它可以改变表达式运算的先后顺序
序。
方括号运算符[]是数组运算符。
.运算符
.运算符用于访问对象实例或者类的类成员函数
new运算符
new运算符用于创建一个新的对象或者新的数组。
instanceof运算符
对象运算符instanceof用来判断一个对象是否是某一个类或者其子类的实例
如果对象是该类或者其子类的实例,返回ture;否则返回flase。
(8)数组
1.数组定义和初始化
语法1:
类型数组名[];
例如:
inta[];//数组定义,inta[3]在Java属于语法错误
a=newint[3];//数组初始化
语法2:
类型[]数组名;
例如:
int[]b;//数组定义
b=newint[3];//数组初始化
语法3:
类型[]数组名=new类型[数组长度];
例如:
int[]c=newint[3];//数组定义+数组初始化
语法4:
类型[]数组名={数组数据列表};
枚举法定义数组
int[]d={1,2,3};//数组定义+数组初始化+数组元素赋值
2.数组元素初始化(数组元素是引用数据类型)
A[]a;//定义数组
a=newA[2];//初始化数组
a[0]=newA();//初始化数组元素
a[1]=newA();//初始化数组元素
3.多维数组:
数组的元素是数组
int[][]a;//数组定义
a=newint[2][];//初始化数组
a[0]=newint[3];//初始化数组元素
a[1]=newint[4];//初试化数组元素
第三章
(1)面向对象的基本概念
(2)面向对象的三大特征
1.封装:
将一组相关的数据和数据上的操作集合在一起,形成一个封装体。
2.继承:
现实世界遗传关系的直接模拟,它表示类之间的内在联系以及对属性和操作的共享
3.多态:
使用相同方法名称,调用(动态绑定)不同的方法实现
重载方法名称相同,方法参数不同
覆盖方法名称相同,方法参数也相同
类继承extends接口实现implements
(3)对象的三大要素:
属性、行为和标识
状态:
对象的静态属性,通常使用成员变量来表示对象内部的各种信息
面向对象语言:
使用对象的成员变量来实型
行为:
对象的动态属性,通常使用成员方法
面向对象语言:
使用对象的成员方法来实型
标志:
区分同一类对象的标志符
面向对象语言:
唯一标识对象的成员变量
(4)类的定义
1.[类的修饰符]class类名[extends父类名]implements[接口名]
{
类型成员变量1;
类型成员变量2;
………………
类型成员方法1(参数1,[参数2,…]){
方法体;
}
类型成员方法2(参数1,[参数2,…]){
方法体;
}
………………
}
2.类的访问控制符
public:
完全友好类
无访问修饰符:
包内友好类
3.成员(变量或者方法)的访问控制符
public:
公共成员
无访问控制符:
包内友好成员
protected:
子孙友好
private:
类内私有
(5)对象
1.在创建子类对象时,不仅需要对自身成员变量初始化,还要对继承的父类中成员变量
初始化
2.构造方法是不能被继承的,但是可以在子类的构造方法中调用父类的构造方法(super)
3.类中没有定义构造方法,系统自动提供一个不带参数的默认构造方法
4.在用户自定义的构造方法中,可以用this调用本类的其它构造方法,可以用super调用
父类的构造方法
5.当子类this和super都不用时,系统会自动加上super()调用父类的不带参数的构造方法
6.子类显式调用this或者super语句必须放在第一条语句,且this和super最多只能调用其
一个
7.构造方法可以重载但是没有继承
(6)成员方法的定义
[修饰符列表]返回类型方法名称(参数列表)[throws异常名]
{
方法体;
}
static:
静态方法
属于类的方法
final:
最终方法
不能被子类重新定义的方法
abstract:
抽象方法
只有方法说明,没有具体实现
synchronized:
同步方法(后面线程介绍)
用于多线程程序中的协调和同步
第五章
(1)容器组件:
可包含其它组件的组件(基类Container)
窗口:
Window
对话框:
Dialog
面板:
Panel
(2)非容器组件:
必须被包含在容器中的组件(基类Component)
按钮:
Button
单行文本框:
TextField
复选框:
Checkbox
单选框:
Choice
(3)常用AWT组件
标签Label
按钮Button
单行文本框TextField
复选框Checkbox
单选按钮组CheckboxGroup
下拉列表List
多行文本框TextArea
菜单Menu
(4)常用Frame成员方法
publicvoidsetTitle(Strings):
设置框架的标题
publicvoidsetSize(intwidth,intheight):
设置框架大小
publicvoidsetVisible(booleanb):
设置框架可见
publicvoidsetMenuBar(MenuBarmb):
将此窗体的菜单栏设置为指定的菜单栏
publicComponentadd(Componentcomp,Objectconstraints):
将指定组件(comp)添加到此容器
的给定位置(constraints)上
(5内部类
内部类:
类内部或者方法内部定义的类叫内部类,包含内部类的类称为外部类。
作用
实现隐藏(不希望除了外部类的其他类了解内部类实现细节)
权限后门(内部类拥有外部类的所有成员的访问权限)
语法特点
内部类可以声明public、protected、private等访问限制
内部类可以实现特定的接口
内部类可以声明为abstract
内部类可以声明为final
importjava.awt.*;
importjava.awt.event.*;
publicclassHelloWorldFrame4extendsFrame{
privateButtonokButton=newButton("ok");
privateTextFieldtext=newTextField(20);
//定义内部类进行事件处理
classButtonClickimplementsActionListener{
//事件处理方法
publicvoidactionPerformed(ActionEvente){
//设置单行文本框内容
text.setText("helloworld");
}
}
//构造方法
publicHelloWorldFrame4(){
FlowLayoutlayout=newFlowLayout();
this.setLayout(layout);
this.add(okButton);
this.add(text);
//新建按钮事件对象
ActionListenerlistener=newButtonClick();
//注册动作事件侦听者
okButton.addActionListener(listener);
}
publicstaticvoidmain(String[]args){
HelloWorldFrame4frame=newHelloWorldFrame4();
frame.setSize(400,300);
frame.setVisible(true);
frame.setTitle("firstexample");
}
}
(6)例子:
用一个事件侦听类同时侦听两个按钮
importjava.awt.*;
importjava.awt.event.*;
publicclassTwoButtonsFameextendsFrame{//自定义Fame类
privateButtonbtn1=newButton("1");
privateButtonbtn2=newButton("2");
//定义一个私有内部类侦听ActionEvent
privateclassButtonListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
System.out.println(e.getSource().equals(btn1));
System.out.println(e.getSource().equals(btn2));
}
}
publicTwoButtonsFame(){//构造方法
this.setLayout(newFlowLayout());//定义布局
this.add(btn1);//加入按钮1
this.add(btn2);//加入按钮2
ActionListenerlistener=newButtonListener();//初始化事件侦听者
btn1.addActionListener(listener);//同时注册listener
btn2.addActionListener(listener);//同时注册listener
}
publicstaticvoidmain(String[]args){
TwoButtonsFameframe=newTwoButtonsFame();
frame.setSize(400,300);
frame.setVisible(true);
}
}
(7)动作事件类(java.awt.event.ActionEvent)
用户在用户界面组件上触发一个动作
典型事件源:
按钮(Button)按下
事件侦听接口:
java.awt.event.ActionListener
抽象事件处理方法:
voidactionPerformed(ActionEvente)
如何处理ActionEvent事件?
新建事件侦听类MyActionListener实现ActionListener接口,实现actionPerformed方法(填充事件处理代码)
新建事件侦听者类MyActionListener的对象listener,listener可以作为ActionEvent事件的侦听者;
事件源(例如button)调用注册方法addActionListener注册事件侦听者listener
当事件源发生ActionEvent事件时,事件侦听者的事件处理方法actionPerformed(ActionEvent)被调用
(8)窗口事件类(java.awt.event.WindowEvent)
典型事件源:
当打开、关闭、激活、停用、图标化或取消图标化Window对象时,或者焦点转移到Window内或移出Window时,由Window对象生成此低级别事件
事件侦听接口:
java.awt.event.WindowListener
voidwindowActivated(WindowEvente):
当窗口设置为活动Window时调用。
voidwindowClosed(WindowEvente):
因对窗口调用dispose而将其关闭时调用。
voidwindowClosing(WindowEvente):
用户试图从窗口的系统菜单中关闭窗口时调用。
voidwindowDeactivated(WindowEvente):
当Window不再是活动Window时调用。
(9)小结:
AWT处理事件关键步骤
选择某个组件(例如按钮)作为事件源;
新建事件侦听类(例如ButtonClick)实现某个事件侦听接口(例如ActionListener),实现那些抽象方法(填充事件处理代码);
新建事件侦听类(例如ButtonClick)的对象(listener)作为事件侦听者;
事件源(例如按钮)使用相应的侦听者注册方法(addActionListener)注册事件侦听者(例如listener)
(10)常用布局设计管理器
FlowLayout:
容器从上到下,从左到右放置组件(掌握)
BorderLayout:
将容器划分成东西南北中
CardLayout:
将容器划分成一个卡片栈
GridLayout:
容器分成相同尺寸的网格,组件从上到下,从左到右放到网格
(11)例子:
Window和Frame
importjava.awt.*;
importjava.awt.event.*;
publicclassWindowExam1extendsFrame{
privateButtonbtn=newButton("open");
classClickButtonimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Windowwindow=newWindow(WindowExam1.this);
Labellab=newLabel("helloworld");
window.add(lab);
window.setSize(300,200);
window.setBackground(Color.pink);
window.setVisible(true);
}
}
publicWindowExam1(){
this.setLayout(newFlowLayout());
this.add(btn);
ClickButtonlistener=newClickButton();
btn.addActionListener(listener);
}
publicstaticvoidmain(String[]args){
WindowExam1frame=newWindowExam1();
frame.setSize(400,300);
frame.setVisible(true);
}
}
(12)对话框
构造方法
Dialog(Frameowner):
构造一个初始时不可见、无模式的Dialog,带有空标题和指定的所有者框架。
Dialog(Frameowner,Stringtitle):
构造一个初始时不可见、无模式的Dialog,带有指定的所有者框架和标题。
Dialog(Frameowner,Stringtitle,booleanmodal):
构造一个初始时不可见的Dialog,带有指定的所有者框架、标题和模式。
主要成员方法
StringgetTitle():
获得dialog的标题。
voidsetTitle(Stringtitle):
设置Dialog的标题。
voidsetModal(booleanb):
指定此dialog是否应该是有模式的。
booleanisModal():
判断dialog是否为有模式的。
第六章
(1)Java的显式异常处理机制
try{
读入光盘内容(可能发生异常代码)
}
catch(Exceptione){//异常发生
光驱异常处理代码(异常处理代码)
}finally{//无论异常发不发生
关闭光驱(总是要执行的代码)
}
(2)Java错误分类
编译时错误:
主要是语法错误
运行时错误
错误(Error):
致命错误,程序不能简单地恢复执行,程序员无法干预
例子:
内存空间不足、断电
异常(Exception):
非致命错误,程序在修正后可恢复执行
第七章
(1)线程概念
线程(thread):
一个进程中一段连续的控制流程或者执行路径,程序自身执行和调度的实体。
线程不能独立存在,必须依附于某个进程,共享进程的某些资源(代码、数据、文件)
线程可以独享某些资源(堆栈、程序计数器)
线程的维护代价比进程小,可以称为轻量级进程(lightweightprocess:
LWP)
(2)主线程
主线程:
在任何Java程序启动时,一个线程立刻运行(main方法对应的线程),该线程通常称为程序的主线程
它是产生其他子线程的线程
它不一定是最后完成执行的线程,子线程可能在它结束之后还在运行
(3)Java自定义并发线程类的两种方法
继承Thread类(Thread类本身实现Runnable接口)
publicclassMyThreadextendsThread{
//线程索引
privateintthreadIndex;
//构造方法,初始化线程索引
publicMyThread(intindex){
this.threadIndex=index;
}
//覆盖Thread类的run方法,定义并发执行代码
publicvoidrun(){
System.out.println("Thread"+threadIndex+"begin");
try{
Thread.sleep(50);//正在执行线程休眠,伪装耗时操作
}
catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("Threa