Java基础知识的汇总分析
Java基础知识
1、Java语言的优点:
1)Java是纯面向对象语言
2)与平台无关性,一次编译到处运行
3)Java提供了狠多内置类库
4)提供了对web应用的支持
5)具有较好的安全性(数组边界检测、Bytecode检测)和健壮性(强制型机制、垃圾回收器、异常处理)
6)去除c++难以理解的一些特性(头文件 指针 运算符重载 多重继承)
2、java与c++的异同:
1)Java为解释型语言,c++为编译型语言,java会慢但是跨平台
2)Jave为纯面向对象,c++既面向对象又能面向过程。Jave无全局变量和全局函数
3)Java没有指针,更安全
4)Java不支持多继承但是有接口概念
5)Java不需人工分配管理内存(申请 释放),提供垃圾回收器自动回收。当堆栈或静态存储区没有对这个对象的引用时,就会被回收。没有析构函数,但是有finalize()方法。
6)Java没有运算符重载,没有预处理功能。
3、public static void main(String [] args)是程序的入口。
4、java可有多个main()文件,但只有与文件名相同的用public修饰的类的main()才能作为程序的入口。注:有且仅有一个类被public修饰并与文件同名。
5、静态快在main函数之前执行。初始化执行顺序:父静态变量 父静态代码块 子静态代码变量 子静态代码块 父非静态变量 父非静态代码块 父类构造函数 子非静态变量 子非静态代码块 子类构造函数
6、构造函数:
1)与类同名,无返回值
2)可以有多个,根据参数不同
3)总是伴随new操作一起调用
4)主要用来初始化对象
5)不能被继承
6)可用super来显示调用父类构造函数
7、浅复制仅仅复制考虑的对象,不复制它引用的对象。深复制两者都复制
8、面向对象和面向过程有什么不同:
1)面向对象是用符合常规思维的方式去处理客观世界的问题,面向过程是则重以事件为中心,模块化。
2)面向对象是使计算机世界向客观世界靠拢,使问题的处理更清晰。面向过程是清晰准确表达过程的模块,把客观世界的问题抽象成计算机可以处理的过程。
9、面向对象的特征和优点:抽象 继承 封装 多态有较高的开发效率,代码可重用。较高的可维护性,代码更清晰明了。
10、java只支持单根继承,extends继承是 is a 关系,组合是 has a关系。
在java语言中能用到组合的尽量不要用继承。
11、多态:
重载(同个类中有多个同名方法) 水平关系
重写(子类重写父类,方法名和参数列表相同) 垂直关系
12、抽象类和接口的异同:
1)只要包含一个抽象方法都是抽象类,接口的方法全部是抽象方法,称为纯抽象类。
2)抽象类的子类需实现父类的抽象方法。
3)接口中的变量都默认为:static final 必须赋初值。
4)接口实现用implements。一个类可以实现多个接口实现类似多继承的关系。
5)接口被运用于常用的功能,如:添加删除。抽象类用于生活公共类的角色,不适用经常对代码修改的情况
13、this和super的区别:
This用来指向当前实例对象
Super用来访问父类的方法和成员变量
子类继承父类时,子类构造函数中super()必须放第一句。
14、break continue return 的区别:
Break 用于直接强行跳出当前循环,不执行剩余代码
Continue 用于停止当次循环,回到起始处进行下次循环。
Return 跳转 用来表示从一个方法中返回。
Break out跳出多重循环
15、static的作用:
a 为对象分配单一的存储空间,与创建对象个数无关
b 实现某个方法或属性和类而不是与对象关联在一起
C 变量可达到全局的效果,在内存中只有一个复制
16、不可变类的实现:
类中的所有成员变量被private修饰
没有写set方法
类定义final
17、值传递和引用传递的区别:
值传递:实参会把它的值传递给形参
引用传递:传递的是对象,形参和实参指向同个存储单元。
18、有八种基本数据类型,类型转换的优先级:byte不能与booleam互换。
19、round 表示四舍五入 ceil表示向上取整 floor表示向下取整,i++表示先执行后加
一,++i表示先加一后执行。
20、String s1=”abc”是存放在常量区
String s2=”abc”s2应用常量区的对象,不会创建新的对象。
String s3=new String(“abc”)是在堆中创建对象,
String s4=new String(“abc”)又必须在堆中创建新对象。
21、“==”与“equals”
“==”用来比较两个变量的值是否相等,如果一个变量指向饿数据是对象(引用类型),就有两块内存。对象本身占用一块内存(堆内存),变量也占用一块内存。String s4 = new String(“abc”)。变量s所对应的内存中存储的数值就是对象占用那块内存的首地址。如果想看两个变量是否指向同一个对象,即要看他们对应内存中的数值(首地址)是否相同。
equals比较的不是引用,而是数值内容,即比较的是abc。
22、数组也是对象。数组提供length属性来获取数组的长度,而String是通过length()计算。
23、异常处理
1)try catch finally模式
2)Finally块中的代码一定会被执行,除非这两种情况:当程序在try之前就遇到异常或者在try中通过exit()强制退出。
3)jvm将错误表示为一个异常并抛出,通过catch来捕获,然后进行处理。安全性和鲁棒性。
4)异常分为两大类:错误(error)和异常(Excetion)
异常分为:检查异常和运行异常。
检查异常又称为编译异常。
比如:IO异常、SQL异常
运行异常为:空指针异常、类型转换异常、算术异常、数组越界异常、数组存储异常、缓存区溢出异常。
先捕获子类后捕获父类,尽早抛出异常,能处理就处理,不处理就抛出,运行时异常实际不必处理,直接抛出。
24、Java IO:字节流(8位)不会用到缓存 字符流(16位)用到缓存
25、Socket称为套接字。用来实现不同虚拟机或不同计算机之间的通信。
分为两种类型:面向连接的TCP,可靠。无面向连接的UDP,不可靠。
任何一个Socket都是由一个IP地址和端口号唯一确定。
26、java平*立性是指一个平台上编写和编译程序,而在其他平台上运行。有JVM和java API。
Java语言是一种动态解释型语言,类class只有被加载到JVM上才能运行。不会一次加载全部类后执行,而是先加载基类,其他类是需要时再加载。
27、垃圾回收GC:回收不会再使用的内存。三个任务:分配内存;确保被引用的内存不被错误地回收;回收不再被引用的对象的内存。
28、java中内存泄露问题:
两种情况:
1)在堆中申请的空间没有得到释放
2)对象不再被使用,但是仍在内存中保留着
原因:静态集合类、各种连接、监听器、变量不合理的作用域
29、java中堆和栈的区别:
分配在栈:基本数据类型的变量、对象的引用变量
变量出了作用域就会被自动释放
分配在堆:引用类型变量、需要通过new创建的变量。主要为运行时创建的对象
JVM是基于堆栈的虚拟机,每个java程序都运行在一个单独的JVM实例上,所以一个java程序中的对个线程运行在,每个实例又唯一对应一个堆,所以这些线程之间会共享堆内存。
只需要申请堆空间,不需要考虑释放问题。
使用栈中的引用变量来访问堆中的数组和对象。
堆只要是用来存放对象的,栈主要是用来放执行程序的。
栈的速度快,但大小和生存期确定,缺乏灵活性。堆是动态分配内存,灵活性强但速度慢。
30、容器:java Collections框架:list 、Queue 、set 、stack 、map
list 、Queue 、set 、stack都继承Collection接口。
1)List是有序的Collection。按对象的进入顺序保存对象,可保存重复对象。
2)Set是集合的概念,集合中不能有重复的元素。
3)map是键映射到值得数据结构。值可以重复,但是键是唯一的,不能重复。
31、迭代器:是一个对象,一种访问一个容器对象的各个元素,而又不必暴露该对象内部的细节方法。
1)使用容器的iterator()方法返回一个Iterator,然后通过Iterator的next()方法返回一个元素。
2)使用Iterator的hasNext()方法判断容器中是否还有元素,如果有可以使用next()获取下一个元素。
3)通过remove()来删除迭代器返回的元素。
32、collection和collections的区别:
Collection:是一个集合接口,为各个具体集合提供最大化的统一操作。
Collections:是针对集合类的一个包装类。不能实例化,相当于一个工具类,服务于Collection框架。
33、多线程:
线程:执行代码的一个执行单元。
进程:一个正在执行的程序
各线程共享程序的内存空间(代码段、数据、堆空间)有独立的栈空间。
线程优点:
1)减少程序的响应时间
2)相比进程,创建个切换开销小
3)多CPU和多核本身就具有多线程能力
4)简化程序结构,便于理解和维护。
34、如何实现java多线程:
1)继承Thread类,重写run()方法
2)实现Runnable接口,并实现接口的run()方法。
3)实现Callable接口,重写call()方法。
35、同步
要想实现同步操作,必须获得每个线程对象的锁,获得它可以保证同一时刻只有一个线程能够进入临界区,并且在这个锁被释放之前,其他线程就能再进入临界区,如果还有其他线程想要获得该对象的锁,只能进入等待队列等待。
36、多进程同步的实现方法:
1)synchronized关键字
2)Wait()方法与notify()方法
3)Lock
37、终止线程的方法:stop()方法与suspeng()方法。
Java提供两种线程:守护线程(服务进程)、用户进程。
38、如何通过JDBC来访问数据库:
1)加载JDBC驱动器,将JDBC驱动 jar包复制到lib下
2)加载JDBC驱动
3)创建数据库连接
4)建立Statement对象或是PrepareStatement对象。用于对数据库操作
5)执行SQL语句
6)访问结果集ReaultSet对象
7)依次关闭ReaultSet Statement Connection。
39、Class.forName()方法的作用是把类加载到JVM中。
在使用JDBC连接数据库之前,一般会调用Class.forName(“com.mysql.jdbc.Driver”)方法来加载驱动。
Statement用于执行不带参数的简单SQL语句,并返回它所生成结果的对象。每次执行SQL,数据库都会编译该SQL语句。
PrepareStatement可执行带参数的。效率更高,可读性,可维护性更高,安全性更好
40、JDBC提供了getString()、getInt()、getIData()等方法从ResultSet中获取数据。
41、在JDBC连接时连接池数目有限,所以一定要保证释放不再使用的连接。
createStatement和prepareStatement最好放在循环外面,而且使用statement后需要及时关闭。最好是执行一次executeQuery后马上关闭statement。
42、Hibernate是JDBC的封装。采用配置文件的形式将数据库的连接参数写到XML中,但
是最后对数据库的访问还是要通过JDBC来完成。
43、Hibernate是个持久层框架,它将表中的信息映射到XML中,再从XML文件映射到相应的持久化类中。
Java Web
1、浏览器的作用:
1)、完成与服务器端的交互。
2)、完成HTML的解析,实现用户需要看的内容以直观的信息展示出来。
2、HTTP的请求方法有:GET POST HEAD TRACE OPTIONS
GET:是最简单的请求方法,从服务器端获取用户所需的资源,并将其作为响应返回给客户端。获取服务器端的信息(查询)。若需上传数据则添加到URL后面。数据暴露安全不够,并且数量受限制。
POST:除了能够从服务器端获取资源外,同时还可以向服务器上传数据。上传的数据不是在URL中明文显示,可以上传大量数据,用户不可见
3、Servlet:
采用Java语言编写的服务器程序,运行于Web服务器中的Servlet容器中,主要功能是提供请求、响应的服务模式,可以生成动态的Web内容。
Web服务器获取到一个对servlet的请求时,会将其交给Tomcat容器进行处理,容器再通过调用Servlet的方法(doGet() doPost())来响应请求。
步骤:
发起servlet请求——>Web服务器交给容器处理——>容器创建两个对象HttpServletResponse HttpServletRequire——>创建单独线程,并将两个对象以参数形式传递进入线程——>线程容器调用Servlet的service()方法中的doGet()或doPost()完成响应——>容器将响应消息以HTML形式返回给客户。
4、Servlet的生命周期:
加载——>创建——> 初始化——> 处理客户请求——> 卸载
5、JSP的优点:
JSP:嵌入java代码的html文件。主要解决servlet与HTML的分离。实现业务逻辑与视图进行分离。
6、JSP与servlet的异同:
相同:
本质都是Servlet文件,只要是JSP能完成的工作,使用Servlet都能完成.JSP最终都是会转化为servlet来运行。
不同:
Servlet是处于控制层,主要是做流程控制和业务处理。JSP是处于视图层,主要用于显示。
Servlet没有内置对象,JSP中的内置对象主要是通过HttpServletResponse 对象、HttpServletRequire对象得到。
7、MVC模型:
模型层(M):实现系统业务逻辑。JavaBean或EJB
视图层(V):实现用户的交互。JSP
控制层(C): 实现视图与模型的逻辑控制。servlet
8、控制层:
控制器接收用户的输入并调用模型和视图去完成。
控制器本身不输出任何东西,也不执行任何处理。
只是接收请求并决定使用哪个模型去处理请求,决定使用哪个视图去显示模型处理返回数据
9、MVC的优点:
1)低耦合性,实现视图层与逻辑层分离。
2)高重用性和可适用性
3)部署迅速
4)容易维护
10、Servlet中的forward和redirect有什么区别:
Forward是服务器内部的重定向,服务器直接访问目标地址的url,地址不变。
Redirect:客户端的重定向,完全跳转,地址改变。
11、JSP的内置对象:
1)require(请求对象)
2)Response(响应对象)
3)pageContext(页面上下文对象)
4)Session(会话对象)
5)Application(应用程序对象)
6)Out(输出对象)
7)Config(配置对象)
8)Page(页面对象)
9)Exception(异常对象)
12、request对象的方法:
1)setAttribute(String name ,Object)设置name的属性值
2)getAttribute(String name )获取name的属性值
3)getParameter(String name )获取用户提交的数据,name与表单的name对应一致
4)getSession()用来获取与请求相关的会话
13、JSP中的动作:
1)JSP:include 用来页面请求时引进一个文件
2)Jsp:useBean 用来实例化一个javabean
3)Jsp:setProperty 用来设置已经实例化的bean对象的属性
4)Jsp:getProperty 用来获取已经实例化的bean对象的属性
5)Jsp:foward 用来将请求跳转到另外一个页面
14、JSP中include指令和include动作
指令:<% @include file =”test.jsp “%>
动作:
15、会话跟踪技术:
对同一个用户对服务器的连续请求和接收响应进行监视。
1)page一个页面
2)Request一个请求
3)Session 一个用户体验
4)Application 整个Web应用程序
16、字符串编码:GBK 、UTF-8
17、什么是Ajar
异步js与XML。
结合了java技术、js技术、xml技术。 客户端技术
功能:在不刷新页面的情况下通过与服务器进行少量的数据交互来提高页面的交互性,减少响应时间,改善用户体验
18、cookie和session的区别:
Session:指用来在客户端与服务器端之间保持状态的解决方案以及存储结构。
Cookie:由Web服务器保存在用户浏览器上的小文件。
19、web服务器:接收来自于客户端的请求,然后把对请求的处理结果反馈个客户端
两大web服务器:IIS Apache。
20、web容器:TomcatJBoss
负责给servlet提供http请求和响应对象,调用doGet()过doPost()方法来处理用户请求。
21、EJB的类别:
1)session Bean(会话Bean)实现服务器端的业务逻辑,协调Bean之间的交互
2)Entity Bean(实体Bean)资料组件 代表数据库中的记录
3)Message Bean(消息驱动 Bean)处理异步消息,一般不是由用户来调用的
22、EJB与Javabean的异同:
1)EJB:主要用于服务器端的开发,Javabean主要用在客户端的开发。
2)EJB组件可以部署在EJB容器中,不直接访问组件,而是通过容器访问,javabean不可部署
3)EJB是分布式对象,可以被远程调用,javabean不是,只能在内部被访问
23、EJB的角色:
1)Enterprise Bean Provider(企业级组件开发者)
2)Application Assembler(应用组合者)
3)EJB Deployer(EJB部署者)
4)EJB Sever Provider(EJB服务器提供者)
5)EJB Container Provider(EJV容器提供者)
6)System Administrator(系统管理员)
24、数据库连接池的工作机制:
原因:
1)建立数据库是非常耗时的操作
2)数据库连接个数是有限的
数据库连接池负责分配 管理 释放数据库连接。当客户需要访问数据库是,就可以直接从池中获取数据库的连接,而不用去创建连接,同时标志为忙状态。
25、JAVAEE开发的调优方法:
1)优化设计
2)尽可能使用数据库连接
3)使用框架
4)优化I/O
5)优化查询
26、struts框架的优点:
1)实现表现和逻辑的分离
2)提供页面导航功能
3)提供表单验证
4)提供数据库连接池
5)提供了异常处理机制
6)支持国际化
27、数据验证分为:
1)表单验证
2)业务逻辑验证
28、国际化:
程序在不修改内部代码的情况下,根据不同地区显示相应的界面
29、什么事控制反转:
也称依赖注入,一种降低对象之间耦合关系的设计思想。
使上层不仔依赖于下层的接口,调用者(子)决定被调用者(父)。通过注入一个实例化的对象来实现解耦和目的。
30、Spring框架
提供了对轻量级loc的良好支持,也提供对AOP技术的非常好的封装。
31、Hibernate框架,持久层框架
实现Java对象与关系数据库记录的映射,简化开发人员访问数据库的流程,提高软件开发的效率
任何使用到JDBC的都可以使用Hibernata
提高性能方法:
1)延迟加载
2)缓存技术
3)优化查询语句
32、实现分页:
1)Hibernate自带的分页机制
2)用SQL语句实现,使用limit关键字
33、SSH:
struts实现视图部分
Hibernate实现模型部分
Spring实现业务部分
采用SSH框架,不仅能实现视图、控制器与模型的彻底分离,而且还能实现业务逻辑与数据持久层的分离
总结
以上就是Java基础知识的汇总分析的详细内容,更多请关注其它相关文章!
推荐阅读
-
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
-
Java overload和override的区别分析
-
一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)
-
Java提取文本文档中的所有网址(小案例介绍正则基础知识)
-
Python中一些基础知识点的汇总:零基础也能看懂的Python基础
-
基于PHP遍历数组的方法汇总分析
-
[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的
-
Java中super关键字的详细分析
-
docker-compose下的java应用启动顺序两部曲之一:问题分析
-
【Java】NIO中Selector的select方法源码分析