JAVA面试题

数组和集合的区别

一、数组声明了它容纳的元素的类型,而集合不声明。


二、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。


三、数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。


[if !supportLists]四、[endif]数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的

集合的集成体系


Map集合能否迭代器遍历

[if !supportLists]1. [endif]在map中虽然不能直接实例化迭代器,但map集合提供了keySet()方法和value()方法,可以通过先将键值输出到一个集合,可意识list集合或者map集合。

2.通过键的集合就可以直接实例化迭代器。

3.在进行迭代操作时,可以通过get()方法,找出每个键对应的值,输出即可。

Vector & ArrayList区别

1)  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。

2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

LinkedList和ArrayList底层如何实现,如何选择使用

ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别: 从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中 间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

TreeSet中成员如何确定比较算法

A:自然排序:要在自定义类中实现Comparerable<T>接口  ,并且重写compareTo方法

B:比较器排序:在自定义类中实现Comparetor<t>接口,重写compare方法


Hashtable & HashMap

Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。

 

HashSet不能添加重复的元素,当调用add(Object)方法时候,

首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素;

如果已存在则调用Object对象的equals方法判断是否返回true,如果为true则说明元素已经存在,如为false则插入元素。

Entry是什么,如何理解

接口Entry是Map<K,V>的内部接口,该接口是用来表示一个键值对的,一个这样的实例就包含K类型的键和V类型的值。包含获取Key、获取value以及设置value的方法,同时需要重写equals和hashCode方法。

该接口有四中方式获取比较器:


1:多态是什么,前提是什么?

多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

2:多态中成员访问的特点?

成员变量   

成员方法

静态方法

多态中的成员访问特点:

A:成员变量

编译看左边,运行看左边。

B:构造方法

    创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。

C:成员方法

        编译看左边,运行看右边。

D:静态方法

编译看左边,运行看左边。

(静态和类相关,算不上重写,所以,访问还是左边的)

由于成员方法存在方法重写,所以它运行看右边。

3:多态的好处及弊端?

好处:提高了代码的扩展性。

弊端:前期建立父类的引用虽然可以接收后期所有该类的子类对象。

  但是只能使用父类中的功能,不能使用子类中的特有功能,

  因为前期的程序无法知道后期的子类的特有内容的。

  但是前期的程序可以使用子类覆盖了父类的方法的内容。

4:什么是向上转型?什么是向下转型?

子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口。

向下转型是把父类对象转为子类对象

5:抽象类概述及其特点?

抽象类的特点

a:抽象类和抽象方法必须用abstract关键字修饰

abstract class 类名 {}

public abstract void eat();

b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口

c:抽象类不能实例化那么,抽象类如何实例化呢?

按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。

d:抽象类的子类

要么是抽象类

要么重写抽象类中的所有抽象方法

6:抽象类成员特点?

A:抽象类的成员特点

a.成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量

b.构造方法:有。

用于子类访问父类数据的初始化。

c.成员方法:既可以是抽象的,也可以是非抽象的。

B:

抽象类的成员特点

C:抽象类的成员方法特性:

a.抽象方法 强制要求子类做的事情。(子类必须对其重写)

b.非抽象方法 子类继承的事情,提高代码复用性。


1.有一个类A,有以下两个构造方法

public A(){}

public A(){

super();

}

没有区别,因为super中调用的也是父类中的无参构造器,而第一个构造器也是系统默认调用该构造器

上述两个构造器有没有区别,为什么?

2.有一个类A,有以下两个构造方法

public A(){

A("Hello")

}

public A(String s){

System.out.println(s);

}

测试类Test

public class Test{

public static void main(String[] args){

A a = new A();

}

}

问:输出结果?为什么?

Hello 因为用类创建对象时并没有参数,所以调用A的无参构造器

3.

public class Test3 {

new B();

}

class A {

public A(String s) {

System.out.println(s);

}

}

class B extends A{

}

问:输出结果?为什么?

  编译错误,因为A中没有无参构造器,但又自己定义了构造器,所以没有默认的无参构造器,B得写super(s)才能调用,并且创建B对象是也没有参数;

