Java中final、finally、finalize的简单区别,中等区别,详细区别(Lawliet 修改+注释版)
- 格式:doc
- 大小:83.00 KB
- 文档页数:9
基础测试基础知识部分:1.谈谈final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
2.HashM ap和Hashtable的区别。
HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map 接口,主要区别在于 HashMap 允许空( null )键值( key ) , 由于非线程安全,效率上可能高于 Hashtable 。
HashMap 允许将 null 作为一个 entry 的 key 或者 value ,而 Hashtable 不允许。
HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和containsKey 。
因为 contains 方法容易让人引起误解。
Hashtable 继承自Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的一个实现。
最大的不同是, Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多个线程访问 Hashtable 时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。
Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一样,所以性能不会有很大的差异。
3.public,private,protected,friendly,internal 的作用范围。
private同一个类中protected同一类中,同一包中,不同包中的该类子类public同一类中,同一包中,不同包中的该类子类,不同包中的该类的非子类friendly同一个类中,同一包中internal 表示在同一个应用程序(Application)或类库(Library)中都可以使用,不过这个我们基本上不用4.Java的接口和抽象类的区别。
《JA V A程序设计》复习题之(二)填空题1.Java是目前最广泛的__________编程语言之一。
2.Java具有简单、___________、稳定、与平台无关、解释型、多线程、动态等特点。
3.JDK开发java程序需三个步骤,分别为______________,编译java源程序,运行java源程序。
4.Java具有简单、面向对象、稳定、与平台无关、解释型、___________、动态等特点。
5.编写Java程序,可以使用一个__________来编写源文件。
6.把编写好的Java源文件保存起来,原文件的扩展名必须是___________。
7.用JDK编译Java源程序,使用的命令是__________,编译源文件得到字节码文件。
8.Java源程序编译后生成的字节码文件扩展名为__________。
9.用JDK运行Java应用程序,使用的命令是__________。
10.Java程序分为两类,即___________和Java小应用程序。
11.用JDK工具,显示Applet程序运行结果的命令是___________。
12.Java程序分为两类,即Java应用程序和___________。
13.一个Java源程序是由若干个___________组成。
14.__________是Java的关键字,用来定义类。
15.Java应用程序中有多个类时,java命令后的类名必须是包含了___________方法的那个类的名字。
16.一个Java应用程序必须且只有一个类含有___________方法。
17.在一个Java应用程序中main方法必须被说明为_____________。
18.Java中所有程序都使用方法,应用程序以______________方法开始。
19.Java源文件中有多个类,但只能有一个类是____________类。
20.一个Java Applet 不再需要main方法,但必须有一个类扩展了_____________类。
极兔java面试题1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。
JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。
简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。
2. == 和 equals 的区别是什么?「== 解读」对于基本类型和引用类型 == 的作用效果是不同的,如下所示:基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同;「equals 解读」equals 本质上就是 ==,只不过 String 和 Integer 等重写了equals 方法,把它变成了值比较。
「总结」:== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
3. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?不对,两个对象的 hashCode() 相同,equals() 不一定 true。
很显然“通话”和“重地”的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode() 相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
4. final 在 Java 中有什么作用?final 修饰的类叫最终类,该类不能被继承。
final 修饰的方法不能被重写。
CoreJavaOOP考试题考试时间:90分钟考试总分:100分一、选择题(不定项选择)(2 * 20 = 40)1.下面哪些行为没有体现了Java的多态性(B)A.方法的覆盖B.抽象方法C.方法的重载D.类型转换2.下列说法正确的是(D)A.所有类都必须定义构造方法(构造器)B.构造方法必须初始化类的所有数据成员C.子类定义了构造器后,不再调用父类的构造器D.构造方法可以访问类的非静态成员3.下面代码运行的结果是(C)class F{Str ing name = “name_F”;private int age;public F(){}}class C extends F{String name = “name_C”;public C(){}public static void main(String[] args){F f = new C();C c = new C();System.out.println( +” ”+);}}_C name_C_C name_F_F name_C_F name_F4.public class Outer{private int index = 10;class Inner{private int index = 20;void print(){System.out.println(_____);System.out.println(_____);}}void print(){System.out.println(_____);}public static void main(String[] args){Outer o = new Outer();Outer.Inner i = o.new Inner();o.print();i.print();}}程序运行的结果是 10 20 10 ,则空白处填写的代码是(D)A.index index indexB.index Outer.index indexC.index index Outer.indexD.index Outer.this.index index5.class Base{static void test(){System.out.println(“Base.test()”);}}public class Child extends Base{static void test(){System.out.println(“Child.test()”);}public static void main(String[] args){Base base = new Child();Child child = new Child();base.test();child.test();}}程序运行的结果是(C)A.Child.test() Child.test()B.Child.test() Base.test()C.Base.test() Child.test()D.Base.test() Base.test()6.类中用多重catch 处理异常时,(B)异常类应最后列出。
JAVA习题一、选择题1.下列哪一种叙述是正确的()A. abstract修饰符可修饰字段、方法和类B.抽象方法的body部分必须用一对大括号{ }包住C.声明抽象方法,大括号可有可无D.声明抽象方法不可写出大括号2.如下代码public class Test {public int aMethod() {static int i = 0; //方法体内不能定义全局变量。
i++;return i;}public static void main (String args[]) {Test test = new Test();test.aMethod();int j = test.aMethod();System.out.println(j);}}输出结果是什么?A. 0B. 1C. 2D. 编译失败3.下列哪种说法是正确的()A.实例方法可直接调用超类的实例方法//私有和子类重写的方法B.实例方法可直接调用超类的类方法//私有精选文库C.实例方法可直接调用其他类的实例方法D.实例方法可直接调用本类的类方法4.如下代码:class Super {public Integer getLenght() { return new Integer(4); }}public class Sub extends Super {public Long getLenght() { return new Long(5); }public static void main(String[] args) {Super sooper = new Super();Sub sub = new Sub();System.out.println(sooper.getLenght().toString() + "," +sub.getLenght().toString() );}}输出是什么?A. 4,4B. 4,5C. 5,4D. 5,5E. 编译失败 //继承重写方法后的返回类型错误5.如下代码10. public Object m() {11. Object o = new Float(3.14F);12. Object [] oa = new Object[1];13. oa[0] = o;14. o = null;15. oa[0] = null;16. print 'return 0';17. }当Float对象在第11行被创建后, 什么时候能够被垃圾回收?A. 13行以后.B. 14行以后.C. 15行以后.D. 16行以后.6.如下代码:class Base {Base() { System.out.print("Base"); }}public class Alpha extends Base {public static void main( String[] args ) {new Alpha(); -----调用父类无参的构造方法new Base();}}结果是什么?A. BaseB. BaseBaseC. 编译失败.D. 代码运行但没有输出.E. 运行时抛出异常7.以下关于异常的说法正确的是:A. 一旦出现异常,程序运行就终止了B. 如果一个方法申明将抛出某个异常,它就必须真的抛出那个异常C. 在catch子句中匹配异常是一种精确匹配D. 可能抛出系统异常的方法是不需要申明异常的8.如下代码:public class Foo {public static void main(String[] args) {try {return;} finally {System.out.println( "Finally" );}}}输出结果是什么?A. FinallyB.编译失败C. 代码正常运行但没有任何输出.D. 运行时抛出异常9.在一个线程中Sleep(1000)方法,将使得该线程在多少时间后获得对CPU的控制(假设睡眠过程中不会有其他事件唤醒该线程)?A. 正好1000毫秒B. 1000毫秒不到C. =>1000毫秒D. 不一定10.下面的语句会产生什么样的输出?System.out.println(4&7);A.4 4二进制 0100B.5 7二进制 0111C.6 4&7二进制 0100D.7E.011.下面的程序中,temp的最终值是什么?long temp=(int)3.9; //temp=3temp%=2;A .0B .1C .2D .3E .412.下面哪个不是JAVA关键字A integer intB doubleC floatD default13.下列标识符(名字)命名原则中,正确的是( )A. 类名的首字母小写B. 变量和方法名的首写字母大写C. 接口名的首写字母小写D.常量完全大写14.类Test1定义如下:1.public class Test1{2. public float aMethod(float a,float b){ return 0;}3.4.}将以下哪种方法插入行3是不合法的。
JAVA语言程序设计考试试题及部分答案一、单选题:(每题1分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项的标记写在题干后的括号内。
1.下列语句序列执行后,k 的值是( B )。
int m=3, n=6, k=0;while( (m++) < ( -- n) ) ++k;A) 0 B) 1 C) 2 D) 32.设i、j 为int型变量名,a 为int型数组名,以下选项中,正确的赋值语句是( B )。
A) i = i + 2 B) a[0] = 7;C) i++ - --j; D) a(0) = 66;3.Java语言的类间的继承关系是( B )。
A) 多重的B) 单重的C) 线程的D) 不能继承4.设有定义int i = 6 ;,则执行以下语句后,i 的值为( C )。
i += i - 1;A) 10 B) 121 C) 11 D) 1005.下列选项中,用于在定义子类时声明父类名的关键字是( C )。
A)interface B) package C) extends D) class6.若已定义byte[ ] x= {11,22,33,-66} ;其中0≤k≤3,则对x数组元素错误的引用是( C )。
A) x[5-3] B) x[k] C) x[k+5] D) x[0]7.下列语句序列执行后,ch1 的值是( B )。
char ch1='A',ch2='W';if(ch1 + 2 < ch2 ) ++ch1;A) 'A' B) 'B' C) 'C' D) B8.下列语句序列执行后,i 的值是( D )。
int i=8, j=16;if( i-1 > j ) i--; else j--;A) 15 B) 16 C) 7 D) 89.下列语句序列执行后,k 的值是( C )。
flatmap面试题第一,谈谈final, finally, finalize的区别。
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。
因此一个类不能既被声明为 abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为final的方法也同样只能使用,不能重载finally—再异常处置时提供更多 finally 块去继续执行任何去除操作方式。
如果扔出一个异常,那么相匹配的 catch 子句就可以继续执行,然后掌控就可以步入 finally块(如果存有的话)。
finalize—方法名。
Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在 Object 类中定义的,因此所有的类都继承了它。
子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。
finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
第二,Anonymous Inner Class (电邮内部类) 与否可以extends(承继)其它类,与否可以implements(同时实现)interface(USB)?匿名的内部类是没有名字的内部类。
不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
第三,Static Nested Class 和 Inner Class的相同,说道得越多越好(面试题有的很笼统)。
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。
Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。
珍藏Java岗位100道面试题及答案详解人帅话不多,社会我康哥,直接上车,以下为总结的100道面试题及答案详解,题比较多,建议先收藏。
目录1:Arraylist和Linkedlist的区别?2:重载与重写有什么区别?3:&和&&有什么区别?4:接口和抽象类有什么区别?5:写出JDBC操作数据库的步骤?6:HashTable和HashMap有什么区别?7:创建多线程的方式有几种?分别是什么?线程死锁是如何产生的?如何防止线程死锁现象?8:String, StringBuffer, StringBuilder 的区别?9:TCP和UDP的区别?哪个是三次握手协议?10:JSP的常用指令有哪些?11:DI有几种方式、分别是什么,你常用的是哪种方式?12:Mybatis中$和#在xml中取值有什么不同?13:Session和Cookie有什么区别?14:GET和POST请求的区别?15:转发(forward)和重定向(redirect)的区别?16:Hibernate与Mybatis区别?17:列举struts2常见的组件有哪些?常见的配置标签有哪些?返回值类型有哪些?18:用最有效率的方法算出2乘以8等于多少?19:Spring常见的注解有哪些?20:Debug模式下,快捷键有哪些,分别代表什么?21:Tomcat如何修改端口号,如何清除项目缓存,默认并发量是多少?22:final, finally, finalize的区别?23:一个汉字几个字节,一个char类型的变量,可以储存一个汉字吗,为什么可以或者不可以?24:谈谈Spring AOP的原理?25:简要说明SSH框架搭建步骤?26:简要说明SSM框架搭建步骤?27:多线程中run和start方法有什么区别?28:静态变量和实例变量有什么区别?29:前后台数据交互的方式有哪些?30:字节流和字符流有什么区别?31:Redis支持哪些数据类型的存储?32:Java如何调用Redis进行数据操作,并列举增删改查操作?33:Nosql主要支持哪两种数据存储系统?34:MongoDB的体系逻辑结构,主要有什么组成?35:Redis和MongoDB分别应用于哪些应用场景?36:Java如何链接MongoDB,写出逻辑代码?37:如何给一张表增加一个字段,写出sql语句?38:==与equals有什么区别?39:++i与i++的区别?40:List和Map有什么区别?41:Integer与int的区别?42:分别写出oracle、mysql的分页关键词?43:谈谈你对MVC的理解?44:如果equals方法比较为true,那么它们的Hashcode值一定相同吗?如果hashcode相同,那么equals方法比较一定为true吗?45:简述servlet 生命周期?46:进程和线程的区别是什么?47:进程的几种状态分别是什么?48:JDK和JRE的关系区别是什么?49:SpringMVC运行原理是什么?50:用户在浏览器中输入URL之后,发什么了什么?写出请求和响应的流程51:响应结果状态码有哪些,并给出中文含义?52:什么是ORM?53:什么是IOC?54:jsp的作用域有哪些?55:sleep 和 wait 有什么区别?56:Java 中的final关键字有哪些用法?57:Error和Exception有什么区别?什么时候需要捕获异常,什么时候需要抛出异常?58:写出冒泡排序的程序代码?59:数据库集群模式下,如何保证主从数据库的数据一致性?以mysql数据库为例进行说明配置步骤?60:简述JAVA中I/O和NIO的区别?61:简述单例模式的特征和应用场景?62:写出将1000个存在重复手机号的号码池去重的JAVA代码?63:Java接口的修饰符有哪些?64:Java支持的数据类型有哪些?什么是自动拆装65:Math.round(11.5)等于多少? Math.round(-11.5)等于多少?66:写一单实例类要求精简、清晰?(单例模式)67:构造器(constructor)是否可被重写(override)?是否可被重载?是否可被继承?68:JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?69:简述synchronized和java.util.concurrent.locks.Lock的异同?70:解析xml和excel分别使用什么技术?71:如何发布spring boot项目,简述步骤?72:什么是java序列化,如何实现java序列化?73:在JAVA中,如何跳出当前的多重嵌套循环?74:面向对象的特征有哪些方面?75:Collection 和 Collections的区别?76:同步和异步有何异同,在什么情况下分别使用他们?举例说明。
1.Struts的运行机制:Web应用初始化时,控制器加载分析配置文件(struts-config.xml),获得ActionMapping,配置应用程序1.ActionServlet接收用户请求2.ActionServlet根据应用程序配置填充ActionForm3.ActionServlet根据ActionMapping调用Action的execute方法4.Action调用业务逻辑类(Model),在简单的程序中也可以在Action的execute方法中执行业务处理5.业务逻辑类将处理结果返回给Action,Action将处理结果保存在适当的作用域范围之内(session、request等)6.Action的execute方法向ActionServlet返回ActionForward指明下一步调用的Action或JSP视图7.JSP视图取得保存在作用域之中的业务处理结果并负责显示HTML页面大家最好用自己的话来总结出来!2.常用的集合以及介绍:(应重点复习)常用集合set、map、listset、map是collection接口的子接口set接口的实现类:HashSet、TreeSetList接口的实现类:ArrayList、linkedListMap接口的实现类:HashMap、TreeMap、Hashtable。
ArrayList和linkedList的区别(略)HashMap、HashTable区别(略)3.遍历map的方法:使用Map接口提供的方法entrySet();import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class MapTest {public static void main(String[] args) {Map<Object, Object> map = new HashMap<Object,Object>();map.put("a", "中国");map.put("b", "ABC");map.put("c", 1000);/*for(Iterator<Entry<Object,Object>> it = map.entrySet().iterator();it.hasNext();){Entry<Object,Object> entry = it.next();System.out.println(entry);System.out.println(entry.getKey());System.out.println(entry.getValue());}*/for(Iterator<Object> it = map.keySet().iterator();it.hasNext();){Object key = it.next();System.out.println(key);Object value = map.get(key);System.out.println(value);}}}4. 字符串相加用“+”和append()的区别用“+“号每加一次创建一个对象,比如:字符串常量池中有原字符串:”abc”之后要加”de”,加过之后内存中会有”abc”、”abcde”两个字符串!但”abc”会失去原本指向它的引用变成垃圾回收机制回收的对象!Append()只是将字符串追加到原字符串的尾部,始终都是一个对象!5.垃圾回收机制原理:当一个对象赋值为null或者没有指引指向他的时候,那么这个对象就符合垃圾回收机制回收的范围,java虚拟机会不定时的对垃圾进行回收,回收对象之前会调用被回收对象的finalize()方法!注意Java虚拟机何时来回收垃圾不确定!6.如何实现多线程:继承Thread类或者实现Runnable接口那种好处多:因为java是单继承所以一般会采用实现Runnable接口两种实现方式的区别:继承Thread类可以创建本类对象直接调用start()方法运行线程(也就是说本类对象就是一个线程个人理解)实现Runnable接口必须用Thread thread = new Thread()来获得一个线程!7. 代码的重构:代码的输入、输出不变,只是改变中间实现代码!8. MVC思想是model、view、controller的缩写,model代表业务逻辑(通过javabean、EJB 组建实现)、view是应用表示面(由jsp页面产生)、controller是提供应用处理过程的控制(一般是一个servlet)。
java复题库习题3.1---习题3.6第三章面向对象程序设计一、选择题1.下列不属于面向对象编程的三个特征的是(B)A.封装B.指针操作C.多态性D.继承2.类所实现的接口以及修饰不可以是(D)A.publicB.abstractC.finalD.void3.下列类的定义,错误的是(D)A.public class test extends Object{……}B.final class operators{……}C.class Point{……}D.void class Point{……}4.关键字supper的作用是(D)A.用来访问父类被隐藏的成员变量B.用来调用父类中被重载的方法C.用来调用父类的构造函数D.以上都是5.关于对象的删除,下列说法正确的是(C)A.必须由程序员完成对象的清除B.java把没有引用的对象作为垃圾收集起来并释放C.只有当程序中调用System.gc()方法时才能进行垃圾收集D.java中的对象都很小,一般不进行删除操作。
二、填空题1.把对象实例化可以生成多个对象,使用____new_____运算符为对象分配内存空间。
2.java程序引入接口的概念,是为了弥补只允许类的____单继承____的缺憾。
3.java语言以___类____为程序的基本单位,它是具有某些共同特性实体的集合,是一种抽象的概念。
4.抽象方法只能存在于抽象类中。
抽象方法用关键字___abstract_____来修饰。
5.java语言中____Object___是所有类的根.6.在java中有一种叫做_____构造函数__的特殊方法,在程序中用它来对类成员进行初始化.7.new是___创建___对象的操作符.8.我们在java程序中,把关键字____super____加到方法名称的前面,来实现子类调用父类的方法9.在java程序里,同一类中重载的多个方法具有相同的方法名和_不同的____的参数列表.重载的方法可以有不同的返回值类型10.java语言通过接口支持__多重____继承,使类继承具有更灵活的扩展性11.java语言中,调用方法时,参数传递是___值___调用,而不是地址调用12.接口是一种只含有抽象方法或___常量___的一种特殊抽象类一、填空题1.在子类中使用关键字_______做前缀可调用被子类覆盖的父类中的方法。
简单区别:
中等区别:
虽然这三个单词在Java中都存在,但是并没有太多关联:
final:java中的关键字,修饰符。
1.如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。
因此,一个类不能同时被声明为absrtact抽象类的和final的类。
2.如果将变量或者方法声明为final,可以保证它们在使用中不被改变.
2.1 被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
2.2被声明final的方法只能使用,不能重载。
finally:java的一种异常处理机制。
finally是对Java 异常处理模型的最佳补充。
finally 结构使代码总会执行,而不管有无异常发生。
使用finally 可以维护对象的内部状态,并可以清理非内存资源。
特别是在关闭数据库连接这方面,如果程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。
finalize:Java中的一个方法名。
Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在Object类中定义的,因此所有的类都继承了它。
子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。
finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。