`
youngmaster
  • 浏览: 58258 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java中的120个经典问题 回顾之一

阅读更多

1、面向对象的特征有哪些方面

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

  2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

  3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

  4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

  2、String是最基本的数据类型吗?基本数据类型包括byte、int、char、long、float、double、boolean和short。

  java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

  3、int和Integer有什么区别

  Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

  原始类型封装类

  booleanBoolean

  charCharacter

  byteByte

  shortShort

  intInteger

  longLong

  floatFloat

  doubleDouble

  引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

  4、String和StringBuffer的区别

  JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

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

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

  6、说出Servlet的生命周期,并说出Servlet和CGI的区别。

  Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

  与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

  7、说出ArrayList,Vector, LinkedList的存储性能和特性

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

  8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。

  EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。

  SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。

  对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。

  对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。

  Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJBContainer 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。

  9、Collection 和 Collections的区别。

  Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

  10、&和&&的区别。

  &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

  11、HashMap和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算法都大概一样,所以性能不会有很大的差异。

  12、final, finally, finalize的区别。

  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

  finally是异常处理语句结构的一部分,表示总是执行。

  finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

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

  sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

  wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

  14、Overload和Override的区别。

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

  15、error和exception有什么区别?

  error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

  exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

 

分享自:http://www.abcjava.com/html/JAVA/JAVAjichu/2009/1012/1031.html

分享到:
评论

相关推荐

    我一年Java之路的回顾,反思以及展望

    总之,学习Java编程是一个循序渐进的过程,需要克服初期的困惑,选择合适的学习资源,善用社区支持,不断实践并反思。通过一年的辛勤努力,作者在Java的道路上迈出了坚实的一步,他的经验对后来者具有宝贵的启示。

    43个java 经典手机游戏(打包下载)

    Java是一种广泛应用于移动设备开发的编程语言,尤其在早期的智能手机时代,Java是开发手机游戏的主流技术之一。本资源包含43个经典的Java手机游戏,这些游戏是为触屏设备设计并经过破解,可以无需购买或解锁即可游玩...

    Java十大经典案例

    Java作为世界上最流行的编程语言之一,拥有众多的经典案例,这些案例不仅展示了Java的强大功能,也帮助开发者深入理解其核心概念和编程技巧。以下是对"Java十大经典案例"的详细解析: 1. **银行账户管理系统**:这...

    JAVA中传值与引用问题

    Java作为一种广泛使用的高级编程语言,在设计之初就考虑到了如何避免C/C++等语言中的复杂性,特别是指针操作的复杂性和潜在风险。本文将深入探讨Java中的传值与传引用问题,并通过具体的例子来解析其中的原理。 ###...

    Java 网络编程回顾

    文件名为“TestInternet”的可能是一个测试网络连接的Java程序,包含了Socket、ServerSocket、URL或URLConnection的示例代码。通过分析这个程序,我们可以更好地理解Java网络编程的实际应用。 总结来说,Java网络...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    对Java语言的每个语法都提供了一个或多个例程讲解 大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    对Java语言的每个语法都提供了一个或多个例程讲解 大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 ...

    java李兴华学习笔记之Java常用类库

    根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库的基础知识与实践技巧。课程内容分为两大部分: 1. **上次课程的主要知识...

    基于Java回顾之网络通信的应用分析

    在Java编程中,网络通信是构建分布式系统和网络应用的关键部分。本文将深入探讨如何使用Java实现TCP通信、UDP通信、多播以及非阻塞I/O(NIO)。 首先,让我们关注TCP通信。TCP(传输控制协议)是一种面向连接的、...

    Java中给自己写的方法增加注释

    在Java编程中,注释是不可或缺的一部分,它不仅有助于提高代码的可读性,也有利于团队协作和后期的维护。本篇文章将详细讲解如何在Java中给自己写的方法添加注释,以便于日后查阅和理解。 首先,我们了解Java中的三...

    优化Java堆大小的5个技巧

    JVM内存管理是Java开发人员必须掌握的基本概念之一,它不仅关系到应用的性能,还直接影响到系统的稳定性和可靠性。JVM将内存划分为几个不同的区域: - **Java Heap**:所有JVM厂商均采用的标准内存区域,通常分为...

    Java入门第一季笔记

    ### Java入门第一季笔记 #### Java基本概念及发展概述 - **Java简介**:Java是一种广泛使用的...通过以上内容的学习,初学者能够对Java的基础知识有一个较为全面的理解,为进一步深入学习Java编程打下坚实的基础。

    Java回顾及开发环境建立.ppt

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。Java以其跨平台性、开放性和丰富的远程访问技术,为异构系统的整合提供了强大的支持。这使得Java成为了各行各业信息系统开发的首选技术,...

    Java面试知识回顾.zip

    Java作为世界上最受欢迎的编程语言之一,其面试知识点涵盖了广泛的领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、设计模式、JVM优化、数据库交互以及Oracle数据库的使用等。...

    Java并发编程实践(java concurrency in practice)pdf (java多线程总结.ppt)

    配合`JAVA多线程总结.ppt`,你可以得到一个更直观和简洁的概览,快速回顾和掌握上述关键知识点。虽然中文版翻译可能存在不足,但原版英文书籍通常能更准确地传达作者的意图和细节,值得深入阅读。

    Java经典复习资料

    每个"java复习题"文档可能分别专注于以上某一或多个主题,通过解答这些题目,开发者可以全面地回顾和巩固Java知识,为实际项目开发打下坚实基础。在学习过程中,结合实例和实践是加深理解的关键。希望这份复习资料能...

    java深度历险+深入java虚拟机

    4. **集合框架**:Java集合框架是其强大的特性之一,书中会详细解释List、Set、Map等各种接口和实现类的用法,以及它们之间的区别和选择依据。 5. **IO与NIO**:讲解Java的输入输出系统,包括传统的IO流和非阻塞的...

    Java Magazine MarApr 2018.pdf

    2. Java语言的最新版本:杂志提到了Groovy 3.0,它是基于JVM(Java虚拟机)的语言之一,新版本中添加了许多实用的新特性,这对于使用Groovy进行开发的程序员来说是重要的更新信息。 3. JVM逃逸分析:提到了JVM中的...

    java基础知识及框架平时工作总结

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。本文将深入探讨Java基础知识和常用框架,以及一些开发过程中的经验总结。 首先,我们关注IDE工具。IntelliJ IDEA和Eclipse是Java开发者最...

    JAVA9使用教程

    在开始介绍如何在 Eclipse 中使用 Java 9 之前,我们先简要回顾一下 Java 9 的一些重要特性,这对于更好地理解后续操作有着重要意义。 Java 9 是 Oracle 在 2017 年发布的重要版本之一,它引入了许多新功能和改进,...

Global site tag (gtag.js) - Google Analytics