Java面试题库:Java基础(三)

发布时间: 5年前 (2019-11-28)浏览: 1184评论: 0
51.在Java中,为什么基本类型不能做为HashMap的键值,而只能是引用类型,把引用类型做为HashMap的键值,需要注意哪些地方。
  • 在Java中是使用泛型来约束HashMap中的key和value的类型的,即HashMap< K, V>;而泛型在Java的规定中必须是对象Object类型的,也就是说HashMap< K, V>可以理解为HashMap< Object, Object>,很显然基本数据类型不是Object类型的,因此不能作为键值,只能是引用类型。虽然我们在HashMap中可以这样添加数据:“map.put(1, “Java”);”,但实际上是将其中的key值1进行了自动装箱操作,变为了Integer类型。

52.简述Java中如何实现多态

实现多态有三个前提条件:

  • 继承的存在;(继承是多态的基础,没有继承就没有多态)。

  • 子类重写父类的方法。(多态下会调用子类重写后的方法)。

  • 父类引用变量指向子类对象。(涉及子类到父类的类型转换)。

最后使用父类的引用变量调用子类重写的方法即可实现多态。

53.以下对继承的描述锚误的是 ()

A
Java中的继承允许一个子类继承多个父类
B.
父类更具有通用性,子类更具体
C.
Java中的继承存在着传递性
D.
当实例化子类时会递归调用父类中的构造方法
答案:A
分析:Java是单继承的,一个类只能继承一个父类。

54.Java 中 Math.random()/Math.random()值为?

如果除数与被除数均为0.0的话,则运行结果为NaN(Not a Number的简写),计算错误。

55.Java中,如果Manager是Employee的子类,那么Pair是Pair的子类吗?

不是,两者没有任何关联;

Pair是单独的类,只不过用不同类型的参数(泛型)进行了相应的实例化而已;所以,Pair< Manager>和Pair< Employee>不是子类的关系。

56.接口和抽象类的区别

抽象类和接口均包含抽象方法,类必须实现所有的抽象方法,否则是抽象类

抽象类和接口都不能实例化,他们位于继承树的顶端,用来被其他类继承和实现

两者的区别主要体现在两方面:语法方面和设计理念方面

语法方面的区别是比较低层次的,非本质的,主要表现在:

接口中只能定义全局静态常量,不能定义变量。抽象类中可以定义常量和变量。

接口中所有的方法都是全局抽象方法。抽象类中可以有0个、1个或多个,甚至全部都是抽象方法。

抽象类中可以有构造方法,但不能用来实例化,而在子类实例化是执行,完成属于抽象类的初始化操作。接口中不能定义构造方法。

一个类只能有一个直接父类(可以是抽象类),但可以充实实现多个接口。一个类使用extends来继承抽象类,使用implements来实现接口。

抽象类体现了一种继承关系,目的是复用代码,抽象类中定义了各个子类的相同代码,可以认为父类是一个实现了部分功能的“中间产品”,而子类是“最终产品”。父类和子类之间必须存在“is-a”的关系,即父类和子类在概念本质上应该是相同的。

接口并不要求实现类和接口在概念本质上一致的,仅仅是实现了接口定义的约定或者能力而已。接口定义了“做什么”,而实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。接口和实现之间可以认为是一种“has-a的关系”

57.同步代码块和同步方法有什么区别
相同点:

同步方法就是在方法前加关键字synchronized,然后被同步的方法一次只能有一个线程进入,其他线程等待。而同步代码块则是在方法内部使用大括号使得一个代码块得到同步。同步代码块会有一个同步的“目标”,使得同步块更加灵活一些(同步代码块可以通过“目标”决定需要锁定的对象)。

一般情况下,如果此“目标”为this,同步方法和代码块没有太大的区别。

区别:

同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁。很明显,同步方法锁的范围比较大,而同步代码块范围要小点。一般同步的范围越大,性能就越差。所以一般需要加锁进行同步的时候,范围越小越好,这样性能更好。

58.静态内部类和内部类有什么区别

静态内部类不需要有指向外部类的引用。但非静态内部类需要持有对外部类的引用。

静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。

非静态内部类能够访问外部类的静态和非静态成员。静态内部类不能访问外部类的非静态成员,只能访问外部类的静态成员。

