java考试宝典.docx
- 文档编号:18584858
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:25
- 大小:386.30KB
java考试宝典.docx
《java考试宝典.docx》由会员分享,可在线阅读,更多相关《java考试宝典.docx(25页珍藏版)》请在冰点文库上搜索。
java考试宝典
1.在一个独立的原始程序中,只能有一个public类,却可以有许多non-public类。
2.在一个Java程序中有且只能有一个main()方法
由于Java程序是由类所组成,所以在完整的Java程序里,必须且至少有一个类。
3.publicstaticvoidmain(Stringargs[])//main()method,主程序开始
{
…
}
public代表main()公有的method;
static表示main()在没有创建类对象的情况下,仍然可以被运行;
void则表示main()方法没有返回值。
Main后的括号()中的参数Stringargs[]表示运行该程序时所需要的参数
4.·单行注释//
·多行注释/**/
·文档注释/**用这种方法注释的内容会被解释成程序的正式文档,并能包含进如javadoc之类的工具生成的文档里,用以说明该程序的层次结构及其方法。
*/
5.标识符:
可由任意顺序的大小写字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,不能是Java中的保留关键字。
6.变量的设置有以下三种方法:
在声明的时候设置、声明后再设置、在程序中的任何位置声明并设置。
7.
基本数据类型字节
long(长整数)8
int(整数)4
short(短整数)2
byte(位)1
char()1
boolean()1
float()4
double()8
当最大值加上1时,结果反而变成表示范围中最小的值;当最大值加上2时,结果变成表示范围中次小的值,这就是数据类型的溢出。
8.使用浮点型数值时,默认的类型是double,在数值后面可加上D或是d,作为double类型的标识。
在Java中,D或d是可有可无的。
在数据后面加上F或是f,则作为float类型的识别。
若是没有加上,Java就会将该数据视为double类型,而在编译时就会发生错误,错误提示会告诉设计者可能会失去精确度。
9.自动类型转换【扩大转换】条件:
放大精度
1)转换前的数据类型与转换后的类型兼容。
【【当两个数中有一个为浮点数时,其运算的结果会直接转换为浮点数。
当表达式中变量的类型不同时,Java会自动以较小的表示范围转换成较大的表示范围后,再作运算。
也就是说,假设有一个整数和双精度浮点数作运算时,Java会把整数转换成双精度浮点数后再作运算,运算结果也会变成双精度浮点数。
】】
2)转换后的数据类型的表示范围比转换前的类型大。
强制类型转换【缩小转换】:
失去精度
10.一元运算符:
~a[a的补码]
-a[a取反]
11.a++会先执行整个语句后再将a的值加1;
++b则先把b的值加1后,再执行整个语句。
12.运算符的优先级
a/=b--//相当于计算a=a/b之后,再计算b-
13.表达式的类型转换
当Java发现程序的表达式中有类型不相符的情况时,会依据下列的规则来处理类型的转换。
1)占用字节较少的类型转换成占用字节较多的类型。
2)字符类型会转换成int类型。
3)int类型会转换成float类型。
4)表达式中若某个操作数的类型为double,则另一个操作数字也会转换成double类型。
5)布尔类型不能转换成其它类型。
14.一般来说程序的结构包含有下面三种:
1)顺序结构
2)选择结构:
switch(表达式){//switch语句里的选择值只能是字符或是常量
case选择值1:
语句主体1;break;//break是跳出语句
case选择值2:
语句主体2;
break;
…….
case选择值n:
语句主体n;
break;
default:
语句主体;//若是没有定义default该执行的语句,则什么也不会执行,直接离开switch语句。
}
3)循环结构
15.break语句可以强迫程序跳离循环,当程序执行到break语句时,即会离开循环,继续执行循环外的下一个语句,如果break语句出现在嵌套循环中的内层循环,则break语句只会跳离当前层的循环。
以下图的for循环为例,在循环主体中有break语句时,当程序执行到break,即会离开循环主体,而继续执行循环外层的语句。
continue语句可以强迫程序跳到循环的起始处,当程序运行到continue语句时,即会停止运行剩余的循环主体,而是回到循环的开始处继续运行。
以下图的for循环为例,在循环主体中有continue语句,当程序执行到continue,即会回到循环的起点,继续执行循环主体的部分语句。
当判断条件成立时,break语句与continue语句会有不同的执行方式。
Break语句不管情况如何,先离开循环再说;而continue语句则不再执行此次循环的剩余语句,直接回到循环的起始处。
16.在循环里也可以声明变量,但所声明的变量只是局部变量,只要跳出循环,这个变量便不能再使用。
17.一维数组
两个步骤:
(1)声明数组;
(2)分配内存给该数组。
例:
intscore[];//声明
score=newint[3];//分配空间
System.out.println("\n数组长度是:
"+score.length);//输出数组长度
二维数组
intscore[][]=newint[4][3];//声明整型数组score,同时为其开辟一块内存空间
在二维数组中,若是想取得整个数组的行数,或者是某行元素的个数时,可利用“.length”来获取
num.length;//计算数组num的行数,其值为3
num[0].length//计算数组num的第1行元素的个数,其值为4
Java允许二维数组中每行的元素个数均不相同。
18.面向对象的程序设计有三个主要特征,如下:
1.封装性
2.继承性
3.多态性
1)封装性:
a.把对象的属性和行为看成一个密不可分的整体,将这两者封装在一个不可分割的独立单位(即对象)中。
b.把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知晓;或只允许使用对象的功能,而尽可能隐蔽对象的功能实现细节。
2)继承性
3)多态性[允许程序中出现重名现象]
a.方法重载:
在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。
b.成员覆盖:
子类与父类允许具有相同的变量名称,但数据类型不同,允许具有相同的方法名称,但完成的功能不同。
19.声明类Person时,类名中单词的首字母最好是大写的。
创建类:
Personp;
P=newperson();
或者Personp=newPerson();//对象只有在实例化之后才能被使用,而实例化对象的关键字就是new。
20.访问属性:
对象名称.属性名
访问方法:
对象名称.方法名()
例:
Personp;
p.name=“张三”;
p.age=25;
p.talk();
21.【封装类中的属性或方法】
“封装”(encapsulation):
是把属性和方法包装在一个类内以限定成员的访问,以起到保护数据的作用。
封装属性:
private属性类型属性名私有成员(privatemember)可限定类中的属性,被限制成私有的属性仅能供同一类内的方法所访问。
封装方法:
private方法返回类型方法名称(参数)
在类的外部不能用对象去调用private声明的属性或方法。
类的外部可访问到类内部的公有成员(publicmember)。
在类内部调用:
在一个java程序中是可以通过对象去调用类中的方法的,当然类的内部也能互相调用各自的方法
垃圾对象:
就是指程序中不再使用的对象引用
匿名对象:
只使用一次的对象,即没有任何一个具体的对象名称引用它
例:
newPerson("张三",25);
22.构造方法:
构造方法可视为一种特殊的方法,它的主要作用是为所创建的对象赋初值。
1)它具有与类名相同的名称【构造方法的名称必须与其所属的类的类名称相同,且不能有返回值。
】
2)它没有返回值
构造方法则是在创建对象时,便自动调用,并执行构造方法的内容。
因此,构造方法无需在程序中直接调用,而是在对象产生时自动执行。
如果在程序中没有明确声明一构造方法的话,系统会自动为类加入一个无参的且什么都不做的构造方法。
类似于下面代码:
publicPerson()
{}
所以,之前所使用的程序虽然没有明确的声明构造方法,也是可以正常运行的。
23.构造方法的重载:
只要构造方法的参数个数不同,或是类型不同,便可定义多个名称相同的构造方法。
在java程序中只要明确的声明了构造方法,则默认的构造方法将不会被自动生成。
24.对象的比较:
“==”运算符与equals()方法
a.用的“==”比较,比较的是内存地址值
b.“equals”是比较内容的
Stringstr1=newString("java");
Stringstr2=newString("java");
(str1.equals(str2))==>str1equalsstr2
25.两种String对象的声明方式的不同在哪?
Stringstr1=newString("java");
Stringstr2="java";
String对象的内容一旦声明则不能轻易改变。
如果想改变一个String对象的值,则第一步要做的是先将原有的String引用断开,之后再开辟新的内存空间,而且如果用new关键字开辟String对象的内存空间的话,则实际上就开辟了两个内存空间
26.this关键字
1)this表示当前对象:
this.name=name;
2)如果在程序中想用某一构造方法调用另一构造方法,可以用this来实现,具体的调用形式如下:
this()
构造方法是在实例化一对象时被自动调用的,也就是说在类中的所有方法里,只有构造方法是被优先调用的,所以使用this调用构造方法必须也只能放在构造方法的第一行.
27.static关键字
静态变量:
声明的属性是所有对象共享的。
静态方法:
既可以在声明变量时使用,也可以用其来声明方法,用它声明的方法有时也被称为“类方法”。
如果在类中声明了一static类型的属性,则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。
但用static类型的属性调用非static类型的属性时,则会出现错误。
28.构造方法的私有:
构造方法虽然被私有了,但并不一定是说此类不能产生实例化对象,只是产生这个实例化对象的位置有所变化,即只能在本类中产生实例化对象。
29.对象数组的使用
例:
创建三个Person类类型的数组元素
法一:
Personp[]=newPerson[3];
P[0]=newPerson();
P[1]=newPerson();
P[2]=newPerson();
法二:
【动态初始化】for(i=0;i
{
P[i]=newPerson();
}
法三:
【静态初始化】Personp[]={newPerson(),newPerson(),newPerson()}//采用静态方式初始化对象数组
利用父类的变量数组来访问子类的内容的较好的做法是:
(1)先创建父类的变量数组;
(2)利用数组元素创建子类的对象,并以它来访问子类的内容。
30.内部类:
在类内部也可以定义另一个类
内部类可声明成public或private。
当内部类声明成public或private时,对其访问的限制与成员变量和成员方法完全相同。
内部类Inner可以直接调用外部类Outer中的score属性
外部类是无法找到内部类中所声明的属性,而内部类则可以访问外部类的属性。
用static可以声明属性或方法,而用static也可以声明内部类,用static声明的内部类则变成外部类,但是用static声明的内部类不能访问非static的外部类属性。
31.
在类外部引用内部类:
内部类也可以通过创建对象从外部类之外被调用,只要将内部类声明为public即可。
在方法中定义内部类:
内部类不仅可以在类中定义,也可以在方法中定义内部类。
final定义的局部变量:
相当于是一个常量,它的生命周期超出方法运行的生命周期
31.继承
在java中只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类,但是java中却允许多层继承。
错误
正确
子类对象在实例化时会默认先去调用父类中的无参构造方法,之后再调用本类中的相应构造方法。
如果程序中指定了构造方法,则默认构造方法不会再生成。
只要在父类中增加一个什么都不做的构造方法,这一问题就可以解决了
32.super:
主要的功能是完成子类调用父类中的内容,也就是调用父类中的属性或方法。
super.父类中的属性;
super.父类中的方法();
用super调用父类中的构造方法,只能放在程序的第一行,并且this()与super()只可使用其中一条。
33.private:
只要父类中的属性被“private”声明的话,那么子类就再也无法访问到它了。
实际上并不是这样的,在父类中加入了private关键字修饰,其目的只是相当于对子类隐藏了此属性,子类无法去显式的调用这些属性,但是却可以隐式地去调用。
【子类在继承父类时,会继承父类中的全部的属性与方法。
】
34.复写:
它是在子类当中,定义名称、参数个数与类型均与父类相同的方法,用以复写父类里的方法;
重载:
它是指在相同类内,定义名称相同,但参数个数或类型不同的方法,因此Java便可依据参数的个数或类型调用相应的方法。
注意:
子类复写父类中的方法时,被子类复写的方法不能拥有比父类中更严格的访问权限。
public权限要高于default权限。
原有的类称为基类或父类,而新的类则称为派生类或子类
35.this与super比较
36.抽象类
·抽象类和抽象方法都必须用abstract关键字来修饰。
·抽象类不能被实例化,也就是不能用new关键字去产生对象。
·抽象方法只需声明,而不需实现。
·含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。
在抽象类定义的语法中,方法的定义可分为两种:
一种是一般的方法;另一种是“抽象方法”,它是以abstract关键字为开头的方法,此方法只声明了返回值的数据类型、方法名称与所需的参数,但没有定义方法体。
在抽象类中,也可以拥有构造方法,但是这些构造方法必须在子类中被调用。
37.Object类:
它是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类就默认继承Object类。
Object类是Java类层中的最高层类,是所有类的超类。
换句话说,Java中任何一个类都是它的子类。
由于所有的类都是由Object类衍生出来的,所以Oject类中的方法适用于所有类。
38.final关键字:
1)final标记的类不能被继承。
【最终类没有子类】
2)final标记的方法不能被子类复写。
3)final标记的变量(成员变量或局部变量)即为常量,只能赋值一次。
39.接口
1)接口里的数据成员必须初始化,且数据成员均为常量。
2)接口里的方法必须全部声明为abstract,也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法”。
接口与一般类一样,本身也具有数据成员与方法,但数据成员一定要赋初值,且此值将不能再更改,方法也必须是“抽象方法”。
也正因为方法必须是抽象方法,而没有一般的方法,抽象方法声明的关键字abstract是可以省略的。
相同的情况也发生在数据成员身上,因数据成员必须赋初值,且此值不能再被更改,所以声明数据成员的关键字final也可省略。
利用接口打造新的类的过程,称之为接口的实现(implementation)。
一个接口可以同时继承多个接口,也就是同时继承了多个接口的抽象方法与常量。
40.对象的多态性
Java对象的多态性分为:
向上转型(自动)、向下转型(强制)。
41.复写Object类中的equals()method可用来比较两个类的对象是否相等。
42.通过instanceof关键字,可以判断对象属于那个类。
43.异常处理
常见异常:
1、算术异常(ArithmeticException)。
2、没有给对象开辟内存空间时会出现空指针异常(NullPointerException)。
3、找不到文件异常(FileNotFoundException)。
4、数组下标超出异常(ArrayIndexOutOfBoundsException)
所有的异常都是以类的类型存在,除了内置的异常类之外,Java也可以自定义的异常类。
如果没有编写相应的处理异常的程序代码,则Java的默认异常处理机制会先抛出异常、然后停止程序运行。
异常的处理:
1)try程序块若是有异常发生时,程序的运行便中断,并抛出“异常类所产生的对象”。
2)抛出的对象如果属于catch()括号内欲捕获的异常类,则catch会捕捉此异常,然后进到catch的块里继续运行。
3)无论try程序块是否有捕捉到异常,或者捕捉到的异常是否与catch()括号里的异常相同,最后一定会运行finally块里的程序代码。
finally的程序代码块运行结束后,程序再回到try-catch-finally块之后继续执行。
finally块是可以省略的。
如果省略了finally块不写,则在catch()块运行结束后,程序跳到try-cath块之后继续执行。
通过异常的机制,即使程序运行时发生问题,只要能捕捉到异常,程序便能顺利地运行到最后,且还能适时的加入对错误信息的提示。
Error类专门用来处理严重影响程序运行的错误,可是通常程序设计者不会设计程序代码去捕捉这种错误,其原因在于即使捕捉到它,也无法给予适当的处理,如JAVA虚拟机出错就属于一种Error。
不同于Error类,Exception类包含了一般性的异常,这些异常通常在捕捉到之后便可做妥善的处理,以确保程序继续运行。
RunntimeException即使不编写异常处理的程序代码,依然可以编译成功,而这种异常必须是在程序运行时才有可能发生,例如:
数组的索引值超出了范围。
IOException一定要编写异常处理的程序代码才行,它通常用来处理与输入/输出相关的操作,如文件的访问、网络的连接等。
如何抛出异常?
1)程序中抛出异常
throw异常类实例对象;
2)指定方法抛出异常
方法名称(参数…)throws异常类1,异常类2,…
在调用用throws抛出异常的方法时,可以将此异常在方法中再向上传递,而main()方法是整个程序的起点,所以如果在main()方法处如果再用throws抛出异常,则此异常就将交由JVM进行处理了。
自定义异常:
class异常名称extendsException
{
……
}
44.包及访问权限
packagepackage名称;
import语句
importpackage名称.类名称;
通过import命令,可将某个package内的整个类导入,因此后续的程序代码便不用再写上被访问package的名称了。
45.JDK中常见的包
1、java.lang—包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
在java.lang包中还有一个子包:
java.lang.reflect用于实现java类的反射机制。
2、java.awt—包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
3、javax.swing—此包用于建立图形用户界面,此包中的组件相对于java.awt包而言是轻量级组件。
4、java.applet—包含applet运行所需的一些类。
5、—包含执行与网络相关的操作的类。
6、java.io—包含能提供多种输入/输出功能的类。
7、java.util—包含一些实用工具类,如定义系统特性、与日期日历相关的函数。
46.类成员的访问控制权限
1)private访问控制符
在前面已经介绍了private访问控制符的作用,如果一个成员方法或成员变量名前使用了private访问控制符,那么这个成员只能在这个类的内部使用。
注意:
不能在方法体内声明的变量前加private修饰符。
2)默认访问控制符
如果一个成员方法或成员变量名前没有使用任何访问控制符,就称这个成员所拥有的是默认的(default)访问控制符。
默认的访问控制成员可以被这个包中的其它类访问。
如果一个子类与其父类位于不同的包中,子类也不能访问父类中的默认访问控制成员。
3)protected访问控制符
如果一个成员方法或成员变量名前使用了protected访问控制符,那么这个成员既可以被同一个包中的其它类访问,也可以被不同包中的子类访问。
4)public访问控制符
如果一个成员方法或成员变量名前使用了public访问控制符,那么这个成员可以被所有的类访问,不管访问类与被访问类是否在同一个包中。
使用jar命令可以将一个包打成一个jar文件,供用户使用。
44.Java多线程
它可以让不同的程序块一起运行,可让程序运行更为顺畅,同时也可达到多任务处理的目的。
1)进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。
2)线程是比进程更小的执行单位,线程是进程内部单一的一个顺序控制流。
所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行,形成多条执行线索。
一个进程可能包含了多个同时执行的线程。
线程和进程的主要差别体现在以下两个方面:
(1)同样作为基本的执行单元,线程是划分得比进程更小的执行单位。
(2)每个进程都有一段专用的内存区域。
与此相反,线程却共享内存单元(包括代码和数据),通过共享的内存单元来实现数据交换、实时通信与必要的同步操作。
实现多线程的两种方法:
(1)通过继承Thread类实现多线程
class类名称extendsThread//从Thread类扩展出子类
{
属性
方法…
修饰符run(){//复写Thread类里的run()方法
以线程处理的程序;
}
}
(2)通过实现Runnable接口实现多线程
在Java中如果一个类继承了某一个类,同时又想采用多线程技术的时,就不能用Thread类产生线程,因为Java不允许
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 考试 宝典