JAVA基础编程部分
1,什么式Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是执行字节码文件(.class)的虚拟机进程。java源程序(.java)被编译器编译成字节码文件(.class)。然后字节码文件,将由java虚拟机,解释成机器码(不同平台的机器码不同)。利用机器码操作硬件和操作系统。
因为不同的平台装有不同的JVM,它们能够将相同的.class文件,解释成不同平台所需要的机器码。正是因为有JVM的存在,java被称为平台无关的编程语言。
2,JAVA支持的数据类型有哪些?什么是自动拆装箱?
1)8种基本数据类型:byte short char boolean int longfloat double
2)引用类型,包括类、接口、数组
自动拆装箱,是指基本数据类型和引用数据类型之间的自动转换,如Integer 和 int 可以自动转换; Float和float可以自动转换
3,简述方法中的参数传递的原理?(提示:值传递和引用传递)
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
4,简述抽象类和接口的区别?
1 .接口只能包含抽象方法,抽象类可以包含普通方法。
- 接口只能定义静态常量属性,抽象类既可以定义普通属性,也可以定义静态常量属性。
3 .接口不包含构造方法,抽象类里可以包含构造方法。
4.抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充
5.接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。
- 如果许多类实现了某个接口,那么每个都要用代码实现那些方法
7.如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。
5,定义一个完整的Student类,包含字段code,name,age,类成员包括:成员变量,getter,setter,
多字段的构造器,重写toString方法。
class Demo {
public static void main(String[] args) {
Student s = new Student(“张三”, 22, 95);
}
}
class Student {
//私有成员变量。
private String name ;
private int age;
private int code;
//提供 name,age, score 的 set,get方法。
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getCode() {
return score;
}
public void setCode(int code) {
this.score = score;
}
//构造函数。
public Student(String name, int age, int score){
this.age = age;
this.name = name ;
this.score = score;
System.out.println(“姓名:”+getName()+","+“年龄:”+ getAge() + “,”+“分数:”+getScore());
}
@Override
public String toString() {
return “Student[code=” + code + “, name=” + name + “, age=” + age +"]";
}
}
6,Java集合类框架的基本接口有哪些?并阐述他们的基本特征。
Java集合类里面最基本的接口有:
Collection:代表一组对象,每一个对象都是它的子元素。
Set:不包含重复元素,。
List:有顺序的集合,并且可以包含重复元素,其中含有arraylist和linkedlist。
Map:可以把键(key)映射到值(value)的对象,键不能重复。
7,写一个mian方法,使用全字段的构造器创建5个Student对象,并放入到一个集合中(list)中,使用迭代器遍历List,并删除一个符合条件code值的对象。
public class Client {
public static voidmain(String[] args) {
Student pxj =new Student(“彭贤君”, “001”);
Student hjn =new Student(“黄佳男”, “002”);
Student zsf =new Student(“张三丰”, “004”);
Student zwj =new Student(“张无忌”, “005”);
Clazz j103 =new Clazz();
j96.setName(“Java103班”);
j96.setCode(“java103”);
// Step1:学生类型的集合定义完成了
Liststus = new ArrayList();
// Step2: 添加数据
stus.add(pxj);
stus.add(hjn);
stus.add(zsf);
stus.add(zwj);
// Step3: 追加一个新的学生
Student ljn =new Student(“陆佳楠”, “003”);
stus.add(ljn);
// Step4: 设置班级学生属性
J103.setStudents(stus);
// 使用迭代器遍历
// Step1:创建迭代器
Iteratorit = stus.iterator();
while(it.hasNext()) {
Studentstu = it.next();
System.out.println(stu);
if(stu.getName().equals(“黄佳男”)) {
it.remove();
}
}
System.out.println(“处理完的结果======================”);
it =stus.iterator();
while(it.hasNext()) {
Studentstu = it.next();
System.out.println(stu);
}
}
}
8,在异常处理时,finally代码块的重要性是什么?(提示:一般在finally块中定义哪些内容)
无论是否抛出异常,finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。最后要说的是,finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。
9,使用JDBC书写一段查询student表的代码,从控制注意台格式化打印输出,控制台打印的格式。
try {
// 1. 选择数据库:加载数据库驱动
Class.forName(“com.mysql.jdbc.Driver”);
// 2. 连接数据库
conn = DriverManager.getConnection(url,user, password);
// 3. 创建数据库查询
ps =conn.prepareStatement(“SELECT * FROM student WHERE name = ?;”);
ps.setString(1, name);
// 4. 获取查询结果
int i =ps.executeUpdate();
System.out.println(“一共执行了” +i + “条”);
} catch(ClassNotFoundException e) {
System.out.println(“数据库驱动没有找到”);
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5. 关闭查询和连接
try {
if (null != ps){
ps.close();
}
if (null !=conn) {
conn.close();
}
} catch (SQLExceptione) {
e.printStackTrace();
}
}
10,什么是泛型,为什么要使用泛型。
泛型:本质是参数化类型。
为什么要使用?创建集合的时候,往集合里面添加数据,再次取出时,集合会忘记这数据类型,该对象的编译类型就会变成Object类型,否则如果想要变回原来的数据类型的时候,就要强制进行转换。创建集合的时候,我们就指定集合类型,避免这个过程。
JSP&Servlet部分
11,什么是Servlet?解释下Servlet的生命周期。
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet 通过调用 init () 方法进行初始化。Servlet 调用 service() 方法来处理客户端的请求。Servlet 通过调用 destroy() 方法终止(结束)。最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
12,doGet()方法和doPsot()方法有什么区别?
doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
doPOST:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。
13,浏览器和Servlet通信使用的是什么协议?
HTTP协议,即:超文本传输协议
14,sendRedirect()forward()方法有什么区别?
相同点:都能实现页面跳转或者是服务器资源的跳转;
不同点:1、sendRedirect(“目的地”) 是response 对象的方法,forward(request,response)是request.getRequestDispatcher(“目的地”) 方法 返回的对象requestDispatcher 的方法;
2、sendRedirect()在客户端运行,会产生新的请求,地址栏显示新地址,forward()在服务端运行,地址栏的地址不变;
3、sendRedirect() 跳转之后,不能获取request中的对象,而forward()可以获取;
4、forward()速度更快。
15,什么是JSP?JSP有什么优点?
JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。
JSP的优点:
·对于用户界面的更新,其实就是由 WebServer进行的,所以给人的感觉更新很快。
·所有的应用都是基于服务器的,所以它们可以时刻保持最新版本。
·客户端的接口不是很繁琐,对于各种应用易于部署、维护和修改。
16,MVC是什么意思?MVC的优点有哪些?
MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
1:耦合性低
2:重用性高
3:部署快
4:可维护性高
5:有利软件工程化管理
17.jsp中的两种include的区别
<%@ include file=”relativeURI”%>引入静态文本,在JSP页面被转化成servlet之前和它融和到一 起,.先包含,后编译,不会检查所含文件的变化,适用于包含静态页面,可以理解为纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件
共享, 两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的.
<jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本. 被包含的文件先编译,后包含进来,然后显示
18.常用隐式对象有哪些,以及他们的用途?
- request对象
request对象是javax.servlet.http.HttpServletRequest对象的一个实例。每当客户端请求页面时,JSP引擎将创建一个新对象来表示该请求。
request对象提供了获取包括表单数据,Cookie,HTTP方法等HTTP头信息的方法。
- response对象
response对象是javax.servlet.http.HttpServletResponse对象的一个实例。就像服务器创建request对象一样,它还创建一个对象来表示对客户端的响应。
response对象还定义了处理创建新HTTP头的接口。通过此对象,JSP程序员可以添加新的Cookie或日期戳,HTTP状态代码等。
- out对象
out隐式对象是javax.servlet.jsp.JspWriter对象的一个实例,用于在响应中发送内容。
初始化JspWriter对象根据页面是否缓存而不同地实例化。缓冲可以通过使用page指令的buffered ='false’属性来关闭。
JspWriter对象包含与java.io.PrintWriter类大部分相同的方法。但是,JspWriter还有一些额外的方法用来处理缓冲。与PrintWriter对象不同,JspWriter会抛出IOExceptions异常。
-
session对象
session对象是javax.servlet.http.HttpSession的一个实例,其行为与Java Servlet下的会话对象行为完全相同。
session对象用于跟踪客户端请求之间的客户端会话。 -
application对象
application对象是生成的Servlet的ServletContext对象的直接包装,实际上是javax.servlet.ServletContext对象的一个实例。
application对象是JSP页面在其整个生命周期中的表示。 当JSP页面被初始化时,将创建此对象,并且在JSP页面被jspDestroy()方法删除时application对象也将被删除。
通过向application对象添加属性值,可以确保组成Web应用程序的所有JSP文件都可以访问它。
-
config对象
config对象是javax.servlet.ServletConfig的实例化,是生成的servlet的ServletConfig对象周围的直接包装。 -
pageContext对象
pageContext对象是javax.servlet.jsp.PageContext对象的一个实例。pageContext对象用于表示整个JSP页面。 -
page对象
page对象是对该页面实例的实际引用。可以认为它是表示整个JSP页面的对象。
page对象是this对象的直接同义词。
- exception对象
exception对象是一个包含上一页抛出的异常的包装器。它通常用于生成对错误条件的适当响应。
19.Request常见方法有哪些?
StringBuffer getRequestURL():返回请求URL路径,即返回除了参数以外的路径信息;
例如:http://localhost/IM/medicalController.do
String getContextPath():返回上下文路径,例如:/IM
getServletPath():返回Servlet路径,例如:/medicalController.do
String getRequestURI():返回请求URI路径,即上下文+Servlet路径,例如:/IM/medicalController.do
String getQueryString():返回请求URL中的参数,例如:name=zhangSan
Map<String,String[]> request.getParameterMap(): 返回所有参数集合
String getRemoteAddr():返回当前客户端的IP地址;
String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
String getScheme():返回请求协议,例如:http;
String getServerName():返回主机名,例如:localhost
int getServerPort():返回服务器端口号,例如:8080
要返回Servlet路径前面的路径要从上面路径中加工,比如需要返回 http://localhost/IM :
String url = request.getRequestURL().toString();
String servletPath = request.getServletPath();
String baseUrl = url.substring(0, url.indexOf(servletPath));
20.页面间对象传递的方法?
1.传递方法有:page,request,session,application,其中cookie是保存在客户端的,是用来解决HTTP无状态问题。
2.Cookie对象变量,cookie是保存在客户端的,是用来解决HTTP无状态问题。
3.Cookie对象变量和session一样,他们不同的是,session是存在服务器端,而cookie是存放在客户端的。
4.Application对象的作用范围是整个全局,他对所有用户都有效,session和cookie是对一个用户而言,所以我们可以用它统计登陆该网站的人数。Application变量不会自己消亡,会始终占据内存,创建过多的变量会降低响应速度,只有在服务被中止、Global.asa被改变或者该Application被卸载下才会被终止。
5.QuerySting在页面间传递值。这种方法的写法:在要传递值的页面,Response.Redirect(url),值包含在在url中。接收值得页面,Request.QueryString[“变量名”]。
在Jsp中页面与页面之间传递参数有几种方法?
1.表单提交,这个没什么可说的。
2.URL重写,就是传参xxx.jsp.myid = 1。
3.jsp:param传递,用在jsp:forward或jsp:include 标签中。例如:和上边的URL重写传递的参数完全相同,表示自动跳转到xxx.jsp,并包含参数。