ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:348.52KB ,
资源ID:4590934      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4590934.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java基础知识及面试题.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java基础知识及面试题.docx

1、Java基础知识及面试题Java基础1.什么是类? 类是某一种事物的一般性的集合体,是相同的或相似的各个事物共同特性的一种抽象。2.什么是对象? 在面向对象概念中,对象是类的实例。对象与类的关系就像变量与数据类型的关系一样。3.类的核心特性封装性:类的封装性为类的成员提供 公有的、缺省的、保护的、私有的等多级访问权限。目的是隐藏类中的私有变量和类中方法的实现细节。继承性:类的继承性提供从已存在的类创建新类的机制,继承使一个新类自动拥有被继承类的全部可继承的成员。多态性:类的多态性提供类中方法执行的多样性,有两种表现形式:重载和覆盖。4.方法: 对象中方法表达了对象所具有的行为。5.属性: 一个

2、对象的属性是能够被外界或对象所处的环境所感知或操纵的数据或状态。6.什么是Java? Java是一门易于编程的跨平台编程语言,同时又是一个开发、应用、执行和部署的平台。7.为什么要有Java? Java与平台无关、一次编译处处运行、以及他的易于编程的特性。8.Java开发程序的步骤? 编写源代码 (2)编译 (3)执行9.Java的环境变量1)JAVA HOME jdk的安装路径2)CLASSPATH jvm转载class字节码文件时的搜索路径3)PATH 是系统的环境变量、命令的搜索路径10.JVM :Java Virtual Machine 是一个逻辑的操作系统、它屏蔽了硬件和平台的信息、

3、jvm能将字节码文件解释并执行、正是这种独立执行的方式是Java 具有与平台无关的特性。11.类的加载过程:类加载器加载字节码文件到内存、jvm内存数据区将对象状态放置在堆区、各线程使用的变量放在栈区、类的特征放在方法区、然后进行字节码验证再执行。12.常用的Java命令:Javac、java、javadoc、jar13.类的语法与规范一个源文件只能有一个public的类Public源文件可以有多个类定义源文件名必须与public类名保持一致包名必须放在第一行包名可以有0个或1个但不能有多个源文件如果带包的话 最好存放在包结构对应的目录下标识符 程序语言用于标识 变量名 类名 方法名 的字符串

4、就是标识符。标识符必须字母 下划线 美元符开头 大小写敏感。类名要求首字母大写方法名首字母小写 每个单词首字母大写常量名所有字母大写 如果有两个或几个字母的联合用下划线连接关键字:程序语言中、程序已经所有用户不能再使用的单词 一般关键字都是小写14 .数据类型: 基本数据类型: 整 型(byte、short、int、long)默认是int浮点型(float、double)、默认是double布尔型(boolean)、字符型(char) 引用类型:类、接口、数组15 .main()方法执行过程 1)先到方法区搜索student、如果搜索不到则去加载student的字节码文件 2) 通过class

5、path查找对应的student字节码文件 找不到就返回错误(ClassNotFound) 3)将字节码文件的二进制数据转换为class对象放置于方法区( class对象描述了student类的方法特征及静态成员等) 加载完成 4)验证字节码文件 5)在堆区中划分空间放置student对象 6)在栈区放置应用类型变量 stu 、stu指向student对象的地址 7)student对象存放了class对象的地址 8) 通过student stu引用类型变量的值找到student对象 、通过student对象 存放class对象的地址找到对应的study()方法然后执行。 9)释放资源 jvm运

6、行结束16 .基本类型和引用类型的区别 引用类型存放的是对象的地址、基本类型存放的是变量的实际值 引用类型变量可用指向复杂的数据结构 引用类型变量可使用“.”操作来访问它所指向的方法或属性17 .表达式运算符和操作数按照一定的规则组成的语句.赋值运算符“=”比较运算符 “”“=”相等运算符“=”位运算符 :取反、 :异或、| :或、& :与 逻辑运算符 “&” “|” 条件运算符 a ?b :c18. 变量的作用域(1)类的成员变量: 静态成员变量:生命周期 从类加载开始到类被卸载结束 初始化后被放在方法区 实例成员变量:变量初始化放在堆区、 生命周期从生成对象开始到对象被回收时结束(2)局部

