Java程序设计复习题

1. ==与equals的区别

对于引用数据类型来说,==是比较它们的内存空间是不是相同的,而equals是比较它们的值

2. abstract class和interface的区别?

  • Interface需要实现,要用implements,而abstract class需要继承,要用extends。
  • 一个类可以实现多个Interface,但一个类只能继承一个abstract class。
  • Interface强调特定功能的实现,而abstract class强调所属关系。
  • 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。Interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),Interface 的实现类必须要实现,而abstract class的子类可以有选择地实现。

3. final, finally, finalize的区别

  1. Final

修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

  1. Finally

在异常处理时提供 finally 块来执行任何清除操作。
finally是在try-catch-finally块中配套使用,作用是不管代码执行了try还是catch,无论是否异常,最后总是会执行finally里面的代码

    //例子:
    try{
        //这里写一些可能出现异常的代码
    }catch(Exception e){
        //出现了异常就执行这里的代码。否则不执行
    }finally{
        //无论有没有异常,都执行这里的代码
    }
  1. Finalize

方法名。Java允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。finalize是召唤垃圾收集器的命令,使用后,系统就安排一次垃圾回收。但是否立即执行,执行的时间点是无法确定的。

4. error和exception有什么区别?

  • error

属于编译时错误,根本不会编译通过,也就是不会生成.class文件,比如,内存资源不足等,对于这种错误,程序基本无能为力,除了退出运行外别无选择。Error表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,Error类对象由Java虚拟机生成并抛出。

  • exception

属于运行时错误,只有在调用的时候才会报错,比如空指针或数组下标越界等等,Exception(违例)表示需要捕捉或者需要程序进行处理的异常,Exception类对象由应用程序处理或抛出。

5.Java多态的实现(继承 重载 覆盖)

  1. 继承(inheritance)

一旦你已经创建了一个定义了对象一般属性的父类,该父类可以被继承以生成特殊用途的类。每一个子类只增添它自己独特的属性。这是继承的本质。Java 不支持多父类的继承。

  1. 重载(overload)
    • 方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。。
    • 对返回类型无限制,返回类型不能用来区分重载的方法。
    • 对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
  2. 覆盖(override)(方法的重写)

是指子类对自父类继承的方法进行重新的定义。
要求:相同的方法名称、参数列表、返回值。
从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。

6. 工厂模式的定义、原理与作用

  1. 定义

提供创建对象的接口

  1. 原理

创建一个抽象工厂,它决定返回哪一个类的实例并将该实例返回。接下来可以调用那个类实例的方法,但不需要知道具体使用的是哪一个子类,这种方法把和数据相关的问题与类的其他方法分隔开来

  1. 作用

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
编码设计法则:
(1)OCP法则(开闭原则:一个软件的实体应该对扩展开放,对修改关闭)
(2)DIP法则(依赖倒转:抽象不应当依赖于细节,细节应当依赖于抽象)

7. 多线程的实现方法

创建线程有两种方法:继承Thread类和实现Runnable接口。

  1. 继承Thread类:

一个Thread类的对象代表一个线程

启动线程——start( ) 启动线程时,由java直接调用public void run()
运行线程的主体——run ( )
暂停线程的执行——sleep(),让出CPU给其他线程使用,在指定的时间后,CPU回到刚才暂停的线程上执行。

  1. 实现Runnable接口:

该类中只有一个run()方法,我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread 类的实例,这一点通过 Thread 类的构造函数public Thread(Runnable target);来实现

8. 类、抽象类、接口之间的联系与区别

  • 答案一

abstract class是interface与Class的中介。interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。然而,interface却可以声明常量变量。abstract class在interface及Class中起到了承上启下的作用。'
一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;
另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。

  • 答案二

具有关键字abstract ,在实现内容上没有完全定义的类就叫抽象类。
抽象类和接口的区别如下:

  • 在类来继承抽象类时,只需实现部分具体方法和全部抽象方法,而实现接口则要实现里面的全部方法。
  • 在接口中无成员变量,而抽象类中可有成员变量。
    在Java中引进接口主要是为了解决多继承的问题。
    1. 接口中不能有非抽象方法,但抽象类中可以有。
    2. 一个类能实现多个接口,但只能有一个父类。
    3. 接口并不属于继承结构,它实际与继承无关,因此无关的类也可以实现同一个接口。

9. 位运算符和逻辑运算符的区别

java的位运算符包括:

  1. “按位与”运算符 &(双目运算符)
  2. “按位或”运算符 | (双目运算符)
  3. “按位非”运算符 ~ (单目运算符)
  4. “按位异或”运算符 ^(双目运算符)

Java 的逻辑运算符包括$$、||、!

两者不同的是:位运算符要计算完a和b之后再给出运算的结果。
比如,X的初值是1,经过((y=1)==0)&&((x=8)==8);逻辑运算比较后,X的值仍然是1,因为前面的判断结果为false,不再执行后面的语句。
但是如果经过((y=1)==0)&((x=8)==8);位运算之后,X的值是8

10. 上溯造型与下溯造型

  • 上溯造型

把子类类型转换为父类类型-自动完成。

  • 下溯造型:把父类类型转换为子类需要进行强制转换。

规定:
并不是任意一个对象都能够进行下溯造型。只有曾经上溯造型过的对象才能进行下溯造型。对象不允许不经过上溯造型而直接下溯造型。否则运行时会抛出java.lang.ClassCastException.

