笔试题做题笔记

来源:互联网 发布:java创建文件夹和文件 编辑:程序博客网 时间:2024/06/04 20:02

1
单引号表示字符,为char类型
双引号表示字符串,为String类型
String不是基本类型,是final类,是引用类型
2
“向上兼容”–即:不同数据类型的数据参与运算,数据类型要强制转换,转换的方向是

(unsigned)char,(unsigned)short->int->unsigned->long->unsigned long->float->double->long,double。

char与int相加,为int类型
char为16字节,int为32字节的,在做运算的时候,char类型为先转为int类型在做相加,char与char相加时也会先转为int
3
.java源文件可以编写多个class文件,但只能有一个public class,且与.java文件同名
4
float与double的区别
doubel是32位,float是16位,double表示的范围和精度都比float大,java默认的小数声明是double,
double d=4.0,
而float则必须如下声明,
float f=4.of,
5
抽象方法类似于接口,但抽象方法可以有部分实现,接口完全只能抽象。
所谓抽象,就是说没有{ },像接口中就没有{ },
而且抽象方法前缀要用abstract声明
abstract class与interface的区别
1.两个都不能实例化,只能声明,interface是完全抽象,不能有实现类
而abstract class 可以有实现类,只要在abstract class内有抽象方法就可以了。
2. interface需要实现,要用implements,而abstract class需要继承,要用extends。
一个类可以实现多个interface,但一个类只能继承一个abstract class。
interface强调特定功能的实现,而abstract class强调所属关系。
3.interface都为public,不管加不加public都是public
6
java关键字
abstract 表明类或者成员方法具有抽象属性
assert 用来进行程序调试
boolean 基本数据类型之一,布尔类型
break 提前跳出一个块
byte 基本数据类型之一,字节类型
case 用在switch语句之中,表面其中的一个分支  
catch 用在异常处理中,用来捕捉异常
char 基本数据类型之一,字符类型
class 类
const 保留关键字,没有具体含义
continue 回到一个块的开始处
default 默认,例如,用在switch语句中,表明一个默认的分支
do 用在do-while循环结构中
double 基本数据类型之一,双精度浮点数类型
else 用在条件语句中,表明当条件不成立时的分支
enum 枚举
extend 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变
finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float 基本数据类型之一,单精度浮点数类型
for 一种循环结构的引导词
goto 保留关键字,没有具体含义
if 条件语句的引导词
implements 表明一个类实现了给定的接口
import 表明要访问指定的类或包
instanceof 用来测试一个对象是否是指定类型的实例对象
int 基本数据类型之一,整数类型
interface 接口
long 基本数据类型之一,长整数类型
native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new 用来创建新实例对象
package 包
private 一种访问控制方式:私用模式
protected 一种访问控制方式:保护模式
public 一种访问控制方式:共用模式
return 从成员方法中返回数据
short 基本数据类型之一,短整数类型
static 表明具有静态属性
strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
super 表明当前对象的父类型的引用或者父类型的构造方法
switch 分支语句结构的引导词
sychronized 表明一段代码需要同步执行
this 指向当前实例对象的引用
throw 抛出一个异常
throws 声明在当前定义的成员方法中所有需要抛出的异常
transient 声明不用序列化的成员域
try 尝试一个可能抛出异常的程序块
void 声明当前成员方法没有返回值
volatile   表明两个或者多个变量必须同步地发生变化
while   用在循环结构中   
7
final, finally, finalize的区别
final (关键字) 一个类如果被声明为final类,就不可被继承
一个类不能即被声明为final类,又被声明为abstract类
将变量或方法声明为final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为final的方法也同样只能使用,不能重载

finally 在异常处理时提供 finally 块来执行任何清除操作。

try{......}catch(Exception e){.......}finally{.......}

finalize

方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。(重点内容)
8
static

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。    被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。    用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。    static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。    static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:

类名.静态方法名(参数列表…)
类名.静态变量名
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。

1、static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

3、static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
**static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。

    特别要注意一个问题:    对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象,这一点在编程中用到很多。**