7、变量:方法或代码块中定义的变量、局部变量从栈区弹出结束、局部变量在使用前必须初始化(3)方法的参数(4)异常的参数19 .数组:是相同类型元素的线性集合 是一个指向数组的引用对象20. 集合框架Iterator是一个迭代器接口ListIterator继承自Iterator是子接口 只能用于list接口Collection是集合框架的顶层接口 List 有序可重复 ArrayList 实现了可变数组的数据结构 LinkedList 实现了双向链表的数据结构Set 无序不可重复 HashSet 实现了无序不可重复 LinkedHashSet 有序不可重复(插入的顺序) TreeSet 升序不可重复

8、 Map 是一个key 、value 对映射 HashMap 按照key无序 LinkedHashMap 按照key 有序 TreeMap 按照key升序 Collections是集合框架的辅助类(工具类)里边的所有方法都是static的 Arrays是对数组的工具类Comparable、 Comparator是做比较排序的21.Vector和ArrayList的区别: 1)Vector是线程安全的(同步的)ArrayList不是 ArrayList的效率高一些 2)当初始容量满的时候Vector增加原来的一倍、ArrayList增加原来的一半22.HashTable和HashMap的区别:

9、1)HashTable是线程安全HashMap不是 HashMap的效率会高一些 2)HashMap允许null的key存在 HashTable不允许23.Set set=Map.keySet(); Iterator it=set.iterator(); While(it.hasnext())24.类的结构 类名、属性名(静态属性、实例属性)、 方法(静态方法、实例方法)、构造器(缺省构造器、带参构造器) 静态代码块 static、 实例代码块 this.25 .参数传递 对于基本类型将实际的变量的值原样的赋值以便传值 对于引用类型将引用类型变量的地址赋值给实参26.this关键字都在什么地方

10、使用 1)实例变量与局部变量同名 用this区分实例变量名与局部变量名 2)在构造器重载时、用this调用其它构造器 3)在实例方法中 用来当作当前对象的引用传给其它方法27.方法的重载 方法名要相同、在同一类中多个方法有不同的方法签名 方法签名具有参数类型 参数个数和参数顺序、返回类型不做要求28.类的初始化过程1)在堆区分配空间 new的过程2)给对象属性赋默认值3)调用构造方法进一步赋值29.构造器 类中提供的用于初始化对象的特殊的方法、这个方法于类同名无返回值、类中没有提供构造器 jvm会提供一个不带参的缺省构造器、类中有带参的构造器jvm就不提供了30.详细说明封装、继承、和多态 封

11、装:将类的实现细节隐藏起来、对外提供一致的接口、提高系统的维护性 继承:定义:一个类自动获得另一个类的属性或者方法的过程 使用方面 :extends关键字、单根继承、 所有类都是Object类的子类 、构造器不能被继承 、子类初始化时会默认情况下调用父类缺省的构造器、子类调用父类带参的构造器 则父类可以不提供缺省的构造器 否则一定要有个缺省的构造器如何使用继承? 1)区分has -a 和is -a2)子类要扩充父类的功能3)子类需要大量置换父类的功能时不能使用继承4)不要从工具类中继承优缺点: 优点:继承是最容易复用代码的形式、修改父类的功能时子类可以自动获得新的功能 缺点:打破了封装、 只是

12、类型复用 多态: 编译时编译器检查声明类型和方法信息 运行时jvm对实例方法和引用变量和实际引用对象动态绑定,对静态方法和引用变量声明的类型静态绑定 类的属性在编译阶段绑定31. instanceof: 判断实例是否为某个类型或子类型(1)只能在父子类进行比较(2)Null可以进行比较 结果为false(3)判断实例类型时,一般从子类开始,然后父类32. override:方法覆盖。子类重写父类中的方法子类重写父类中的方法的条件:(1)方法名相同(2)方法签名相同(参数)(3)返回值相同(4)子类的修饰符要大于等于父类的修饰符(5)子类抛出的异常要小于等于父类抛出的异常33. 依赖关系 (1)

