前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java综合面试练习题

java综合面试练习题

作者头像
软件小生活
发布2021-08-13 13:15:00
5760
发布2021-08-13 13:15:00
举报
文章被收录于专栏:软件小生活

1. 什么是多态性?什么是虚拟方法调用?

对象的多态性:父类的引用指向子类的对象。

Person p = new Man(); // 左父右子

p.eat();

调用方法时,编译时看左边,运行时看右边。

虚拟方法调用与普通调用:

正常的方法调用:

V1 e = new V1();

e.setz();

Test3 e = new Test3();

e.setz();

虚拟方法调用(多态情况下):

V1 e = new Test3();

e.setz(); //调用Test3类的getInfo()方法

2. 一个类可以有几个直接父类?一个父类可有多少个子类?子类能获取直接父类的父类中的结构吗?子类能否获取父类中private权限的属性或方法?

一个类只能有一个父类

一个父类可以被任意数量的子类继承

并不能直接获取,如果父类的一些成员被private修饰,那么子类是无法访问的

默认default权限修饰的情况,子类必须和父类同一包下才可访问

如果要异包访问,父类的成员必须声明protected

3. 方法的重写(override/overwrite)的具体规则有哪些?

方法名、形参列表相同

权限修饰符

返回值

抛出的异常

4. super调用构造器,有哪些具体的注意点

this() 调用本类构造器

super() 向上访问父类构造器

super()和this()均需放在构造方法内第一行。

5. 在下面的代码结构中:使用关键字:this,super;方法的重写;继承;

// 圆类

publicclass Circle {

// 半径

private double radius;

// 初始化1

public Circle(){

this.radius = 1;

}

// getter

public double getRadius() {

return radius;

}

// setter

public void setRadius(double radius) {

this.radius = radius;

}

// 求面积

public double getRoundArea(){

return Math.PI * Math.pow(radius,2);

}

}

// 圆柱体类

classCylinder extends Circle{

// 柱长

private double length;

// 初始化1

public Cylinder(){

super();

length = 1;

}

// GETTER

public double getLength() {

return length;

}

//SETTER

public void setLength(double length) {

this.length = length;

}

// 圆柱体积

public double getVolume(){

return getRoundArea() * length;

}

// 圆柱表面积

public double getSurfaceArea(){

// 柱面

final double RECTANGLE_AREA = 2 *Math.PI * getRadius();

// 上底 + 下底

final double UP_AND_DOWN = 2 *getRoundArea();

// 上底下底 + 柱面

return RECTANGLE_AREA + UP_AND_DOWN;

}

}

6. 如何实现向下转型?需要注意什么问题?如何解决此问题?

Person p = new Man();

//使用强转符:()

Man m = (Man)p;

//可能ClassCastException异常。

//使用instanceof在进行向下转型前判断。

if(p instanceof Man){

Manm = (Man)p;

}

7. == 和equals()有何区别?

==用于基本数据类型用比较,比较的是是否相等

==用于引用类型对象,比较的是在内存中的地址是否相等

Equals表示引用所指内容是否相等。

8. classUser{

String name;

int age;

//重写其equals()方法

代码语言:javascript
复制
public boolean equals(Object object){
代码语言:javascript
复制
        if (this == object) return  true;
代码语言:javascript
复制
        else if (object instanceof User){
代码语言:javascript
复制
            User user = (User) object;
代码语言:javascript
复制
            if (this.age == user .age && this.name.equals(user .name))
代码语言:javascript
复制
            return true;
代码语言:javascript
复制
        }
代码语言:javascript
复制
        return false;
代码语言:javascript
复制
    }

}

9. 写出8种基本数据类型及其对应的包装类

boolean  Boolean

char   Chracter

byte    Byte

short    Short

int    Integer

long    Long

float  Float

double  Double

10.基本数据类型、包装类与String三者之间如何转换

基本数据类型 和 包装类 自动装箱和拆箱

包装类 和 String

包装类数值 转 字符串 String.valueOf( 包装类对象 )

字符串 转 包装类数值 Integer.parseInt(字符串)

11、static修饰的属性,相较于实例变量,有哪些特别之处(>=3点)

静态属性 优先 成员属性 加载

静态属性在内存空间是唯一的 多个实例访问静态变量都是同一个静态变量,存在在方法区的静态域

对象可以this.static修饰的属性进行访问

12.final 可以用来修饰哪些结构,分别表示什么意思

可修饰 类、方法、属性、局部变量

- 修饰局部变量表示,这个变量有且只能有唯一的一次赋值

- 修饰属性,同局部一样,但是可以使用显示声明、构造器注入、代码块注入

- 修饰方法, 表示此方法不能被重写,但是可以被重载