11. 访问控制修饰符的作用,可见范围的区分

  • 作用

防止程序员接触到他们不该接触的东西

  • 区分
可见度 Public Protected Private 缺省
同一类中可见
同一包中对子类可见
同一包中对非子类可见
不同包中对子类可见
不同包中对非子类可见

12. Java垃圾收集方法

java垃圾回收由java虚拟机自己调用,程序员不用管

两种方法是

  1. System.gc()
  2. Runtime.gc()

13. Java中的参数传递

JAVA中的参数传递全是以值传递的。是基本类型,就拷贝一个基本类型传进方法;是引用,就拷贝一个引用变量传进去方法。你可以通过方法来改变被引用的对象中的属性值,却无法改变这个对象引用(Object reference)本身.也就是当一个对象的实例被创建的时候.

//like this:
Apple a = new Apple(); //a 存的就是这个对象Apple实例的地址
//而这个地址,也就是a的值作为参数传到某个函数中的时候,a本身是不会改变的。

14. Java中堆与栈的理解及其作用

  • 答案一

Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放,堆是由垃圾回收来负责的。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。

在方法中定义的一些基本类型的变量和引用变量都是在方法的栈内存中分配。当在一段代码块(也就是一对{}之间)定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后, Java会自动释放为该变量分配的内存空间。

  • 答案二:

堆是先进先出,而栈是先进后出

  1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
    • 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。
  • 堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

15。 类图的表示

自己看资料

16. 简述this、super、static关键字的作用

  • super
  1. 引用父类的成员:super.变量 或 super.方法([参数列])
    当然,这需要相应的访问权限
  2. 在子类构造方法中调用父类的构造方法:
    super([…]);//与this用法类似,应放在子类构造方法的第一行位置上
    请注意:父类变量的初始化只能通过调用super([…])方法,由父类来完成,子类不可能“代劳”。只有父类变量的初始化完成之后,子类才开始其新增变量的初始化工作。
  • static:

可以在类的字段、方法前加上static关键字,表明该变量、该方法是属于类的,故称为类属性或类方法。(而无static修饰的,则称为实例属性量或实例方法)
说明
静态成员属于类所有,不属于某一具体对象私有;
静态成员随类加载时被静态地分配内存空间或入口地址,通常通过 类名.静态成员 方式来访问;
同一个类的实例方法可以访问该类的类属性、类方法;
而类方法只能访问该类的类属性、类方法,不能直接访问实例的变量和方法,也不能使用this关键字。

  • this:

this关键字表示的是“当前对象”,当出现在类的实例方法中,代表的是调用该方法的对象;当出现在类的构造方法中时,代表的是调用该构造方法创建的对象。
在下列两种情况下,必须使用this

  • 方法的形式参数与类的成员变量同名:
  • 在内部类中使用外部类的同名成员变量的时候

17. 集合基本概念与用法

集合的类型一共有三种,分别是:set list map

  • set

无重复元素,无序的。不维护元素的次序。

  • list

对象以线性方式存储。在数据结构中表现为数组、响亮、链表、堆栈和队列。

  • map

每个元素由key-value构成。key是唯一的。

18. 编码原则与关系的种类

  • 七大原则

  • SRP法则(单一职责原则)

就一个类而言,应该仅有一个引起他变化的原因.

  • OCP法则(开闭原则,Open-Closed Principle)

一个软件的实体应该对扩展开放,对修改关闭。

  • LSP法则(里氏转换原则, Liskov Substitution Principle)

使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。

  • DIP法则(依赖倒转, Dependence Inversion Principle)

抽象不应当依赖于细节,细节应当依赖于抽象。•理解:要依赖于抽象,不要依赖于具体,要针对接口编程,不针对实现编程。

  • ISP原则(接口隔离原则,Interface Segregation Principle)

使用多个专门的接口比使用单一的总接口要好。

  • CARP原则(合成/聚合复用原则, Composite/Aggregate Reuse Principle)

要尽量使用合成/聚合,尽量不要使用继承。

  • LoD法则(迪米特法则, Law of Demeter)

一个对象应当对其它对象有尽可能少的了解。“不要和陌生人说话”

  • 五大关系:

  • 一般化关系
  • 关联关系
  • 聚合关系
  • 组合关系
  • 依赖关系

19. 代码重构的作用与方法

  • 作用

系统发展到一定阶段后,使用重构的方式,不改变系统的外部功能,只对内部的结构进行重新的整理。通过重构,不断的调整系统的结构,使系统对于需求的变更始终具有较强的适应能力。

  • 方法

过大的类和过长的方法 需要想办法将其划分为多个小方法,以便于分而治之。
过度耦合的信息链 需要查看就否有可移除的中间层,或是否可以提供更直接的调用方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,200评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,526评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,321评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,601评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,446评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,345评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,753评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,405评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,712评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,743评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,529评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,369评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,770评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,026评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,301评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,732评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,927评论 2 336

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,514评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,034评论 0 62
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,612评论 0 11
  • *字典(无序数据集)* * swift 的Dictionary类型被桥接到Foundation的NSDiction...
    Windv587阅读 382评论 0 0
  • 梗 一 风里带着的梗像如隐若现对准你的枪口大炮。 我似乎很在意,却是真的在意。 过去了的在心上插把刀又硬生生拔出来...
    胥大米阅读 365评论 0 0