13、一个类中的方法,其局部变量类型是另一个类,则这两个类具有依赖关系(2)一个类中的方法调用另一个类中的静态方法,则这两个类具有依赖关系(3)一个类中的方法中参数是另一个类的静态方法,则这两个类具有依赖关系34. 多态的运行机制(1) 在类编译阶段,编译器会检查类型是否匹配(2) 在运行阶段,jvm会调用实例的对应方法,先检查父类方法,然后检查子类方法,然后会检查实例声明的类型35Super调用父类的属性和方法、子类和父类有同名的方法时,子类可用super区分是父类的方法36. final(1)final修饰的类不能被继承(2)final修饰的方法不能被覆盖(3)final修饰的变量是常量,常量不

14、可修改但有例外 实例常量:若定义时没有赋值,则可以在构造器或实例代码块中赋值,构造器或者代码块赋值只能有一个 静态常量:若定义时没有赋值,则可以在静态代码块中赋值,37. 抽象类具有部分实现的类。使用时的注意事项:(1)不能实例化(2)可有0到多个抽象方法(3)可有构造器(4)具体类继承抽象类时必须实现所有的抽象方法(5)抽象类可以间接的被子类调用其构造器,并在内存中分配空间,间接实例化(6)抽象类可以有静态方法,可以返回其子类的实例怎样使用抽象类?(1)把各个类中可以共用的方法和逻辑放到抽象的父类中,越多越好(2)属性应尽可能放到子类中38 接口 定义:从宏观角度说是一个规范,从面向对象角度

15、说,接口是一种抽象类型(1)属性是常量,一定要赋值(2)方法是抽象方法(3)没有构造器(4)接口支持casting(强制类型转换)(5)接口可以继承自多个接口(6)实现接口的类必须要实现所有的方法,如果是抽象类可以选择实现部分的方法 为什么要使用接口?(1)可插拔性的保证,可以随意更换接口的实现类(2)接口可以解决多继承的问题(3)接口使规范的制定者、实现者、使用者分开39. 接口和抽象类的区别(1)接口没有任何实现,而抽象类可以有部分实现也可以没有(2)如果需要复用或者共享代码,应该用抽象类而不是接口(3)继承无法解决的类型转换问题,接口是为解决这问题而产生的40. 访问控制 作用域 当前类

16、 同一package 子孙类 其他packagepublic protected default private 41. static修饰符(1)可以修饰属性,称为静态属性,全类公有常叫做类变量,和具体对象无关,无多态,类名去访问,类加载的时候初始化(2)修饰方法,静态方法中只能访问静态成员,非静态方法可以访问静态成员,工具类的对象都是static的(3)修饰代码块,初始代码块是在类中,而不在任何方法之内的代码块,被static修饰的代码块称为静态代码块,静态代码块在类加载的时候运行一次42. 异常 定义:jvm将程序运行中的不正常情况的现场信息打包成一个对象,这个对象就是异常类对象。并且将此

17、对象抛出,交由相应的方法或对象处理。异常信息记录了错误的原因,指出了错误的位置,打印错误的栈信息。异常处理机制是责任链机制即子类取默认值不处理,交由父类处理直到追究到jvm然后抛给用户43. 为什么处理异常?最本质的原因是让程序执行完毕44. 异常类的层次结构Throwable: Error:是错误,程序运行中发生的系统异常,此种异常当前程序一般无法解决 Exeption:checked()编译器强迫必须捕获并处理的异常 Unchecked(RuntimeExeption、) 对于此种异常编译器不要求捕获 原因是:低级错误(low-grade mistake)、程序员可以避免的错误当错误发生时