- 修饰类,表示类不能被继承,也表示默认隐式的表示方法不能被重写

13. 代码实现单例模式的饿汉式

class Singleton{

private Singleton(){}

private static final Singleton INSTANCE =new Singleton();

public static Singleton getInstance(){

return INSTANCE;

}

}

14、代码实现单例模式的懒汉式 -目前还是线程不安全的。

class Singleton{

private Singleton(){}

private static volatile Singleton instance;

public static Singleton getInstance(){

if (instance == null) synchronized(Singleton.class) {

if (instance == null) instance =new Singleton();

}

return instance;

}

}

15、类的属性赋值的位置有哪些?先后顺序为何?

隐式默认 - 显示初始化 - 代码块初始化 - 构造器注入 -setter注入/对象.属性注入

16.abstract 能修饰哪些结构?修饰以后,有什么特点?

修饰类 该类即为抽象类,不能实例化

修饰方法 该方法即为抽象方法 ,不能有方法体存在

17.接口是否能继承接口? 抽象类是否能实现(implements)接口? 抽象类是否能继承非抽象的类?

接口可以基础接口,还允许继承多接口

- 抽象类可以实现接口,可以不完全实现接口中的抽象方法

- 抽象类可以继承普通类

18、抽象类和接口有哪些共同点和区别?

都不能实例化,可以被继承

- 抽象类有构造器,但是接口没有

- 抽象类只能单继承,接口可以多接口继承

19.遍历一个List有哪些不同的方式?

遍历方式有以下几种:

1、for循环遍历:基于计数器,在集合的外部维护一个计数器,然后依次读取每一个位置的元素,当读到最后一个元素时停止。

2、迭代器遍历:iterator是面向对象的一个设计模式,目前是屏蔽不同数据集和的特点,统一遍历集合的接口。java在Collections中支持了iterator模式。

3、foreach循环遍历:foreach内部也是采用了iterator的方式实现,使用时不需要显示声明iterator或计数器。优点是代码简洁,不易出错;缺点是只能做简单的遍历,不能在遍历过程操作数据集合,如删除、替换等。

20.Array和ArrayList有何区别?什么时候更适合用Array?

Array:它是数组,申明数组的时候就要初始化并确定长度,长度不可变,而且它只能存储同一类型的数据,比如申明为String类型的数组,那么它只能存储S听类型数据

ArrayList:它是一个集合,需要先申明,然后再添加数据,长度是根据内容的多少而改变的,ArrayList可以存放不同类型的数据,在存储基本类型数据的时候要使用基本数据类型的包装类

当能确定长度并且数据类型一致的时候就可以用数组,其他时候使用ArrayList

21.List和 Map区别?

list和map是两种不同的数据结构,list是列表,map是键值对。 list是存储单列数据的集合,map是存储键和值这样的双列数据的集合, List中存储的数据是有顺序,并且允许重复; Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。

22.List,Set, Map是否继承自Collection接口?

代码语言:javascript
复制
List,Set是继承自Collection接口
代码语言:javascript
复制
Map是Map的顶层接口

23.List、Map、Set三个接口,存取元素时,各有什么特点?

List

特有方法get(int index):因为List集合是有索引且存储有序的,可以按照存储顺序取元素

也可以使用迭代器和增强型for循环进行获取值

Set

Set集合因无序存储且无索引,只能够使用迭代器(Iterator)和增强型for循环进行取元素

迭代器:使用hasNext作为where条件,使用next()取元素

增强型for循环:根据格式取出值

Map

Map是双列集合,所以存在取键和值

获取键

使用keySet()方法:获取key的Set集合

获取值

get( Object key):根据键获取值

entrySet();获取entry的Set集合,而entry是键值对的封装

24.你所知道的集合类都有哪些?主要方法?

最常用的集合类接口是List 和 Map。 List的具体实现包括ArrayList、Vector、LinkedList,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情形。 Set的具体实现包括HashSet和TreeSet,它们也是可变大小集合,但不适合用索引取值。 Map 提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。 ArrayList/Vector、LinkedList HashSet/TreeSetàSet Properties/HashTable/TreeMap/HashMap List的主要方法有: add、get、remove、set、iterator、contains、addAll、removeAll、indexOf、toArray、clear、isEmpty Set的主要方法有: add、remove、iterator、contains、addAll、removeAll、toArray、clear、isEmpty Map的主要方法有: put、get、keySet、values、entrySet、clear、remove、isEmpty

25.string和int如何实现互相转换

int -> String

int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf(i);

第三种:String s = Integer.toString(i);

String -> int

s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intValue();

  1. 26.java中异常体系结构是怎样的?请画出体系图
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档