常问面试题总结(JAVA基础篇)

【面试题】 byte、short、int型的数据和char型数据做运算,结果是什么类型?

byte 、char 、short --> int --> long --> float --> double
特别的:当byte、char、short三种类型的变量做运算时,结果都是int型

【面试题】 你能否写出最高效的2 * 8的实现方式?

答案:2 << 3 或 8 << 1

【面试题】 方法的重载和重写的区别:

重载:“两同一不同”,同一个类同一个方法名,不同的形参列表。从编译和运行的角度看,这些同名的方法成了不同的方法.它们的调用地址在编译器就绑定了.所以对于重载而言,在方法调用前,编译器就知道了所要调用的方法.这称为"静态绑定".


重写:“两同一小一大一子” ,
方法名和形参列表必须相同(相同后编译器就会认为子类想重写父类的方法)
子类重写的方法的权限大于或等于父类的权限(子类不能重写private方法)
子类重写的方法的返回值必须和父类的返回值一致或其子类
子类重写父类的方法的异常小于等于父类抛出的异常.


而对于多态而言,只有等到调用方法的那一刻,编译器才知道所要调用哪个具体方法,这称为"动态绑定".其中父类和子类的方法都不能是static方法,同名同参的static方法不认为是重写.

【面试题】 方法参数的值传递机制:

如果方法的形参是基本数据类型,那么实参传递给形参的就是“数据值”,在该方法中操作这个形参不影响传递进来的那个数据;
如果方法的形参是引用数据类型,那么实参传递给形参的就是“地址值”,在该方法中操作这个形参就会影响传递进来的那个数据;

【面试题】 四种权限修饰符的作用范围?(private、缺省、protected、public)

private:同一个类中可见 缺省:同一个包中可见 protected:不同包的子类可见 public:整个项目中都可见
其中,四种权限修饰符都可以修饰类的内部结构(属性、方法、构造器、内部类);但是修饰类的class只能使用public 和 缺省。

【面试题】 属性赋值的先后顺序(①默认初始化值,②显示初始化值,③构造器中,④set中,⑤代码块中赋值):

① === > ② / ⑤ 谁在上面谁先 === > ③ === > ④

【面试题】 main方法里面的输出语句和静态代码块里面的输出语句谁先输出?

静态代码块里的先输出,因为main方法本身是一个方法,也需要通过类去调用,类必须得先加载到内存中,而类加载的同时静态代码块已经执行,main方法还需要类去进一步调用才会执行.

【面试题】 为什么继承了父类之后,子类就会得到父类的属性和方法?

因为我们通过子类的构造器创建子类对象时,我们一定会直接或者间接的加载他所有父类的构造器,直到调用了Object类的空参构造器为止.正因为加载了所有的父类的构造器,所有才能在内存中看到父类的结构,子类对象才可以考虑进行调用.

【面试题】 多态的应用举例:

①很多方法(如equals() )形参为Object类型,如果没有多态,把子类进行填充那将毫无意义
②Java连接数据库时只对外暴漏了简单的接口java.sql.Driver,但真正连接的时候并不知道要连哪个数据库,因此需要有多态性,使数据库厂商去实现java的接口,实例化时得到的连接对象是哪个数据库的,就调用哪个数据库的结构.

【面试题】 多态性并不适用与属性:

子类继承父类后,如果定义了和父类同名的属性,则对父类进行了属性的隐藏,而子类定义和父类同名同参的方法后,是对父类的方法进行了重写;在多态的情况下,父类调用同名方法时会调用子类重写的方法,而调用同名属性时只会调用自己的属性.

【面试题】 对于多态而言,这个对象实际是什么类型的?
实际上这个对象的类型为new之后的类型,但是因为声明的是父类,所以只能看见父类的结构和子类重写父类后的方法.

	Object o1 = new Integer(1);
	System.out.println(o1);//1
	Object o2 = new Object();
	System.out.println(o2);//java.lang.Object@15db9742

【面试题】谈谈你对多态性的理解?

① 实现代码的通用性。
② Object类中定义的public boolean equals(Object obj){ }
JDBC:使用java程序操作(获取数据库连接、CRUD)数据库(MySQL、Oracle、DB2、SQL Server)
③抽象类、接口的使用肯定体现了多态性。(抽象类、接口不能实例化)

【面试题】 ==和equals()的区别:

==:只要使用等等,那么就是比较的地址值. 没重写equals之前,==和equals()一致,比较引用数据类型时比较的都是地址值. 重写equals()后,比较的就是两个对象的属性值是否都相等.

【面试题】 包装类和string的相互转换:

包装类 === > string : 调用String类的静态方法valueOf();
String === > 包装类 :调用包装类的静态方法parseXxx();

【面试题】 数组属于类吗?也继承于Object吗?

是的,数组.getClass()后可以看出数组的类型是"[+数据类型" ,
另外数组可以直接赋值给形参为Object类型的方法,继承于Object类.

【面试题】 饿汉式单例模式和懒汉式单例模式的区别?

饿汉式:线程安全,但是对象加载时间过长.
懒汉式:线程不安全,但是对象延时加载,不会浪费内存.

【面试题】 final关键字可以修饰什么?分别代表什么?

可以修饰类,方法,变量;修饰类代表该类不可被继承;修饰方法代表该方法不可被重写;修饰属性代表该属性是一个常量,可以对该属性赋值的位置有①显示初始化②构造器中初始化③代码块中初始化;修饰局部变量代表该变量是一个常量,一旦赋值后就只能在该方法体内使用该常量,但不能再修改.

【面试题】 native关键字修饰方法时代表什么?

native关键字修饰的方法一般没有方法体,调用该方法时会去底层调用本地的c或c++代码去完成对应的功能,一般隐藏了不对外开放.

【面试题】 static方法可以被重写吗?

不行,父类和子类定义同名同参的方法时,编译器会认为这是两个方法,不认为是重写.

【面试题】 接口和抽象类的区别:

相同点:不能实例化;都可以包含抽象方法的。
不同点:接口:jdk7之前:接口里面只能定义全局常量和抽象方法;jdk8之后接口里面可以定义静态方法和默认方法.抽象类里面既能写抽象方法又能写非抽象方法.
接口中不能定义构造器,抽象类可以 接口多继承,抽象类单继承

【面试题】abstract关键字可以修饰什么,不能修饰什么?

1.abstract可以修饰类、非私有方法、非静态方法、非final方法
2.abstract不能用来属性、构造器、私有方法、静态方法、final的方法、final的类

【面试题】 throw 和 throws区别:

throw 表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。 throws 属于异常处理的一种方式,声明在方法的声明处。

【面试题】如何看待代码中的编译时异常和运行时异常?

体会1:使用try-catch-finally处理编译时异常,是得程序在编译时就不再报错,但是运行时仍可能报错。相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。
体会2:开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally了。针对于编译时异常,我们说一定要考虑异常的处理。

【面试题】final关键字的作用?

1.可以用来修饰:类、方法、变量
2.final 用来修饰一个类:此类不能被其他类所继承。 比如:String类、System类、StringBuffer类

3.final 用来修饰方法:表明此方法不可以被重写 比如:Object类中getClass();

4.final 用来修饰变量:此时的"变量"就称为是一个常量 final修饰属性:可以考虑赋值的位置:显式初始化、代码块中初始化、构造器中初始化 final修饰局部变量:
尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。
static final 用来修饰属性:全局常量

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值