JaVa 程序设计基础
一、
什么是JAVA:
JAVA是一种具有多功能的高级语言;它可以开发WEB页面的小程序、桌面上运行的应用程序、还可以用于客户端和服务端资源通讯等功能。
二、JAVA语言的特点
简单、面向对象、分布式、健壮、可移植、安全、多线程、垃圾回收。
三、执行JAVA运行环境的三大任务:
1)、加载代码
2)、校验代码
3)、执行代码
四、语法和语义的区别:
语法:规定了编择器正确处理程序而必须遵守的语法;
语义:定义了计算机程序正确运行的逻辑规则;
五:什么是数据类型、为什么要用数据类型:
数据类型是一种易于人类阅读的标记,是用来表示计算机内存的特点语法。
六:if语句的语法:
If(条件){//执行这些的语句}
If(条件){//语句1}else{//语句2}还可以在if(){}else{}嵌套多个。
If(条件){}else if(条件){}
七:三元运算符语法:
条件 ?真语句 :假语句;
Boolean
letIntoClub=(age>=18) ? true :false;
八:switch语句的语法:
Switch(条件){
switch是语句的开始 ()是向switch语句传递变量也是对变量进行所以分支条件的选择;
Case 值1;将变量的结果标注为特定值;
//语句
Break; 使执行过程跳出switch语句块。
Switch 语句后的值必须是整型或者可以转变为整型的值(char byte short
int);
}
九:循环提供了三种结构:
While(布尔条件){//语句块} 先计算布尔条件,再执行循环体语句
Do{//语句块}while(布尔条件); 先执行循环体语句块,在执行布尔条件
保证循环体内的语句块至少执行一次。
For(初始化语句;布尔条件;迭代语句){
//语句
JAVA 面向对象编程
一、
什么是面向对象:
面向对象(oo)是一种认识事物的方法,是一种以对象为中心的思维方式。
面向对象是一种符合人类自然思维习惯的方法;
二、什么是对象。有什么特征:
世界上所以的事物都可以称为对象;它们都具有属性及行为。
三、什么是类:类和对象关系:
类是具有相同属性和相同行为的对象集合;
类是对象的抽象,而对象是类的实例。
四、可以定义私有的接口吗?
不可以,所以的接口都是public和adstract类型。
五、运行时异常与一般异常有何异同:
一般的异常是程序在运行的时候可能出现的非正常状态;
运行是异常虚拟机可能发生的异常,是一种常见的运行错误。
JAVA编译器要求方法必须声明抛出可能发生的非运行是异常,但是并不要求必须声明抛出未捕获的运行是异常
MVC是有那些部分组成,如何实现:
Mvc是Model-View [vju:] –Controlle[kənˈtrəulə]的简写。
Model:是代表的是应用的业务逻辑(通过JAVABean,EJB组件来实现)。
View:是应用的表示面(由JSP页面产生)。
Controlle:是提供应用的处理过程控制(一般是一个Servlet),通过设计模型;
多线程有几种实现方法、都有什么?同步有几种实现方法、都有什么?
多线程有两种实现方法:分别是继承Thread类与继承Runnableˈrʌnə]接口同步的实现有两种方法:分别是synchronized[ˈsiŋkrənaiz],wait与notify
Sleep[sli:p]和wait()[weit]有什么区别:
Sleep是线程类(Thread[θred])的方法,调用Sleep()方法会导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时候会自动恢复。
Wait是object类的方法,对此对象调用wait()方法导致本线程放弃对象锁,进入等待对象的等待锁定池,直到被唤醒或者等待的时间到了。
只有针对对象发出notify [ˈnəutifai]方法(或notifyAll)后本线程才进入对象池准备获得对象锁进入运行状态。
启动一个线程是用run(),还是start()?
启动一个线程是调用start()方法,使线程的虚拟机处于可运行的状态,这意味这它可以由JVM调度并执行。这并不意味着线程就会立即执行。
Run()方法可以产生必须退出的标志来停止一个线程。
在JAVA中一个类被声明为final [ˈfainəl]类型,表示什么意思:
表示该类不能被继承、方法可以覆盖,是顶级类。
Error[ˈerə]和exception [ikˈsepʃən]有什么区别:
Error 表示系统级的错误和程序不必处理的异常。
Exception 表示需要捕捉或者需要程序进行处理的异常。
接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承构造函数。
接口可以继承接口。抽象类可以实现接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
谈谈final,finally,finalize的区别:
Final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
Finally是异常处理语句结构的一部分,表示总是执行。
Finalize是object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
&和&&的区别:
&是位运算符,表示按位与运算,
&&是逻辑运算符,表示逻辑与and
HashMap和Hashtable的区别:
都属于Map接口的类,实现了将唯一键映射到特定的值上。
HashMap
类没有分类或者排序。它允许一个null键和多个null值。
Hashtable 类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的
Collection 和 Collections的区别:
Collection是java,util下的类。是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是java,util。是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
什么是类的反射机制?
Java
的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性。
如何将String转为Integer
Dim s As String =
"12"
Dim n As Integer = CType(s,
Integer)
Dim m As Integer =
Convert.ToInt32(s)
Dim o As Integer =
Integer.Parse(s)
上面3个方法都可以
int 和 Integer 有什么区别
int 是java原始数据类型
Integer是java integer提供的封装类
原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble
String 和 StringBuffer 的区别
它们都可以储存和操作字符串,即包含多个字符的字符数据
String提供的数值不可以改变字符串;
StringBuffer是可以修改字符串
说出 ArrayList,Vector [viə],
LinkedList 的存储性能和特性
ArrayList和Vector都是用数组的方式来储存数据的
ArrayList可以任意的增大以存放更多的元素。查询快
Vector [viə] 由于使用了 synchronized
[ˈsiŋkrənaiz] 方法(线程安全),通常性能上较 ArrayList 差,
而 LinkedList
使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
Java 持久化
浅谈你对持久化的理解
持久化
仅仅指的是把域对象永久的保存在数据库当中。广义的理解,“持久化“包括和数据库相关的各种操作。
● 保存:把域对象永久保存到数据库。
● 更新:更新数据库中域对象的状态。
● 删除:从数据库中删除一个域对象。
● 加载:根据特定的OID,把一个域对象从数据库加载到内存。
● 查询:根据特定的查询条件,把符合查询条件的一个或多个域对象从数据库加载到内存中。
为什么要使用持久化
持久化技术 封装了数据的访问细节,为大部分业务逻辑提供了面向对象的API:
● 根据持久化可以减轻访问数据库访问的次数,增加应用程序执行的速度
● 代码重用性高,能够完成大部分数据库的操作
● 松散耦合,使持久化不依赖与底层的数据库和上层的业务逻辑实现,更新数据库时只需要修改配置文件不用修改代码。
数据库的英语简写:R D B M S
数据库发展过程出现了几种模型:
● 层次模型
● 网状模型
● 关系模型
● 对象模型
● 我们一般用的都是关系模型。
Statement【steitmənt】和
PreparedStatement
[ˌpri:ˈpei]【steitmənt】的区别:
Statement在执行SQL语句必须是完整的SQL。
PrepatedStaement可以使用“?”作为SQL语句当中的占位符,然后用setXXX方法来给占位符赋值,最后执行。
如果Statement出现了“ ‘ ”或者“-”等符号,必须使用转义字符来进行转义。
PreparedStaement会自动转换。
使用Statement时,SQL语句每次都要进行编译。
PreparedStaement 每次执行的时候只需要将参数设置相对应的占位符就可以运行。
使用PreparedStaement还可以对编译次数减少,提高提高数据库总体性能。
Char和varchar的区别:
Char的长度是固定;存储字符串“abc",对于char
(10),表示你存储的字符将占10个字节(包括7个空字符),
Varchar长度是可以改变的;而同样的varchar(10)则只占用3个字节的长度,10只是最大值,当你存储的字符小于10时,按实际长度来判断。
Char的效率比varchar稍高。
对于SAX(简单XMLAPI)和DOM(文档对象模型)解析XML的区别:
SAX:只能读,不能修改,只能顺序访问,适合对大型的XML的解析,解析速度快!
SAX:应用于保存大量数据的XML(为什么要用XML保存大量的数据类容?答:可以实现异构系统的数据访问,实现跨平台!)
SAX的缺点不能随机访问,文档只能遍历一次。
DOM:不仅能读,还可以修改、而且都够随机访问。缺点是解析速度慢,适合小型文档解析慢。要在内存中生成节点树,而生成树是比较费时的)
JAVA WEB 编程
什么是HTTP协议:
HTTP协议是一种超文本传送的协议,是一套计算机在网络中通信的一种规则。
定义HTTP事务处理分几步走:
1、 客户端和web服务器建立连接。
2、 客户端发送http请求。
3、 服务端接受客户端的HTTP请求,生成HTTP响应回发。
4、 服务器端关闭连接,客户端解析回发响应,恢复页面。
什么是WEB服务器,有什么缺点:
WEB服务器是被用来向客户端提供HTTP服务的。
如何生成一个动态页面呢:
在WEB服务器主机上增加一个辅助应用,这个辅助应用负责生成动态页面,并且能够与WEB服务器软件通讯。
用什么技术来进行解决,它们各自的区别:
最早使用的是CGI技术:通用网关接口。
优点:
缺点:每次在请求就打开一个CGI进程,严重消耗服务器资源。
Serlet技术:serlet主要用于在服务器端产生动态内容。Serlet是与平台无关的JAVA类。能够编译成中立的字节码,从java技术的web服务器动态装载和运行。
Serlet在服务端主要执行什么任务:
1、 读取客服端发送的显示和隐式数据。
2、 生成结果
3、 向客户端发送显示数据和隐式数据(HTTP响应数据)。
什么是Serlet:
是在运行web服务器或应用服务器上的java程序。创建动态内容上有效而强大的解决方案之一。
Java开发者提供了强大的APL、面向对象编程、平台无关、强类、垃圾回收、以及其他的JVM的安全机制。
Serlet的生命周期:
Serlet分为三个阶段:初始化、服务、销毁。
其次初始化和销毁之被执行一次,而服务可以执行多次。
设置状态码HttpSerletResponse常见的两种方法:
sendError方法:生成一个404应答,同时生成一个简单的HTML错误信息文档发生给客户。
public
void sendError(int code String message);
sendRedirect方法:
sendRedirect()将生成一个302应答,
public
void sendRedirect(String url);
HTTP请求提交的方法
默认的情况下使用HTTP协议的GET方法提交请求。
如何获取表单数据:
GetParameter(),获取表单数据参数的值,参数名区分大小写,与HTML表单中出现的参数保持一致。
GetPatameterValues()
获取同一个参数名的多个参数值,返回字符串数组对象。
请求转发和重定向的区别:
请求转发和重定最大的区别在于,重定向让客户端浏览器来完成,而请求转发是在服务器端做工作。
请求转发:GetRequestDispatcher().forward(request,response)。路径必须以根目录“/开始”,改资源利用请求和响应对象来处理HTTP请求。
重定向:response.sendRedirect(地址);
Web应用程序状态管理:
Cookie和Session的区别:
Cookie和Session最大的区别:cookie是把数据保存到客户端的,而Session是把数据保存到服务器
Cookie的缺点是:如果客户禁止cookie就没办法了。这就需要session了,在PHP4中,session可以有两种办法实现,一是用cookie,即把sessionID保存在cookie文件中;二是把sessionID附带在URL上进行传递。
session什么时候被创建:
在很多情况下初学的程序员都会放一个这样的错误
会以为session在有客户端访问的时候就被创建,然而事实是直到某个servlet端程序(如servlet)调用HttpServletRequesr.gerSession(true)这样的语句才会被调用。
Session在什么时候被销毁:
程序员手动调用HttpSession.invalidate();
距离上一次收到客户端发送的session id的时间间隔超时了session的最大有效时间
服务器进程被停止
注意:关闭浏览器只会让客户端浏览器内存中的session
cookie失效,不会使服务器端的session对象失效。
使用隐藏的表单域有什么缺点吗?
每个页面都是有表单提交而动态生成时,才能使用这种方法。单击常规的
hrer>超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只有用于一系列特定的操作中。
会话跟踪的基本步骤:
1、 访问也当前相关的会话对象
2、查找与会话相关的信息
3、存储会话信息
4、废弃会话数据
getSession()/getSession(true)、getSession(false)的区别
getSession()/getSession(true):当Session存在是返回该session,否则新建一个session并返回该对象
getSession(false): 当session存在时返回该session,否则不会新创建session,返回null;
开发过滤器的步骤:
1、编码:所以的过滤器必须实现java.servlet.Filter接口。Filter接口下中有三个方法init()、doFilter()和destroy().
2、编译
3、部署:过滤器部署分为两个步骤:
4、运行
1、把编译成的Class复制到Tomcat安装目录的子目录\webapps\lovobook\WEB-INF\classes\com\lovobook下
2、在部署文件web.xml中添加阴影部分的代码,指定过滤器类,然后讲所需的请求url映射到这个过滤器上。
HellowWorldFilter
com.lovobook.HellowWorldFilter
HelloWorldFilder
/filter/*
过滤器API包括几个接口:
1、Filter:是过滤器API的核心,只需要实现Filter接口
2、FilterConfig:该接口只要是为过滤器提供初始化参数。它下面有声明了四个方法
String getFilterName():返回在部署描述文件中指定的过滤器的名称
String getIntParameter(String):返回在不出描述文件中指定的参数的值
Enumeration getInitParameterNames():返回在部署描述文件中指定的所以参数的名称。
ServletContext
gerServletContext():返回WEB应用程序的ServletContext.过滤器可以使用ServletContext设置,获取application范围的属性。
3、FilterChain::该接口只要是为过滤器提供初始化参数。它只有一个方法;
Void
doFilter(ServletRequest,ServletResponse):我们从一个过滤器对象的doFilter()方法中调用次方法,以继续过滤器的链的传递过程,它会将控制转到链中的下个组件。
Jsp页面运行分为七个阶段:
1、翻译2、编译、3、类装载4、初始化 5、服务 6、销毁
JSP网页主要是由元素和模板数据两个部分组成:
模板数据是JSP的静态部分,它是WEB容器不处理的部分(例如HTML),它直接被发送到客户端执行
。而元素则是必须经由WEB容器解释的部分。
WEB容器支持两种不同格式的JSP语法:
普通格式和XML兼容格式
采用脚本的JSP可以使编写JSP页面变得简单、直观、但是它的缺点是:它只适合于业务流程简单、系统规模小的应用系统。还严重缺乏可读性而且没有将页面表现和业务逻辑实现分开,使维护性难度增加。