我是靠谱客的博主 年轻眼睛,最近开发中收集的这篇文章主要介绍Java基础,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、final、finally、finalize的区别?

final用于声明属性、方法和类,分别表示属性不可改变,方法不可覆盖,类不可继承。final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract,又被声明为final。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

finally是异常处理语句结构的一部分,表示问题执行。finally在异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。

finalize方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或执行其它清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

 

2、Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名内部类是没有名字的内部类。不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

 

3、&和&&的区别?

&是位运算符。&&是布尔逻辑运算符。

 

4、HashMap和HashTable的区别?

都属于Map接口的类,实现了将唯一键映射到特定的值上。
HashMap类没有分类或排序,它允许一个null键和多个null值。
HashTable类似于HashMap,但不允许null键和null值。它也比HashMap慢,因为它是同步的。
HashMap是HashTable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空键值,由于非线程安全,效率上可能高于HashTable。

 

5、Collection和Collections的区别?

Collection是java.util下的接口,它是各种集合结构的父接口。
Collections是java.util下的类,它包含各种有关集合操作的静态方法。

 

6、List、Set、Map是否继承自Collection接口?

List、Set是,Map不是。

 

7、String s=new String("xyz");创建了几个String Object?

两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s。

 

8、Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11。

 

9、short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?

short s1=1;s1=s1+1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1=(short)(s1+1)。short s1=1;s1+=1;正确。

 

10、Java有没有goto?

Goto java中的保留字,现在没有在java中使用。

 

11、数组有没有length()这个方法?String有没有length()这个方法?

数组没有length()这个方法,有length的属性。String有length()这个方法。

 

12、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的表现,重载Overloading是一个类中多态性的表现。如果在子类中定义某方法与其父类有相同的名称和参数,那么该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,父类中的定义如同被屏蔽了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法重载(Overloading)。Overloaded方法可以改变返回值的类型。

 

13、Set里的元素是不能重复的,那么用什么方法来区分重复与否?用==还是equals()?它们有何区别?

Set里的元素是不能重复的,用iterator()方法区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配时,返回真值。

 

14、error和exception有什么区别?

error表示恢复不是不可能但很困难的情况下的一种严重问题。比如内存溢出。不可能指望程序处理这样的情况。
exception表示一种设计或实现问题。它表示如果程序运行正常,从不会发生的情况。

 

15、GC是什么?为什么要有GC?

GC是垃圾收集器,Java程序员不用担心内存管理,垃圾收集器会自动管理。请求垃圾收集器,可以调用下面的方法之一:
System.gc();Runtime.getRuntime().gc();

 

16、两个对象值相同(x.equals(y)==true),但却可有不同hash code,这句话对不对?

不对,有相同的hash code。

 

17、用最有效率的方法算出2乘以8等于几?

2<<3

 

18、try{}里有一个return语句,那么紧跟在这个try后的finally{}里面code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

 

19、当一个线程进入一个对象的一个synchronized(同步)方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

 

20、启动一个线程是用run() 还是start()?

启动一个线程调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以有JVM调度执行。但此时线程不一定会立即运行。在CPU分配给它时间时,才开始执行。run()方法用于停止一个线程。

 

21、sleep()和wait()有什么区别?

sleep()方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行,因为在那个时刻,其他线程可能正在运行而且没有被调度为放弃执行,除非A:“醒来”的线程具有更高的优先级;B:正在运行的线程因为其他原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象发出wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

 

22、说出你所知道的线程同步的方法。

wait():使一个线程处于等待状态,并释放所持有的对象的lock;
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用sleep要捕捉InterruptedException异常;
notify():唤醒一个处于等待状态的线程,在调用此方法时,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级;
Allnotity():唤醒所有处于等待状态的线程,并不是给所有唤醒线程一个对象的锁,而是让它们竞争;

 

23、是否可以继承String类?

String类是final类故不可以继承。

 

24、构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

 

25、float型float f=3.4是否正确?

不正确,精度不准确,应该用强制类型转换。如:float f=(float)3.4。

 

26、switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(exprl)中,exprl是一个整数表达式。因此传递给switch和case语句的参数应该是int、short、char或byte。long、String都不能作用于switch。

 

27、String是最基本的数据类型吗?

基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不能被继承,不能被修改。为了提高效率节省空间,应该使用StringBuffer类。

 

28、String和StringBuffer的区别?

String的长度是不可变的,StringBuffer的长度是可变的。如果需要对字符串中的内容经常操作,特别是修改时,那么用StringBuffer,如果最后还需要用String,那么使用StringBuffer的toString()方法。

使用StringBuffer主要是在性能上的考虑。String是一种非常常用的数据类型,但由于String是不可变对象,在进行String的相关操作的时候会产生许多临时的String对象。而StringBuffer在操作上是在一个缓冲中进行的,性能要优越得多。不过,一般做为简单的字符串传递和其它操作,只要不改变字符串内容的操作,用String效率会高一些。

 