9
能使用throw抛出
error
throwable
Exception
RuntimeException、
10
&与&&,||与|的区别
&与&& ,这两个的区别在于&&第一个条件成立就,不去判断后面的条件了,&是都判断。
||与|,这两个的区别在于||第一个条件成立就,不去判断后面的条件了,|是都判断。
例如
(23!=23)&&(100/0==0)与(23!=23)&(100/0==0)
&&时判断第一个条件为false,后面的100/0==0这个条件就没有进行判断。
&时要对所有的条件进行判断,所以会对后面的条件进行判断
(23==23)||(100/0==0)(23==23)|(100/0==0)
||判断第一个条件为true,后面的条件就没有进行判断就执行了括号中的代码,而|要对所有的条件进行判断
& 表示“按位与”,这里的”位“是指二进制位(bit)。
例:十进制数字8 转化为二进制是:1000 ;数字9 转化为二进制是1001 。
则如有以下程序:

public class Test {public static void main(String[] args) {System.out.println(9 & 8);}}

输出结果应该是:8
原因:1001 & 1000 = 1000 。 计算机中一般1表示真,0表示假。最左边一位1&1=1,最右边一位1&0 = 0.

2) && 表示逻辑”与“ ,即java中的boolean值才可以存在于&&符号的左右两侧。
true && false = false ,true && true = true , 依旧是”一假必假”。
值的注意的是:&& 符号有所谓的“短路原则”,当 A && B 出现时,如果A经判断是假,那么B表达式将不会获得执行或被判断的机会。直接结果就为假。
& 和 && 相同点:
都表示“与”操作。这里的“与”和数学中的“与或非”中的“与”意义相同,都遵循“一假必假”原则。即“与”符号两边的元素只要有一个为假,”与”操作执行后的结果就为假。
11
在Servlet的生命周期中,容器只调用一次的方法是
init()和destroy(),初始化和销毁
Servlet生命周期分为三个阶段:
  1,初始化阶段 调用init()方法
  2,响应客户请求阶段  调用service()方法
  3,终止阶段  调用destroy()方法
12
JSP指令元素
a) page指令
语法: <%@ page attributeName=”attribuerValue”…%>
作用: 利用page指令中的属性可以和容器进行通信,这些属性的设置对整个jsp都有影响。
b) include指令
语法: <%@ include file=”url”%>,称为静态导入(静态包含)
作用: 在一个页面中导入另一个页面的内容(这些内容一般不会有变化,如公司的标题和版权等信息)。
特点: 在jsp翻译成servlet后就将被导入的页面内容嵌入到servlet中。
导入时间发生在翻译阶段。
被导入的资源: html、xml、jsp等
优点: 执行效率高
缺点: 当被导入页面的内容发生变化,那么jsp必须要重新被翻译。
c) taglib指令
<%@ taglib uri=”” prefix=”“%>
指定在jsp中要使用的标签库描述文件(*.tld)的路径
12
表单标记
<FORM>
<INPUT>
Text, Radio,Checkbox, Password, Submit/Reset, Image, File, Hidden, Button。
<SELECT>
<OPTION>
<TEXTAREA>
13
javax.servlet包中包含了7个接口,3个类和2个异常类,它们分别是:
接口:

RequestDispatcher,Servlet,ServletConfig,ServletContext,ServletRequest,ServletResponse和SingleThreadModel

类:

GenericServlet,ServletInputStream和ServletOutputStream

异常类:

ServletException和UnavailableException

14
CallableStatemet调用存储过程
15
do while 循环至少会执行一次,先do后判断是否符合while 如果为false 则循环终止,如果true,继续执行
16
类名与构造函数可以同名,但是构造函数没有返回值
17
java代码经过编译后会产生byte code
18
java是由c++发展而来的
19
abstract 不可以修饰字段,abstract既然为抽象方法,就没有实现,所以就不存在body,也不会存在{}
20
形参与实参
实参:为常数,表达式,变量,函数 ,是具有确定的值的
形参:为空白或占位符,可以看做方法中的局部变量(local variable),传递的是对对象的引用,而不是对象本身
实参事又来传递值给形参,形参是接收实参的值的
形参是定义方法的时候,该方法所携带的参数
实参是你在调用方法的时候,给这个方法传递的参数值
21
什么是实例方法
例如有一个教师类,教师类里有一个讲课的方法,有一个教师小明,小明也有讲课的方法,,那么小明讲课的方法就称为一个教师的实例方法
22
java程序的种类
applet application servlet
java程序的种类有:
1、内嵌于web文件中,由浏览器来观看的Applet 2、可独立运行的Application 3、服务器端的Servlet
23
2.下列说法正 确的有()
A. 环境变量可在编译source code时指定
B.在编译程序时,所能指定的环境变量不包括 class path
C. javac一次可同时编译数个Java源文件
D. javac.exe能指定编译结果要置于哪个目录(directory)
答案:BCD
24
java的命名规则
ava 变量命名规则:
1. 大小写有别,例如 a 和 A是两个变量
2. 长度任意
3. 可以任何字母开始,另外还可以以”_”和”""”是很多代码生成器用的,人工写出来的代码不鼓励"_" "$"
4. 除了第一个字符,后面可以跟任何字母,数字,_ 和$
new 是关键字不行。 不能以数字开头。 不用有“.”这种符号
25
数组 不是原生类,数组的大小需要指定 ,指定后初始化多大就多大,不能随意更改
26
6.下列正确的有()
A. call by value不会改变实际参数的数值 B. call by reference能改变实际参数的参考地址
C. call by reference不能改变实际参数的参考地址 D. call by reference能改变实际参数的内容
答案:ACD
27
7.下列说法 错误的有()
A.在类方法中可 用this来调用本类的类方法
B.在类方法中调用本类的类方法时可直接调用 C.在类方法中只能调用本类中的类方法
D.在类方法中绝对不能调用实例方法
答案:CD
解释:
28
1.Java程序中的起始类名称必须与存放该类的文件名相同。() 答案:正确
2.Unicode是用16位来表示 一个字的。() 答案:正确
3.原生类中的数据类型均可任意转换。() 答案:错误
29
当父类与子类都有静态代码块和构造函数的时候,执行顺序如下:
父类静态代码块 > 子类静态代码块
父类构造函数 > 子类构造函数(先有父亲,后有孩子)
如果是多级继承关系的话,最高层的父类首先执行,然后依次递减

