java自己小整理(复习)

  • 格式:doc
  • 大小:106.50 KB
  • 文档页数:17

自个儿的整理:

二十六、请写出JSP的几个隐含内置对象

答:JSP中隐含内置对象

名称 类型 注释和范围

request javax.servlet.http.HttpServletRequest request

response javax.servlet.http.HttpServletResponse response

page ng.Object page

Exception ng.Throwable page

pageContext javax.servlet.jsp.PageContext page

session javax.servlet.http.HttpSession session

application javax.servlet.ServletContext ServletContext

out javax.servlet.jsp.JspWriter OutputStream

config javax.servlet.ServletConfig ServletConfig

JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

request 用户端请求,此请求会包含来自GET/POST请求的参数

response 网页传回用户端的回应

page JSP 网页本身

exception 针对错误网页,未捕捉的例外

pageContext 网页的属性是在这里管理

session 与请求有关的会话期

application servlet 正在执行的内容

out 用来传送回应的输出

config Servlet的构架部件

二十七、请你谈谈SSH整合

答:SSH:

Struts(表示层)+Spring(业务层)+Hibernate(持久层)

Struts:

Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。

在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。(View:沿用JSP,HTTP,Form,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)

Hibernate:

Hibernate是一个持久层框架,它只负责与关系数据库的操作。

Spring:

Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。

七、谈谈HashMap和Hashtable的区别。

答: HashMap是轻量级的(线程不安全的,效率高的)集合,Hashtable是重量级的(线程安全的,效率低的)集合。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

八、请问abstract class和interface有什么区别?

答:

1) 接口没有任何的实现,而抽象类它可以有部分的实现也可以没有;

2) 如果需要复用或者共享部分代码,应该用抽象类而不是接口;

3) 继承无法解决类型的转换问题,接口就是为了解决这一问题而产生的(Java的单继承是接口产生的根本原因) 接口是一种抽象的第三方规范,跟对象没什么直接关系。

1. hibernate的好处:

第一:数据库连接不需要我们自己来管理,如打开和关闭(优点吧)

第二:Hibernate对原来的SQL语句进行了封装,以前写很多SQL语句,现在你在保存的时候直接可以用 SAVE(对象)来实现了。(节省代码吧)

第三:原来是对表操作,现在是对对象操作,想法上是不是更好呢?都是对象。

Java单例模式

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

单例模式有一下特点:

1、单例类只能有一个实例。

2、单例类必须自己自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

首先看一个经典的单例实现。

public class Singleton {

private static Singleton uniqueInstance = null;

private Singleton() {

// Exists only to defeat instantiation.

}

public static Singleton getInstance() {

if (uniqueInstance == null) { uniqueInstance = new Singleton();

}

return uniqueInstance;

}

// Other methods...

}

Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。

但是以上实现没有考虑线程安全问题。所谓线程安全是指:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。显然以上实现并不满足线程安全的要求,在并发环境下很可能出现多个Singleton实例。

1 public class TestStream {

2 private String name;

3 public String getName() {

4 return name;

5 }

6 public void setName(String name) {

7 = name;

8 }

9 //该类只能有一个实例

10 private TestStream(){} //私有无参构造方法

11 //该类必须自行创建

12 //有2种方式

13 /*private static final TestStream ts=new TestStream();*/

14 private static TestStream ts1=null;

15 //这个类必须自动向整个系统提供这个实例对象

16 public static TestStream getTest(){

17 if(ts1==null){

18 ts1=new TestStream();

19 }

20 return ts1;

21 }

22 public void getInfo(){

23 System.out.println("output message "+name);

24 }

25 }

1 public class TestMain {

2 public static void main(String [] args){

3 TestStream s=TestStream.getTest();

4 s.setName("张孝祥");

5 System.out.println(s.getName());

6 TestStream s1=TestStream.getTest();

7 s1.setName("wang孝祥");

8 System.out.println(s1.getName());

9 s.getInfo();

10 s1.getInfo();

11 if(s==s1){

12 System.out.println("创建的是同一个实例");

13 }else if(s!=s1){

14 System.out.println("创建的不是同一个实例");

15 }else{

16 System.out.println("application error");

17 }

18 }

19 }

运行结果:

张孝祥

wang孝祥

output message wang孝祥

output message wang孝祥

创建的是同一个实例

这说明单例模式一直用的都是第一次创建的实例,不过后面的对实例的改动都有效

结论:由结果可以得知单例模式为一个面向对象的应用程序提供了对象惟一的访问点,不管它实现何种功能,整个应用程序都会同享一个实例对象。

1.饿汉式单例类

1 //饿汉式单例类.在类初始化时,已经自行实例化

2 public class Singleton1 {

3 //私有的默认构造子

4 private Singleton1() {}

5 //已经自行实例化

6 private static final Singleton1 single = new Singleton1();