29、char型变量中能不能存储一个中文汉字?为什么?

能定义一个中文,因为java中以unicode编码,一个char占16个字节。

 

30、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能。

 

31、什么是JSP内置对象?JSP有哪些内置对象?

可以不用声明就在JSP页面脚本中使用的成员变量。
request:封装客户端的请求信息;
response:包含响应客户请求的有关信息;
session:为请求的客户创建的session对象;
application:从servlet配置对象获得的servlet上下文;
out:向输出流写入内容的对象;
pageContext:本JSP页面的上下文;
page:实现处理本页当前请求的类的实例;
config:本JSP的ServletConfig;
exception:JSP页面运行时产生的异常;

 

32、面向对象的特征?

封装、继承和多态。
封装:封装就是将某些东西包装和隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。面向对象将万物都视为“对象”,任何对象都具有特性和行为。我们将其特性称为“成员变量”,将其行为称为“成员函数”,被封装的特性只能通过特定的行为去访问;
继承:继承是一种树状的层次关系。子类在继承父类的成员变量和成员函数的同时也可以定义自己的成员变量和成员函数;
多态:多态就是用父类的引用指向子类的对象。多态允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,解决了应用程序函数同名的问题。

 

33、ArrayList和LinkedList的区别?

ArrayList采用数组形式保存对象,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦。
LinkedList采用将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引,缺点是查找非常麻烦要从第一个索引开始。

 

34、说说ArrayList、Vector、LinkedList的存储性能和特征?

ArrayList和Vector都使用数组方式存储数据,数组元素数大于实际存储的数据以便增加和插入元素,他们都允许直接按序号索引元素,但是插入元素涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

 

35、ArrayList(List)和Vector的区别?

同步性:Vector是线程安全的,同步的。ArrayList(List)是线程不安全的,不是同步的。
数据增长:当数据需要增长时,Vector默认增长原来的一倍,ArrayList(List)增长原来的一半,Vector是序列式容器,作为缺省使用。ArrayList(List)应该用于频繁在序列中部进行插入和删除操作的情况。

 

36、int和Integer有什么区别?

java.lang.Integer是一个类,对它的操作要通过类的方法;
int是java8种基本数据类型之一,不是类的对象;
int是基本数据类型,Integer是对int进行封装的类;
声明为int的变量不需要实例化,声明为Integer的变量需要实例化;
Integer是比int更高级的数据类型;

 

37、java中有哪八种基本类型?它们对应的封装类分别是什么?

int:Integer、char:Character、long:Long、short:Short、boolean:Boolean、float:Float、double:Double、byte:Byte。

 

38、abstract class和interface有什么区别?

声明方法的存在而不去实现它的类叫做抽象类,它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建抽象类的实例。但可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。抽象类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口是抽象类的变体。在接口中,所有方法都是抽象的,都没有程序体。多继承性可通过实现接口获得。接口只可定义static final成员变量。接口的实现与子类相似,除了实现类不能从接口中继承行为。当类实现特殊接口时,它定义所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换。
instanceof运算符可以用来决定某对象的类是否实现了接口。

 

39、抽象类与接口?

抽象类与接口都用于抽象,但是抽象类可以有自己的部分实现,接口完全是一个标识,同时有多重继承的功能。

 

40、作用域public、private、protected以及不写时的区别?

public:在整个包内包外都可使用;

private:除了本类外,都不可直接使用;

protected:同一个包中的类,若不在同一个包中,必须为其子孙类才可使用;

不使用关键字默认为包内使用。

 

41、说说你常见到的runtimeexecption(运行时异常)?

NullPointerException(空指针异常)、ClassCastException(类型强制转换异常)、IndexOutOfBoundsException、SystemException。

 

42、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现接口,抽象类是否可继承实体类,前提是实体类必须有明确的构造函数。

 

43、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口。
同步有两种方法,一种同步方法,一种同步代码。分别是synchronized,wait与notify。

 

44、说说Servlet的生命周期,并说说Servlet和CGI的区别?

