java笔试记录---20131205

final、finally、finalize的区别

①final—修饰符(关键字) 

1、类声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。

        2、将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。


②finally是异常处理语句结构的一部分,表示总是执行

try{

}catch{

}finally{

}

再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块。


finalize—方法名。当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写finalize 方法,以配置系统资源或执行其他清除。finalize 的主要目的是在不可撤消地丢弃对象之前执行清除操作。

对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。


常见JSP内置对象

request    该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息。

response  对客户的请求做出动态的响应,向客户端发送数据。

page  页面对象。

pageContext  页面上下文对象。

out   Out对象时一个输出流,用来向客户端输出数据。

session   第一个JSP页面被装载时自动创建,完成会话期管理。

当一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。

当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。

当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个Session对象,同时分配一个String类型的ID号,JSP引擎同时将这换个ID号发送到客户端,存放在Cookie中,这样Session对象,直到客户关闭浏览器后,服务器端该客户的Session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到服务器时,服务器为该客户在创建一个新的Session对象。

application  服务器启动后就产生了这个Application对象,当客户在所访问的网站的各个页面之间浏览时,Application对象都时同一个,直到服务器关闭。但是与Session对象不同的时,所有客户的Application对象都时同一个,即所有客户共享这个内置的Application对象。

config  配置对象。

exception  在处理异常的网页中可以直接访问exception隐式对象。



String和数组是否有length方法

String 的length方法

public int length()
返回此字符串的长度。长度等于字符串中 16 位 Unicode 字符数。 
数组的length属性。


String与StringBuffer

在java中有3个类来负责字符的操作。

1.Character 是进行单个字符操作的,

2.String 对一串字符进行操作。不可变类。

3.StringBuffer 也是对一串字符进行操作,但是可变类。

String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.

StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值. 
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");

字符串连接操作中StringBuffer的效率要比String高:

String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.

List/Set/Map是否能实现Collection接口?

Java的容器大致可分为两类:Collection和Map。其中Collection又分为两类:List和Set,List表示有序、重复的集合,而Set表示无序、不可重复的集合。

Map则是一种具有映射的关系集合。

list和set的用途非常广泛 list可以完全代替数组来使用

map 是独立的合集 它使用键值对的方式来储存数据 键不能有重复的 值可以用

map不像上边两种集合那个用的广泛 不过在servlet 和jsp中 map可是绝对的重中之重 页面之间传值全靠map


框架模式MVC设计的技术?

MVC即model-View-Controller(模型-视图-控制器),它是一种软件设计模式。

设计者模式有哪些?

http://baike.baidu.com/view/117325.htm 具体参照百度百科。

xml技术

控制语句

if/else、switch/case、while、do/while、for循环语句、break语句、continue语句、return语句


重载与重写

重载的定义:在同一个类中,两个或以上的方法同名,但这些方法的参数列表不相同,这称为方法的重载。

参数列表不同包括以下3种情形:

1、参数的数据类型不同;

2、参数之间的顺序不同;

3、参数的个数不同;

4、参数的名字不同,并不能用于区分不同的参数。

方法重载中,方法的返回值类型和修饰符不能作为区分方法重载的依据。

例如:public static void add(){}和private static int add(){},再同一个包中,无论是公有方法还是私有方法,都是可以访问的。

因此只有参数列表才是判断方法重载的依据。


重写