实例化方式不同:

  • 静态内部类:不依赖于外部类的实例,直接实例化内部类对象

  • 非静态内部类:通过外部类的对象实例生成内部类对象

59.反射的概念与作用
反射的概念:

反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。

Java反射可以于运行时加载,探知和使用编译期间完全未知的类.

程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能调用他的任意一个方法和属性;

加载完类之后, 在堆内存中会产生一个Class类型的对象(一个类只有一个Class对象), 这个对象包含了完整的类的结构信息,而且这个Class对象就像一面镜子,透过这个镜子看到类的结构,所以被称之为:反射.

java反射使得我们可以在程序运行时动态加载一个类,动态获取类的基本信息和定义的方法,构造函数,域等。

除了检阅类信息外,还可以动态创建类的实例,执行类实例的方法,获取类实例的域值。反射使java这种静态语言有了动态的特性。

反射的作用:

通过反射可以使程序代码访问装载到JVM 中的类的内部信息

  • 获取已装载类的属性信息

  • 获取已装载类的方法

  • 获取已装载类的构造方法信息

反射的优点:

增加程序的灵活性。

如struts中。请求的派发控制。

当请求来到时。struts通过查询配置文件。找到该请求对应的action。执行方法。

然后通过反射实例化action。并调用响应method。

如果不适用反射,那么你就只能写死到代码里了。

所以说,一个灵活,一个不灵活。

很少情况下是非用反射不可的。大多数情况下反射是为了提高程序的灵活性。因此一般框架中使用较多。因为框架要适用更多的情况。对灵活性要求较高。

60.提供Java存取数据库能力的包是()

A
java.sql
B.
java.awt
C.
java.lang
D.
java.swing
答案:A
分析:
java.awt和javax.swing两个包是图形用户界面编程所需要的包;
java.lang包则提供了Java编程中用到的基础类。

61.下列运算符合法的是()(多选)

A
&&
B.
<>
C.
if
D.
=
答案:AD
分析:
&&是逻辑运算符中的短路与;
<>表示不等于,但是Java中不能这么使用,应该是!=;
if不是运算符;
=是赋值运算符。

62.执行如下程序代码,c的值打印出来是()
  • public class Test1 {    public static void main(String[] args) {      int a = 0;      int c = 0;      do {        --c;        a = a - 1;      } while (a > 0);      System.out.println(c);    }  }

A
0
B.
1
C.
-1
D.
死循环
答案:C
分析:
do-while循环的特点是先执行后判断,所以代码先执行--c操作,得到c为-1,之后执行a=a-1的操作,得到a为-1,然后判断a是否大于0,判断条件不成立,退出循环,输出c为-1。

63.下列哪一种叙述是正确的()

A
abstract修饰符可修饰字段,方法和类
B.
抽象方法的body部分必须用一对大括号{}包住
C.
声明抽象方法,大括号可有可无
D.
声明抽象方法不可写出大括号
答案:D
分析:
abstract只能修饰方法和类,不能修饰字段;
抽象方法不能有方法体,即没有{};
同B。

64.下列语句正确的是()

A
形式参数可被视为local Variable
B.
形式参数可被视为local Variable
C.
形式参数可被所有的字段修饰符修饰
D.
形式参数为方法被调用时,真正被传递的参数
答案:A
分析:
local Variable为局部变量,形参和局部变量一样都只有在方法内才会发生作用,也只能在方法中使用,不会在方法外可见;
对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误;
真正被传递的参数是实参;
形式参数可是基本数据类型也可以是引用类型(对象)。

65.下列哪种说法是正确的()

A
实例方法可直接调用超类的实例方法
B.
实例方法可直接调用超类的类方法
C.
实例方法可直接调用其他类的实例方法
D.
实例方法可直接调用本类的类方法
答案:D
分析:
实例方法不可直接调用超类的私有实例方法;
实例方法不可直接调用超类的私有的类方法;
要看访问权限。


标签:

上一篇: 深入理解PHP的运行模式
下一篇: Java面试题库:Java基础(二)

相关文章暂无相关
评论列表暂无评论
发表评论
验证码

«   2024年4月   »
1234567
891011121314
15161718192021
22232425262728
2930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接
    • RainbowSoft Studio Z-Blog
    • 订阅本站的 RSS 2.0 新闻聚合
    ︿
    Top