18、、捕获异常也无济于事45. 如何处理异常(1)交给自己处理、交由当前方法处理(2)交给别人处理、由调用该方法的方法来处理(3)自己处理一部分、然后调用系统的异常方法方法(2)的步骤:(1)在方法后声明可能发生的异常类型(throws Exception type)(2)该方法不用在做其它异常处理(3)调用方法必须处理被调用方法的异常46. throw的注意事项(1)throw可以抛另一种类型的异常(2)throw语句后不能再有其它代码、throw后的代码永远不会被执行47. 异常的捕获 try catch(Exception type1) method body1 catch(Exceptio

19、n type2) method body2 (1)在 trycatch语句中可能抛出不止一个异常、但是每个时刻只能抛出一个异常(2)对可能抛出的每一种异常分别用catch来处理(3)Catch语句处理多重异常应遵从从子类到父类的顺序48.finally 用于资源的释放、在异常处理中 finally一定会被执行到、Finally语句中如果有return语句、正常运行先执行finally再执行return语句返回当发生异常时、先执行catch语句捕获异常、如果没有catch语句、则执行finally语句及其后语句49. 自定义异常为什么要自定义异常?Java程序员可定义更多的方法来处理异常、自定义

20、异常能够提供更复杂更详细的方法、这样能极大的加强软件的健壮性、代码更加清楚怎样自定义异常(1)继承Exeption使你的自定义异常变成checked异常(2)继承RuntimeExeption使你的自定义异常变成unchecked异常50. IO :流是数据输入输出的通道、流中的数据是有序的 流的分类: 按数据流动方向:输入流、输出流 输入流:只能从中读取字节数据、而不能向其写出数据 输出流:只能从中写出字节数据、而不能向其读取数据按流所处理的数据类型: 字节流:处理字节数据 字符流:处理字符数据 按流所处理的源: 节点流:从一个特定的IO设备读写数据的流 处理流:对已存在的流进行连接和封装的

21、流int read():读取一个字节,并将它返回。int read(byte buffer):将数据读入一个字节数组,同时返回读取的字节数。 void close():关闭流。 51. 线程线程和进程的区别:(1)每个进程都有独立的代码和数据空间、进程间的切换会有较大的开销(2)线程可以看成是轻量级的进程、同一类线程共享代码和数据空间、每个线程有独立的运行栈和程序计数器、线程切换的开销小。(3)多线程是在同一应用程序中有多个顺序流同时执行。(4)多进程是在操作系统中能同时运行多个任务。52. 创建线程的两种方式: (1)定义一个线程类 它继承Thread并重写其中的run()方法,方法run(

22、)称为线程体 (2)提供一个实现接口runable的类作为线程的目标对象、在初始化一个thread类或者thread子类的线程对象时把目标对象传递给这个线程实例、由该目标对象提供线程体53. 比较创建线程的两种方式: 使用runable接口可以 (1)将cpu、代码、数据分开、形成清晰的模型 (2)可以从其它类继承 (3)保持程序风格一致性 直接继承Thread类不能从其它类继承、编写简单可以直接操纵线程54.线程状态 New:创建状态。当创建一个新的线程时、它就处于创建状态、此时它仅仅是一个空的线程对象、系统不为它分配资源Runnable:可运行状态。当线程处于创建状态时、可调用start(

23、)方法来启用它、产生运行这个线程所需的系统资源、安排其运行Dead:死亡状态。线程终止(1)自然撤销。线程的run()正常退出(2)强制停止。调用线程实例的stop()可以强制停止当前线程Blocked:停滞状态。(1)通过sleep()让线程进入休眠状态 (2)通过wait()暂停线程 (3)线程正等待某个IO设备动作完成 (4)线程试着调用另一个对象的synchronized函数、而且尚未取到对象的机锁55. 守护线程(daemon Thread) 是为其它线程提供服务的线程、一般应是一个独立的线程、它的run()是一个无限循环56. 守护线程与其它线程的区别 如果守护线程是唯一运行着的线

