2021-06-01面试题

面试题大全-基础部分

1. 构造器是否可以被重新?

在继承当中,父类的私有属性和构造方法是不能被继承的,所以构造器不能被重写,但是可以被重载。

2.重载和重写的区别?

**重载**:发生在同一个类中,方法名必须相同,参数类型,个数,顺序不同,返回值和访问修饰符可以不同,发生在编译时。
**重写**:发生在父子类中,方法名和参数列表必须相同,返回值的范围小于等于父类,抛出的异常小于等于父类,访问修饰符范围大于等于父类,如果父类的访问修饰符是private,则子类不能重写该方法。

3.String,StringBuffer,StringBuilder的区别?为什么String是不可变的?

String是使用fianl关键字的字符数组保存字符串private fianl char  value [],所以String是不可变的,StringBuffer和StringBuilder继承AbstractStringBuilder类,在AbstractStringBuilder中也是通过字符串数组保存字符串,但是不是fianl修饰,所以是可变的。
String中的对象是不可变的,也就可以理解为常量,所以是线程安全的;AbstractStringBuilder是StringBuffer和StringBuilder的公共父类,提供了一些基本的字符串基本操作,如append,insert,indexOf等,StringBuffer对方法或者调用的方法添加了同步锁的,所以是线程安全的,StringBuilder没有对方法进行同步锁操作,所以是现成不安全的。
对三者使用的选择:
操作少量的数据:String
单线程字符缓冲区下操作大量数据:StringBuilder
多线程字符缓冲区下操作大量数据:StringBuffer

4.自动拆箱和装箱?

装箱:将基本数据类型用它对应的引用数据类型包装起来,在装箱的时候自动调用的是Integer的valueOf(int)方法;
package com.mao.a_box;
 
public class Test01
{
 
	public Test01()
	{
	}
 
	public static void main(String args[])
	{
		Integer i = Integer.valueOf(10);
		int n = i.intValue();
	}
}
拆箱:将包装类型转换为基本数据类型类型;而在拆箱的时候自动调用的是Integer的intValue方法。

5.为什么一个静态的方法内调用一个非静态成员是不合法的?

因为静态方法可以不通过对象来调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问其他非静态成员;

6.为什么要定义无参数的构造方法?

java程序在执行子类的构造方法时,没有指定调用父类的构造方法,就会默认调用父类默认的无参的构造方法,如父类中有有参的构造方法,就需要定义一个无参的构造方法,否则会发生编译错误。

7.接口和抽象类的区别?

1.接口中的方法默认是public的,所有的方法在接口中不能有实现,(JDK8以后可以有默认的实现);抽象类中可以有非抽象的方法
2.接口中的实例变量是final类型的,抽象类中不一定
3.一个类可以实现多个接口,但是只能继承一个类
4.一个类实现接口要实现接口中的所有方法,抽象类不一定
5.接口不能用new实例化,但是可以用new声明,但是必须引用一个实现该接口的对象。从设计上讲抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为规范;

8.成员变量与局部变量的区别?

1.从语法上看,成员变量属于类,而局部变量是方法中定义的变量或者方法的参数,成员变量可以被public,private,static等访问修饰符修饰,局部变量不能被访问修饰符和static修饰,但是成员变量和局部变量都可以呗final修饰;
2.从内存的存储方式,成员变量属于对象,对象存储在堆内存中,而局部变量存储在栈内存中
3.从内存的存储空间来看,成员变量属于对象的一部分,随着对象的创建而存在,局部变量通过方法的调用而自动消失
4.如果成员变量没有被赋值则会自动以类型的默认值赋值(被fianl修饰的除外),局部变量则不会自动复制

9.一个类的构造方法的作用是什么?如果一个类没有被声明构造方法会运行吗?为什么?

主要是对类对象的初始化工作,可以运行,因为类中会有默认的无参的构造方法

10.构造方法的特性?

1.名字和方法相同;
2.没有返回值,不能使用void声明构造函数
3.生成类对象的时候自动执行,不需调用

11.静态方法和实例方法有哪些不同?

1.调用时,静态方法可以用类名.方法和对象名.方法,而实例方法只能用对象名.方法来调用,静态方法不需要创建对象
2.静态方法在访问本类时,只能访问静态成员(静态方法,静态成员变量),不允许访问实例成员变量和实例方法;实例方法没有限制

12.==和equals的区别?

==:判断两个对象的地址是否相等,即判断两个对象是不是一个对象;(基本数据类型比较的是值,引用数据类型比较的是内存地址)
equals:判断两个对象是否相等
1.如果类没有覆盖equals()方法则比较的是两个对象
2.如果类覆盖了equals()方法,则比较的是两个对象的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值