您的当前位置:首页正文

JAVA期末复习

来源:华拓网
JAVA期末复习

第一章

1、java的体系结构

Java编程语言、java类文件格式、java API和JVM(虚拟机)。

2、javac的作用是将源程序(.java文件)编译成(.class文件)。Java源程序的后缀名必须是java。

第二章

1、数据类型

Java一共有八中基本数据类型,4种整型,2种浮点型,表示字符单元的char型以及boolean类型。 2、进制数的表示

十进制 int number = 20; int number = 25;

八进制(在Java中,当需要使用八进制表示数时,需要在该数前面放置一个0) int octnum1 = 04;//表示八进制4 int octnum2 = 010;//表示八进制8 int octnum3 = 030;//表示八进制24

十六进制(在java中,当需要使用十六进制数的时候,需要在该数前面放置一个0X或0x)

int hexnum1 = 0X01;//表示十六进制1 int hexnum2 = 0X7FFFF;//F也可以小写 3、浮点型

浮点型数据默认为double型,因此要使用float型字面常量时,必须后面添加后缀F或者f。

float y = 12.3456F;

而使用double类型的时候,可以添加后缀D或者d,也可以不添加。 4、char型

在java中,字符的编码不是使用ASCLL码,而是使用Unicode编码

一般情况下,char类型数据被表示为用一对单引号包含的单个字符,如: Char c1 = „n‟; Char c2 = „@‟; 常用的转义字符:

\\n:换行 \\r:回车 \\b:退格 \:制表 \\”:双引号 /‟:单引号 \\\\:反斜杠

5、基本数据类型值间的转换

顺着箭头的方向有路径的均可进行自动转换。

强制类型转换

目标变量 = (转换的目标类型)待转换的变量或者数值; 如double d = 4.998;

Int i = (int)d; //i的值变为4;不会进行四舍五入;

6、变量名命名规范

·必须是一个合法的标识符;

·不能是关键字或者保留字(如true、false或者null); ·在同一个作用域中必须是唯一的。

Java语言规定标识符由字母、下划线(_)、美元符($)和数字组成,且第一个字符不能是数字。其中,字符也包括大小写的字母和汉字。

7、final变量 final变量的数值在初始化之后不能再进行改变。 Final float a = 3.14159; 8、运算符

·使用“+”、“-”、“*”、“/”表示加减乘除。另外还有求余运算符“%”,还有自增自减运算符。

·当加减乘除运算的时候,满足类型提升规则。即如果参与运算的两个数级不低于int型或者int型,则结果是int型,如果其中一个级别比int型高,则运算结果要与级别高的数类型相同。

·除法运算分为整数除和浮点除

1、整数除 结果将得到一个整数,把小数部分截断

2、浮点除 两个浮点数或者一个浮点数与一个整数畸形除法运算,结果将得到一个浮点数,即便结果是一个整数。

3、与整数除不同的是,在浮点除中,如果除数是0,则不会报错。在浮点除中,如果被除数是一个正浮点数(非0),结果为infinity(正无穷),如果被除数是负数,那么结果将得到-infinity(负无穷);浮点数0.0/0则得到NaN;

·取余运算 将左边的操作数除以右边的操作数,取其余数,也遵循类型自动提升的规则。 Mod = 15%-4 结果是3 结果符号与右边操作数无关;

Mod = -15%4 结果是-3 结果由左边操作数决定; Mod = 6.8%6.3 结果是0.5,浮点数一样能求余数; ·自增自减运算符 op++:自增1,在自增之前计算op的值

++op:自增1,在自增之后计算op的值 op--:自减1,在自减之前计算op的值

--op:自减1,在自减之后计算op的值

·关系和逻辑运算符

·其他运算符 “?:” 该运算符是一个条件运算符,相当于一个简化的if-else语句。其一般形式是:(<逻辑表达式>)?<结果表达式1>:<结果表达式2>

首先计算逻辑表达式的值,若为true,则返回结果1,否则返回结果2。 9、控制结构

程序的结构大致可以分为3类:顺序、选择和循环。 ·条件语句

(1)if条件语句