4.this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用。

通过上课、习题以及自己测试,理解总结,尽量详细。

this:本类对象的引用

super:父类存储空间的标识(父类对象的引用)

    使用场景

            成员变量:

                    this.变量 本类的成员变量。

                    super.变量 父类的成员变量。

          构造方法:

                      this()本类的构造方法

                      super()父类的构造方法

            成员方法:

                      this.方法名()本类的成员方法

                      super.方法名()父类的成员方法

5.重写和重载的区别。

通过上课、习题以及自己测试,完善之前总结的。

重载不需要看返回值是否一致,而重写需要,重载值是通过参数列表来调用不同方法,而重写是对方法的不同实现。

Overload(重载)

(1) 重载Overload是一个类中多态性的一种表现。是编译时的多态性。方法重载是让类以统一的方式处理不同类型数据的一种手段。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载。

(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数列表。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

(3) 重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

(4) 不能通过访问权限、返回类型、抛出的异常进行重载;

(5) 方法的异常类型和数目不会对重载造成影响;

Override(重写、覆盖)

(1) 父类与子类之间的多态性,对父类的函数进行重新定义。是运行时的多样性。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Override)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

(2)若子类中的方法与父类中的某一方法具有相同的方法名、参数列表和兼容的返回类型,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

(3)子类函数的访问修饰权限不能少于父类的。

6.为什么main()写法固定?

从修饰符、返回值类型、方法名、参数列表等角度说明。

public static void main(String[] args)  public : 说明访问权限  static :说明只要加载该类,该模块先执行  main是程序的入口 。 参数列表是一个String 类型的数组,如果编译时后加输入,则可以按照普通String类型数组理解

7.

public class Test7 {

public static void main(String[] args) {

Y y1 = new Y();

Y y2 = new Y();

}

}

class X {

static {

System.out.println("X的静态代码块");

}

{

System.out.println("X的构造代码块");

}

public X() {

System.out.println("X的无参构造器");

}

}

class Y extends X{

static {

System.out.println("Y的静态代码块");

}

{

System.out.println("Y的构造代码块");

}

public Y() {

System.out.println("Y的无参构造器");

}

}

问:输出结果?为什么?

X的静态代码块

Y的静态代码块

X的构造代码块

X的构造代码块

Y的构造代码块

Y的无参构造器

X的构造代码块

X的构造代码块

Y的构造代码块

Y的无参构造器

4.1整型数据

30  int和Integer有什么区别?


31  int的取值范围


32如何使用八进制和十六进制来表示整型数据


33  long的取值范围


4.2实型数据

34  float和double的取值范围

Float型,内存分配4个字节,占32位

Double型,内存分配8个字节


35实型与整型的相互转换


36如何用BigDecimal类进行精确计算


4.3布尔型数据

37  Java可以用非0来代表true吗?


38  boolean和它的包装类的区别在哪里?


4.4字符型数据

39  char的取值范围


40  char能否存储汉字


41如何使用转义字符


4.5 String型数据(重点背诵)

42字符串字面量是否自动生成一个String对象


43字符串对象池的作用是什么


44  StringBuffer和StringBuilder存在的作用是什么


45如何输出反转过后的字符串


46如何使用指定的字符集创造String对象


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

推荐阅读更多精彩内容

  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 8,504评论 3 93
  • 接口/抽象类意义规范、扩展、回调为其子类提供一个公共的类型 封装子类中得重复内容 定义抽象方法,子类虽然有不同的实...
    MigrationUK阅读 2,163评论 1 28
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,578评论 1 114
  • 1 以下属于面向对象的特征的是() 答:面向对象的特征主要是:封装、继承、多态。而多态的实现主要是函数方法的重载和...
    apollooo阅读 6,342评论 1 2
  • 八月了, 时间的河把你冲过来, 蝉鸣听起来也少了些许气力, 巴掌大的叶子上满是熟络。 这夏末的时节, 阳光透射的叶...
    纳宛阅读 377评论 2 8