(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。

但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

方法重写又称方法覆盖。

    (2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

    (3)子类函数的访问修饰权限不能少于父类的;


&与&&

1、&和&&都可以用作逻辑与的运算符,表示逻辑与(and)

2、&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。而&会判读每个的真假。

3、&可用作位元算符。

private 修饰符修饰的成员(包括成员变量和方法),表示它们是私有类型的,对于继承此类的子类来说,父类中被private修饰符修饰修饰的成员都不会被继承,因为它们相对于外部的类都是不可见的,任何子类试图访问父类私有成员的语句都是错误的。

public修饰符修饰的成员,表示它们是公有类型的,可以被任何外部的类都是可见的,无论是否存在继承关系,是否在同一个包中,都可以访问。如果子类继承了父类。那么父类中被public修饰符修饰的成员都可以被继承。

protected修饰符修饰的成员是受保护的,protected修饰符是继承关系中最具有特色的一个访问控制修饰符。如果子类和父类不在同一个包中,那么父类中被protected修饰符修饰的成员,再子类中它们也是可见的。因此,对于子类来说,父类中被protected修饰的成员相当于public类型。

省略修饰符(即default类型)的成员。表明它们是拥有默认的权限,即当子类和父类再同一个包中,父类中省略修饰符的成员在子类中时可见的,可以被继承。如果子类和父类不在同一个包中时,父类中省略修饰符的成员不会被子类继承。


abstract 和interface的区别

抽象类和抽象方法

抽象类不呢过创建具体的实例,如果一个类中含有抽象方法,那么必须将该类声明为抽象类。

所谓抽象方法,即指某类对象的共有方法,这些方法由于在不同的类中有不同的实现内容(即方法的主体不同),因而在顶层父类中定为

为抽象方法,抽象方法没有方法体,其语法格式如下:

abstract 返回值类型 抽象方法名([参数列表]);

定义抽象方法时需要注意以下3点:

   1】抽象方法必须使用abstract关键词修饰;

   2】抽象方法不能用static、private关键词修饰

   3】抽象方法不能有方法体,抽象方法的方法体需要继承该类的子类中实现。

如是一个类中含有抽象方法,那么这个类必定是抽象类,声明一个类为抽象类。只需要在这个类声明的开始处加上abstract关键字即可,下面是抽象类的语法格式:

[访问修饰符] abstract class 抽象类名

{

类体

}


使用抽象类时需要注意以下5点:

1】抽象类必须使用abstract关键词修饰,访问修饰符可以是public或者省略,但不能为private;

2】抽象类不能被实例化,即不能使用new运算符调用抽象类的构造方法创建一个抽象类的实例;

3】抽象类可以包含0或多个抽象方法,即抽象类里面也可以没有抽象方法,但是一个类里若有抽象方法,则必须将该类声明为抽象类;

4】抽象类只能被继承,抽象类的子类必须实现抽象类里面所有的抽象方法,否则该子类也是抽象类;

5】抽象类可以含有属性、方法、构造方法、程序块等,但是抽象类的构造方法不能用于创建实例,主要用于被子类调用。


接口

接口的定义:接口是一种更加纯粹的、完全的抽象类,它要求接口中的所有方法都是抽象的,并且接口不能被实例化,它的抽象方法要求实现这个接口的类实现。

接口常常用来声明一种新的类型,一般作为继承层次中的顶层。语法格式如下:

[修饰符] interface 接口名 [extends 父接口1,父接口2...]

{

0或多个常量定义;

0或多个方法定义;

}


关于接口的定义需要注意以下几点:

1】修饰符可以是public或默认类型,如果是默认类型表示只有在同一个包下的其他接口或类才能访问该接口;

2】接口名的命名遵循标示符的命名规则。具体命名方式和类名命名相同,尽量富于实际意义;

3】接口也可以继承其他接口,也是使用extends关键字继承,而且一个接口可以同时继承1个或多个接口(即接口支持多重继承),但接口不能继承类;

4】接口中可以声明变量,但是变量都是static final类型的,即接口中变量相当于常量,声明变量时必须显示地初始化。一般来说接口中的变量默认访问控制修饰符为public。

5】接口中定义的方法都是抽象类型的,不能有方法体。接口中的方法总是用public abstract修饰(即使没有显示地制定,系统也会按照public abstract类型修饰方法);

6】接口中没有构造方法和初始化程序块。

7】一个Java源文件可以定义多个接口,像类一样,也是最多只有一个接口是public类型,并且该源文件的名称要与public类型接口的名称是一致,若源文件中的多个接口均不是public类型,则源文件的名称可以与其中任一个接口的名字一致。


接口与抽象类相似处:

1】接口和抽象类都可以含有抽象方法,实现接口或者继承抽象类的子类必须实现这些抽象方法,否则子类也必须定义成抽象类;

2】接口和抽象类一般都用在继承层次结构中的顶层,二者都不可能被实例化。

不同之处:

1】接口中的方法必须全部是抽象方法,抽象类中则可以包含0或多个抽象方法,甚至该抽象类的所有方法全都是抽象方法;

2】接口支持多重继承,能够同时继承多个父接口。但抽象类是单重继承,只能同时继承一个父类;

3】接口只能包含static final类型的成员变量和抽象方法,不能有构造方法。而抽象类中既可以包含所有类型的变量(成员变量和局部变量)以及方法,还可以包含构造方法。

4】一个类可以同时实现多个接口(即变相地支持多重继承),但是子类只能同时继承一个抽象类。


error与exception的区别

 异常父类Throwable分为两个子类Error和Exception。

其中Error类有Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,Java程序对这些异常不做处理。

Exception类又分为运行时异常(RuntimeException)和编译时异常两种。运行时异常是有Java虚拟机在运行时生成的异常,如被0除等系统错误、数组越界等, 其产生比较繁琐,处理麻烦,对程序可读性和运行效率影响太大,因此有系统检测,用户可不做处理,系统将它们交给默认的异常处理程序(当然,必要时用户也可对其处理)。编译时异常时一般程序中可预知的问题,其产生的异常可能会带来意想不到的结果,因此Java编译器要求Java程序必须捕获或声明所有的编译时异常。

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值