(2)Switch分支语句 ·循环语句

(1)while语句 (2)Do-while语句 (3)For语句 ·跳转语句

(1)break语句 (2)Continue语句

(3)Return语句(只能用于方法内部,返回值可有可无)

10、字符串(包括字符串常量和字符串变量)

·String字符串的创建(可以有三种创建方式)

String str1 = “hello”;

String str1 = new string(“hello”);

Char str[] = {„h‟,‟e‟,‟l‟,‟l‟,‟o‟};//以字符数组方式声明

String str[] = {“hello”,”jaya”,”!”};//以字符串数组的方式声明 ·string类型字符串的操作

Substring(int begin,int end 返回值为string 该方法用于提取调用方法的字符串中的子串,并返回新的子串

String str1 = “java_learning”,str2; Str2 = str.substring(4,9);

System.out.printiln(str2);//输出_learn

indexOf、lastIndexOf:用于对字符串建立索引,返回字符串的位置 Int indexOf(string str) Int lastIndexOf(string str)

A.indexOf(B)A.lastindexOf(B) 比如:

String s1 = “java_learning”,s2 = “ear”; Int retVal1 = str1.indexOf(s2); Int retVal2 = str1.lastIndexOf(s2);

System.out.println(“indexOf:” + retVal1); //输出结果为 6 System.out.println(“lastindexOf:” + retVal2);//输出结果为 6

·stringBuffer类型

(1)stringbuffer对象的创建 stringbuffer name = new stringbuffer(“张三”); (2)方法 方法 Capacity Append Insert Delete Reverse 11、数组

·数组的声明(维数和方括号的数目一致,而且方括号可以位于数组左边也可以位于其右边。)

·创建数组对象(new) Int[] k;

String [][] s;

//将数组k指向长度为5的int型一维数组对象 k = new int[5];

//将数组s指向第一维长度为6第二维长度为5的string型二维数组对象 s = new string[6][5];

·数组的初始化(默认初始化、利用循环初始化、枚举初始化) ·数组的常用操作(import java.util.Arrays)

(1)数组的排序

//对指定数组进行排序,排序结果存放到原数组中 Public static void sort(X[ ] a)

//对指定数组的区间进行排序,fromindex与toindex用来指定区间 Public static void sort(X[ ] a,int fromindex,int toindex) (2)查找指定元素

Public static int binarysearch(X[ ] a,X key) (3)比较数组中的元素

Int[] pra1 = {}; Int[] pra2 = {};

Boolean flag = Arrays.equals(pra1,pra2);

System.out.prinfln(“结果:”+((flag)? ”相等”:”不相等”);

12、命名规范

·字母包括大小写字母、“_”、“$”,以及一些希腊字母 ·数字包括0~9

·“+”等特殊符号不能出现在标识符中,空格也不行。 ·标识符中的字符大小写敏感,而长度没有限制 ·不能将java中的关键字用作标识符名。 13、注释

·单行注释(//)

·区域注释(/* */) ·文档注释(/** */)

参数 () (string) (int,char) (int,int) () 返回值 Int String String String String 第三章

1、面向对象程序概述

·对象、类、继承、接口、封装(可能会考论述题) ·优点(可重用性、可扩展性、易于管理和维护) 2、java面向对象的特性

·类的所有信息都被存放到一个单独的文件中(后缀为.class)

·在java中,不允许定义多继承、即一个子类,只能有一个父类,不能有多个。但是一个类可以实现多个接口。 3、类的定义和对象的创建

·类之间的关系(“USES-A”、“HAS-A”、“IS-A”) HAS-A关系实例 Public class car{

Private tyre t = new tyre();//汽车对象拥有了轮胎对象,所以就能拥有轮胎对象中一切对象和方法;

Public tyre gettyreinfo() {

Return t; } }

Public class tyre{

}

4、构造函数

·构造函数的特点

(1)具有和它所在的类完全一样的名字 (2)构造函数没有返回类型

(3)构造函数的主要作用就是完成对象的初始化工作。 (4)构造方法不能由编程人员调用,而要系统调用

(5)一个类可以定义多个构造方法,如果在定义类的时候没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器。

(6)构造方法可以重载,以参数的个数、类型或排列顺序区分 比如用初始化函数初始化汽车的各项参数 Public class car{

Private string color; Private string brand; //无参构造函数 Pubic car(){

This.color = “黑色”; This.brand = “奥迪”; }

//有参构造函数

Pubic car(string co,string br){

This.color = co; This.brand = brand;

}

Public string getcolor(){

Return this.color; }

Public string getbrand(){

Return this.brand; } }

5、方法

(1)方法的定义

返回值类型 方法名(参数序列) {

方法体 }

(2)方法体中的return

·代表已经完成方法功能,可以离开此方法返回

·如果该方法产生一个值需要返回,则这个值需要放在return语句的后面 (3)返回值类型

·可以再具有对象引用返回类型的方法中返回null,但是基本数据类型作为返回类型时,不能返回null;

·对象也可以作为返回值,比如数组

·在具有基本数据返回类型的方法内,可以返回任何值,只要该值能够自动转换为返回值类型。比如返回值类型为double,返回整数4是可以的,但是如果是返回值类型是int,返回12.34则报错

·void没有任何返回值

·在具有对象引用返回类型的方法内,可以返回任何类型的对象引用,只要返回的引用于返回类型相同或可以自动转换为返回类型即可。 (4)方法重载

·重载的方法参数列表各不相同;

·重载方法的返回值类型、访问限制没有特别的要求,可以相同也可以不同。

(5)重载方法的匹配(由参数序列决定调用哪个方法)

如 public int add(int i,int j){

System.out.print(“两个int参数的方法被调用”); Return i + j; }

public int add(double i,double j){

System.out.print(“两个double参数的方法被调用”); Return i + j; }

A.add(7,8);//这里7和8 都是int型的参数,则很显然调用第一个方法;

A.add(5,3.8);//这里5是int型的,3.8是double型的,没有直接匹配的方法,但是int型能够自动提升为double型的,所以调用的是第二个方法(PS只能进行类型的提升,无法下降)

(6)对于引用性参数,当调用重载的方法时,若与某个重载方法的参数完全匹配,则调用该方法;若没有完全匹配的方法,则寻找重载方法的参数类型中哪个最能兼容传递的参数。

6、静态函数(用static关键字把成员声明为静态成员)

(1)静态变量叫类变量,非静态变量叫做实例变量;静态方法叫类方法,非静态方法叫做实例方法。

Public class staticdemo{

Public static string s = “我是静态变量”; Public static void printinfo() {

System.out.println(“我是静态方法”); } }

Public class sample {

Pubic static void main(string args[]){

//调用staticdemo中的prinfinfo方法和s变量时,不需要创建新的对象,直接访问即可

Staticdemo.printinfo();

System.out.println(staticdemo.s); } }

(2)静态成员的访问

Public class sample{

Static int staticVar = 13;

Public static void main(string args[]) {

//直接用名称staticVar调用了静态成员变量staticVar,在静态成员所在的同一个类中是可以的。在其他类中调用要使用类名,或相应的对象引用,受访问限制级别的约束。

Sample.staticVar = 16;

System.out.println(staticVar); } }

①静态方法访问非静态成员

Public class sample {

Int staticVar = 13;

Public static void main(string args[]){

System.out.println(“数值为:”+staticVar); } }

编译报错。因为main函数本身就是一个静态方法,而staticVar是非静态成员。由于静态成员不依赖于该类的任何对象,而非静态成员属于对象。所以

静态方法将不知道关于其所属类对象的信息,即静态方法不能访问非静态成员。

同样的,在静态方法中是不能使用this预定义对象引用的。 ②非静态方法访问静态成员

Public class sample{

Static int s = 100;

//在非静态方法中调用静态成员s Public void showstatic() {

System.out.println(“非静态方法成功调用静态成员s,其值为:” +sample.s); }

Public static void main(string args[]){

Sanple sa = new sample; Sa.showstatic(); } }

7、包(package <包名>)

(1)每个源文件中最多有一句package语句。 (2)类的导入

Import <包名>.* Import<包名>.类名

(3)如果两个包中有同名类,但只用到其中一个及其他不同名的类

例如,java.util 和java.sql包中都有名称为date的类,但只用到前者包中的date类。

可以使用import java.util.*

Import java.util.date 解决

(4)两个包中有同名类,但是都要使用

这时候真正的解决办法是在使用同名类的时候使用全称类名 Java.util.date d1 = new java.util.date(); Java.sql.date d2 = new java.sql.date();

8、成员的访问控制

公共类型(public)

当一个成员被声明为public时,所有其他类,无论该类属于哪个包,均能访问该成员。

私有类型(private)

标志为私有类型的成员后,其不能被该成员所在类之外的任何类中的代码访问。

第四章

1、方法的继承与覆盖

(1)方法的继承

Public class father {

Public void show() {

System.out.println(“该类为public类型,方法被成功继承”); }

}

Public class son extends father{

Pubic void getshow() {

System.out.print(“子类内代码调用结果:”);

This.show();//子类继承了父类的show方法。输出到屏幕上就是

子类内代码调用结果:该类为public类型,方法被成功继承 } }

Public class sample{

Public static void main(string args[]){

Son a = new son();

System.out.print(“子类外代码调用结果:”); S.show(); //对象s调用父类中show方法 S.getshow(); } }

(2)方法的覆盖

Class vehicle {

Public void startup() {

System.out.println(“一般交通工具的启动方法”); } }

Class car extends vehicle {

Public void startup() {

System.out.println(“轿车的启动方法”); } }

Public class sample{

Public static void main(string args[]){

Car c = new car();

System.out.println(“实际调用的方法:”); C.startup(); } }

输出结果为

实际调用的方法:轿车的启动方法

如果子类重写了父类的方法,则调用子类重写的方法,否则调用父类的方法。

如果

Public static void main(string args[]){

Vehicle v= new car();

System.out.println(“实际调用的方法:”); v.startup(); }

因为子类和父类中都有show方法,所以编译能够通过(若只是子类中有的方法,则报错。)

这种情况下,结果和之前的一样。说明了当父类的引用指向子类对象时,若访问被重写的方法,则将访问在子类中被重写的方法。

若构成重写,需要遵循以下如下规则: ·返回类型若为基本数据类型,则返回类型必须完全相同;若为对象引用类型,那么必须与被重写方法返回类型相同。

·访问级别的限制一定不能比被覆盖方法的限制窄,可以比被重写方法的限制宽

·不能重写被表示为final方法

·覆盖是基于继承的,如果不能继承一个方法,则不能构成重写。

(3)this与super

This常用来引用当前对象,而super常用来引用父类对象。 ·this

Public class sample {

Private string s = “haha”; Public string getstring() {

String s = “kaka”;

System.out.println(“方法中:”+s); Return this.s; }

Public static void main(string args[]){

Sample g = new sample();

System.out.println(g.getstring());

} }

输出结果: 方法中:kaka Haha Getstring()中声明变量s,并输出s的内容,而利用this引用当前类中的private变量作为方法的返回值。运行后,结果显示输出该类的私有变量s中的内容,而不是getstring()方法中的s变量。

引用当前类对象之外,this更多地用来将当前对象的引用作为参数传递给方法或者对象。

·super

用来引用父类的成员,包含父类的构造函数、属性以及方法。

Public class person{

Public string info = “我是父类”;

Public static void printmessage(string s) {

System.out.println(s); }

Public person(){

Printmessage(“A person.”); }

Public person (string name) {

Printmessage(“A person name is:” + name); } }

Public class sample extends person{ Public sample() { Super();

Printmessage(“相关信息:”); System.out.println(super.info); }

Public sample(string name) { Super(name); Printmessage(“名字:”+name); }

Public sample(string name,int age) { This(name); Printmessage(“年龄:”+age); }

Public static void main(string[] args){ Sample cn = new sample(); Cn = new sample(“张三”);

Cn = new sample(“张三”,22); } }

运行结果如下: A person 相关信息: 我是父类

A person name is:张三 名字:张三

A person name is:张三 名字:张三 年龄:22

Sample继承父类之后,用super关键字引用了父类中的构造函数。

(4)强制类型转换(继承过程中发生引用类型的转换) 引用均能指向自身类型的对象实例;

父类的引用变量还可以指向由其派生出的直接或间接子类的对象。 如:vehicle v = new car(); v = new truck(); car c = new truck(); 由父类派生出来的子类,具有了父类的特征和行为,可以将子类对象看做父类对象。 Pubic class car {

String aMember = “我是汽车类的成员变量”; }

Public class truck extends car{

String aMember = “我是卡车类的成员变量,汽车类也有”; }

Public class sample{ Public static void main(string[] args) { Car c = new truck(); System.out.println(“访问的成员是:”+c.aMember); } } 运行结果

访问的成员是:我是汽车类的成员变量

可以看到的是,即使Car c = new truck(); 但是打印的还是父类的成员变量。这是因为在运行时,对于成员变量的访问,系统接收的是引用类型,引用哪个类的,系统就访问哪个类的成员。

所以我们可以将System.out.println(“访问的成员是:”+c.aMember);改为 System.out.println(“访问的成员是:”+((truck)c).aMember); 然后运行结果就可以变为

访问的成员是:我是卡车类的成员变量,汽车类也有 2、终止继承:final类和final方法

当关键字final用来修饰时,其含义是该类不能再派生子类,其他任何类都不能继承用final修饰的类。

用final修饰的方法 Public class father{

Public final void show() { System.out,println(“final方法可以被继承但是无法被重写”); }

Public class son extends father{ }

Public class sample{

Public static void main(string[] args) Son s = new son(); S.show();

}

运行结果是

final方法可以被继承但是无法被重写 如果在子类中修改show方法,编译报错

3、抽象类(用abstract关键字声明抽象类和抽象方法)

·抽象类永远不能实例化,其唯一的用途就是用于继承扩展。

·不能把一个类同时标志位abstract和final。前者的类表示很多类的事物总称,可以再分子类,后者的类一定不能再分子类。

·抽象的方法。只有方法名,没有方法体。 抽象类中可以有非抽象的方法。只要有抽象方法,那么一定就是抽象类。 当某类继承自抽象类时,如果其本身不是抽象类,则必须实现所继承抽象类中的抽象方法。抽象类的第一个非抽象子类必须实现其父类所有的抽象方法,其中也包括父类继承的抽象方法。

第五章

1、接口的使用

Public interface employee {}

Public interface manager {}

Public class person implements employee,manager {}

2、接口与抽象类的区别(P149,太多了,自己看去吧„„) 3、内部类

·内部类是指在一个外部类的内部在定义一个类。内部类作为外部类的一个成员,依附于外部类而存在。

·内部类可以为静态的,可以用protected和private修饰。

·为什么要使用内部类?(每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个接口的实现,对于内部类都没有印象。内部类提供可以继承多个具体的或抽象的类。内部类有效地实现了“多重继承”)。

·内部类分为成员内部类(作为外部类的一个成员存在,与外部类的属性、方法并列)、局部内部类(在方法中定义的内部类,能访问当前代码块内的常量,和此外部类的所有成员)、匿名内部类(没有名字的局部内部类)、静态内部类(不需要内部类对象与其外围类对象之间有联系)。

·定义内部类的基本方法 Class<外部类名> {

[<成员访问限制修饰符号>] [static] class <内部类名> {

//内部类的成员 }

//外部类的其他成员 }

第六章

1、系统输入流

Import java.io.* Public class sample {

Public static void main(string[] args) {

Try { //将System.in返回的InputStream字节流转换成字符流 InputStreamReader is = new InputStreamReader(System.in); //将转换后的字符流封装成BufferedReader流 BufferedReader br = new BufferedReader(is); //定义字符串引用 String s = null;

System.out.print(“请输入一行内容(直接回车退出程序)>”); //测试输入的内容是否为空

While((s = br.readline()) != null && s.length() != 0) { //若不为空则显示输入的内容,并进入下一次输入 System.out.println(“您输入的内容为:”+s); System.out.println(“请输入一行内容(直接回车退出程序)”); } }

Catch(IOException e) {

e.printStackTrace(); } } }

2、文件操作

Import java.util.*; Import java.io.*; Public class sample{ Try {

//创建一个表示不存在子目录的File对象 File fp = new File(“MyFile”); //创建该目录 fp.mkdir();

//创建一个描述MyFile目录下的文件的FIle对象 File fc = new File(fp,”childfile.txt”); //创建该对象

fc.createNewFile();

//创建输出流

FileWriter fo = new FileWriter(fc);

BufferedWriter bw = new BufferedWriter(fo); PrintWriter pw = new PrintWriter(bw); //向文本中写入5行文本 For(int i = 0;i<5;i++) {

Pw.println(“[”+i+”]Hello World!!!你好,本文由程序创建!!!”); }

pw.close();

System.out.println(“恭喜你,目录以及文件成功建立,数据成功写入!”); }

Catch(Exception e) {

e.printStackTrace(); } }

3、异常处理

·异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。 ·Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。

·基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;

·可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。

·finally语句块会在方法执行return之前执行 一般结构如下: try{

程序代码

}catch(异常类型1 异常的变量名1){ 程序代码

}catch(异常类型2 异常的变量名2){ 程序代码 }finally{ 程序代码

} PS

·catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。

·catch的类型是Java语言中定义的或者程序员自己定义的,表示代码抛出异常的类型,异常的变量名表示抛出异常的对象的引用,如果catch捕获并匹配上了该异常,那么就可以直接用这个异常变量名,此时该异常变量名指向所匹配的异常,并且在catch代码块中可以直接引用。

4、如何定义和使用异常类

1、使用已有的异常类,假如为IOException、SQLException。 try{ 程序代码

}catch(IOException ioe){ 程序代码

}catch(SQLException sqle){ 程序代码 }finally{ 程序代码 }

2、自定义异常类

创建Exception或者RuntimeException的子类即可得到一个自定义的异常类。例如:

public class MyException extends Exception{ public MyException(){}

public MyException(String smg){ super(smg); }

}

3、使用自定义的异常

用throws声明方法可能抛出自定义的异常,并用throw语句在适当的地方抛出自定义的异常。例如: 在某种条件抛出异常

public void test1() throws MyException{ ... if(....){

throw new MyException(); }

}

将异常转型(也叫转译),使得异常更易读易于理解

public void test2() throws MyException{ ... try{ ...

}catch(SQLException e){ ...

throw new MyException(); } }

第七章

1、Swing和AWT之间的关系(P210) 2、事件处理

①事件源是指触发事件的空间,如按钮、窗体、列表、表格等。 ②监听器则是指实现了专门的监听接口的类的对象 ③监听器与事件源之间是“多对多”的关系。 P213 事件处理的过程

创建图形用户界面

Import javax.swing.JFrame; Import javax.swing.JLable;

Public class sample extends JFrame{ Public sample(){}

Public sample(boolean b) {

//向窗体添加一个标签

This.add(new JLabel(“这是一个窗体,演示了JFrame类的基本功能”)); //设置窗体标题

This.settitle(“自定义窗口”); //设置窗体的大小

This.setbounds(80,80,480,180);

//根据接受的boolean设置窗体是否可以调整大小 this.setResizaable(b); //设置窗体的可见性 this.setVisible(true);

}

Public static void main(string[] args) {

//创建对象,并传递false值使得窗体不能调整大小 New sample(false); } } 布局管理

采用一定的策略来管理额容器中各个控件的大小,位置和属性。

1、流布局(FlowLayout)

按照控件添加的顺序,依次将控件从左至右,从上至下进行摆放,若一行不能放完则自动转至下一行。

2、网格布局(GridLayout)

尽量依照给定的行数和列数排列所有的控件,添加到该布局容器中的控件都将自动调整为相同尺寸,其填充的规则是尽量使现有控件形成矩形。

因篇幅问题不能全部显示,请点此查看更多更全内容