Servlet包括加载、实例化初始化、处理请求以及服务结束,这个生命期由java.servlet.Servlet接口的init、service和destroy方法表达。
Servlet被服务器实例化后,容器运行init方法,请求到达时运行service方法,service方法自动运行与请求对应的doXXX方法(doGet、doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与CGI的区别在于servlet处于服务器进程中,它通过多线程方式运行service方法,一个实例可以服务于多个请求,并且实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率低于servlet。

 

45、JSP的常用指令?

Include指令、Page指令、标记库指令。

 

46、JSP中有哪些重定向方法,它们的区别?

①javax.servlet.RequestDispatcher接口的forward方法。
Forward是服务器请求资源,服务器直接访问目标地址的URL,把URL的响应内容读取过来,然后把内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪来的,所以地址栏中地址不变。
②javax.servlet.http.HttpServletResponse接口的sendRedirect方法。
sendRedirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般浏览器会用刚才请求的所有参数重新请求,所以session、request参数都可以获取。

 

47、同步和异步有何异同,在什么情况下分别使用它们?

如果数据需在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过,那么这些数据就是共享数据,必须同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该用异步编程,有时采用异步途径更有效率。

 

48、线程的基本概念、线程的基本状态?

线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少有一个线程,就是程序本身。
java中线程有四种状态:运行、就绪、挂起、结束。

 

49、JSP有哪些动作?作用分别是什么?

JSP共有6种基本动作:
jsp:include--在页面被请求时引入一个文件;
jsp:useBean--寻找或实例化一个JavaBean;
jsp:setProperty--设置JavaBean的属性;
jsp:getProperty--输出某个JavaBean的属性;
jsp:forward--把请求转到一个新的页面;
jsp:plugin--根据浏览器类型为Java插件生成object或embed标记。

 

50、Servlet的基本架构?

 

51、两种跳转方式分别是什么,有什么区别?

<jsp:include page="included.jsp" flush="true"/>
<jsp:forward page="nextpage.jsp"/>
前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用,后者完全转向新页面,不会再回来,相当于goto语句。

 

52、JSP中动态include与静态include的区别?

动态include用jsp:include动作实现,<jsp:include page="included.jsp" flush="true"/>它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态include用include伪码实现,不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm"%>

 

53、应用服务器与WebServer的区别?

应用服务器:Weblogic、Tomcat、Jboss。
WebServer:IIS、Apache。

 

54、J2EE是什么?

j2ee是sun公司提出的多层、分布式、基于组件的企业级应用模型。

 

55、什么情况下调用doGet()和doPost()?

HttpServlet中的service()方法默认调用与HTTP请求的方法相应的do功能。jsp页面中form标签里德method属性为get时调用doGet(),为post时调用doPost()。

 

56、MVC的概念和在项目中的应用。

模型、视图、控制器模式,基本原理是将复杂性分解为三个组件。
这种模式利用了两个技术,JSP生成表示层,Servlet起到了控制器的作用,负责请求处理以及创建JSP使用的Bean或对象。

 

57、get和post的区别?

①get是从服务器获取数据,post是向服务器传送数据;
②以get方式提交的数据在地址栏内可以看到,以post方式提交的数据地址栏内看不到;
③get传送的数据不能大于2KB,post一般被默认为不受限制。在IIS4中最大量为80KB,IIS5中为100KB;
④在做数据查询时,最好用get方式,做添加、修改或删除时,最好用post方式。

 

58、什么是抽象?

抽象包括过程抽象和数据抽象。抽象就是忽略主题中与当前目标无关的方面,以便更充分的注意与当前目标有关的方面。抽象不打算了解全部问题,只是选择其中一部分,暂时不用的部分细节。

 

59、heap和stack有什么区别?

栈是一种线形集合,添加和删除元素的操作应在同一段完成。栈按照后进先出的方式处理。堆是栈的一个组成元素。

 

60、页面间对象传递的方法?

request、session、application、cookie等。

 

61、你所知道的集合类都有哪些?主要方法?

最常用的集合类是List和Map。List包括ArrayList和Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情形。
Map提供了更通用的元素存储方法。Map集合类用于存储键值对,一个键映射到一个值。

 

62、两个int型的整数,不经过第三方变量进行替换?如:a=10,b=5转换后a=5,b=10。

a=a+b;b=a-b;a=a-b。

 

63、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里是值传递还是引用传递?

是值传递。Java语言只有值传递参数。当一个对象实例作为参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

 

64、Class.forName的作用?为什么要用?

Class.forName返回的是一个类。返回一个以字符串指定类名的类的对象。作用是要求JVM查找并加载指定的类,就是说JVM会执行该类的静态代码段。
在Java里任何class都要装载在虚拟机上才能运行,Class.forName就是装载类用的。

 

65、接口、内部类和抽象类的特征?

接口的特征:接口不是类,不能用new实例化一个接口,不能构造接口对象,但能声明接口变量,接口变量必须引用实现了接口的类对象,可以用instanceof检查一个对象是否实现了某个接口,接口可以继承接口,接口可以包含常量,接口中的方法和属性被自动设为public static final,一个类可以实现多个接口。
内部类的特征:内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据,内部类可以对同一个包中的其它类隐藏起来,匿名内部类比较便捷,只有内部类可以是私有类。
抽象类的特征:抽象类可以没有抽象方法,包含一个或多个抽象方法的类,必须被声明为抽象的,抽象类中可以有部分的方法实现,和接口一样抽象类不能被实例化,但可以定义一个抽象类的变量,这个变量只能引用非抽象类的对象,一个类只能扩展一个抽象类。

 

66、运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能出现的非运行时异常,但并不要求必须声明抛出未被捕获的运行时异常。

 

67、JavaScript中弹出窗口有几种方式?

 

最后

以上就是年轻眼睛为你收集整理的Java基础的全部内容,希望文章能够帮你解决Java基础所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部