总结:静态优先执行,父类优先执行
非静态代码块与构造函数,都与对象有关,在对象被初始化是先执行非静态代码块,在执行构造函数
注意:静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次
静态代码块!–>非静态代码块!–>默认构造方法!–>普通方法中的代码块!
非静态代码块!–>默认构造方法!–>普通方法中的代码块!

30
hashMap与hashTable的区别
可以从三个方面看出二者的区别:
从历史上:hashtable是基于陈旧的dictionary类,而hashMap是实现map接口的一个实现
从线程安全上来说:hashtable线程安全,hashmap线程不安全
从值上来说:hashMap具有key和value,允许空值作为key和value

31
Arraylist和vector的区别
arraylist线程不安全,vector线程安全
当需要增长时,arraylist是增长原来的一半,vector增长原来的一倍

32
多线程有两种实现方法,分别是继承thread类与实现runable接口
同步的实现方法有两种,分别是Synchronized,wait和notify

33
char可以储存中文字符吗?
在java中定义一个中文字符是用Unicode表示的,一个char占16个字节,所以储存一个中文没有问题

34
一个英文占一个字节
一个中文占2个字节

35
子类与父类有关继承执行顺序
new谁就调用谁
new子类先执行父类在执行子类

36
jsp的内置对象
request对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的get/post数据。
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。
Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。
config 对象的主要作用是取得服务器的配置信息。
Cookie是Web服务器保存在用户硬盘上的一段文本。
exception 对象的作用是显示异常信息,只有在包含 isErrorPage=”true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。

37
.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.

3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说
forward:高.
redirect:低.

38
任何操作都在return前执行

39
枚举型 有几个对象就会初始化几次
枚举类 所有的枚举值都是类静态常量,在初始化时会对所有的枚举值对象进行第一次初始化。

40
ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 ArrayList和LinkedList是两个集合 类,用于存储一系列的对象引用(references)。

ArrayList和LinkedList在性能上各 有优缺点,都有各自所适用的地方,总的说来可以描述如下:

  1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。

  2.在ArrayList的 中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

  3.LinkedList不 支持高效的随机元素访问。

  4.ArrayList的空 间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

  可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

41
Java反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。

42
抽象类:用abstract修饰,抽象类中可以没有抽象方法,但抽象方法肯定在抽象类中,且抽象方法定义时不能有方法体;
抽象类不可以实例化只能通过继承在子类中实现其所有的抽象方法;
抽象类如果不被继承就没有任何意义;
抽象类为子类定义了一个公共类型,封装了子类中的重复内容。
接口:
同Interface关键字定义接口,是特殊的抽象类因为类中只包含抽象方法;接口中不能定义成员变量可以定义常量;
接口是其通过其他类使用implements关键字定义实现类,一个类一旦实现接口就必须实现其中的所有抽象方法,一个类可以实现多个接口,接口名之间用逗号隔开即可;
一个接口可以通过extends关键字继承另一个接口,与此同时继承了父类中的所有方法。

0 0
原创粉丝点击