24、程、程序会自动退出。57. 互斥锁(对象锁) 保证共享数据的完整性每个对象都对应于一个可称为互斥锁的标记、这个标记用于保证在任意时候只能有一个线程访问该对象58. 使用synchronized的时机 (1)这个函数是否修改对象内关键变量的状态、(关键变量是能被其它线程读取或修改的变量) (2)这个函数是否和关键变量的状态有依存关系 (3)基类的方法为synchronized时、synchronized不能被继承、复写时重新采用synchronized59. 释放锁 如果一个线程一个占用一个对象的锁、则其它线程将永远无法访问该对象、因此需要在适当的时候将对象的锁归还(1)当线程执行到synchr

25、onized的块结束时、释放对象锁(2)当在synchronized块中遇到break、return或抛出异常、则自动释放对象锁(3)当一个线程调用wait()时、它放弃拥有的对象锁并进入等待队列60. 死锁 是指两个线程都互相等待对方释放锁、是不可预知或避开的、应采取措施避免死锁的出现。61. sleep()和wait()的区别 (1) Sleep()是Thread类的方法、wait()是Object类的方法 (2) Sleep()可以在非synchronized函数中被调用、wait()只能在synchronized函数或同步块中被调用 (3) Sleep()不会释放对象机锁、wait()

26、会释放对象锁 (4) 使用场景不同、sleep()方法同一个线程内间隔多长时间后再次执行此任务、wait()是多个线程之间JDBC1.JDBC连接数据库的基本步骤:(1)注册驱动程序 (2)建立连接 (3)发送和执行sql语句 (4)处理结果 (5)释放资源2. 常用对象 (1)connection建立与数据库的连接 DriverManager类的getConnection()将建立数据库的连接 (2)statement将sql语句发送到数据库中存在三种statement对象 Statement PreparedStatement CallableStatement(3)Result包含符号s

27、ql语句执行结果集、并且通过一套get方法提供了对这些行中的数据的访问3. 事务的基本概念及如何在JDBC中实现事务 事务是一些事件的集合、执行一条sql语句可以理解成一个事务、事务中包含多个事件、如果每一个事件都能执行成功的时候、事务才执行、如果任何一个事务不能成功执行、事务的其它事件也不能被执行。JDBC处理事务的代码:boolean defaultCommit = conn.getAutoCommit();conn.setAutoCommit(false);try stmt.executeUpdate(strSQL1);stmt.executeUpdate(strSQL2);mit();

28、catch (Exception e) conn.rollback();e.printStackTrace();finally if (stmt != null) stmt.close();if (conn != null) conn.close(); conn.setAutoCommit(defaultCommit);Servlet和JSP1.servlet 和 JSP 的关系 JSP是以另外一种方式实现了servlet、servlet是JSP的早期版本、在JSP中更加注重页面的表现、而在servlet中更加注重业务逻辑的实现。因此当编写的页面显示效果比较复杂时、首选JSP、或者在开发过程中

29、、html代码经常发生变化而Java代码相对比较固定时可以选择JSP、而我们在处理业务逻辑时首选则是servlet、同时JSP只能处理浏览器的请求、而servlet可以处理一个客户端的应用程序请求、因此servlet加强了web服务器的功能2. servlet 的生命周期 (1)服务器加载servlet (2)创建servlet实例 (3)调用servlet实例的init() (4)收到请求 (5)调用service() (6)service()处理请求并将输出结果返回客户端 (7)servlet等待下一个请求、转到(4)继续向下执行 (8)servlet在服务器调用destory()然后卸载

30、3.init()调用时机 (1)服务器第一次访问servlet的时候被调用 (2)在web.xml中设置load-on-startup =0 情况下、服务器启动的时候调用4Destroy()调用时机 (1)servlet在被卸载前 (2)servlet很长时间没有被使用5. HttpSession接口的功能和使用方法 这是一个java.servelt.http 包中的接口、它封装了会话的概念它的定义为public interface HttpSession可以使用HttpSession session = request.getSession();来这种类型的对象、语法为HttpSession session = request.getSession();6. 什么是组件、使用组件有什么优点 现代件开发都已转向基于组件的开发、目前代表性的组件技术有微软的com和com+、有sun的javabean和EJB、另外还有CORBA(Common Object Request Broker Architecture,公共对象代理结构)、javabean规范将

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1