每天三道面试题2019-09-13

1、为什么函数不能根据返回类型来区分重载?

因为调用时不能够指定类型信息,编译器不知道你要调用哪个函数,如:

float max(float x, float y);
int max(int x, int y);

调用max(1, 2);时无法确定调用的是哪一个,但从这一点来说,仅返回值不同的重载是不应该允许的。
若编译器可根据上下文(语境)来判断出含义,比如:

int f();
void f();

当在int x = f();中,完全没有问题。然而,我们也有可能只是调用一个方法,同时忽略他的返回值,我们通常把这称为“为它的副作用去调用一个方法”,因为我们不关心他的返回值,而是调用方法的其他效果。所以假如我们像这样调用一个方法:f();java怎么去判断f()具体调用的方式呢?而且别人如何识别并理解代码呢?由于存在这一类的问题,所以不能。
补充:
函数的返回值只是作为函数运行之后的一个“状态”,他是保持方法的调用者与被调用者进行通信的关键。并不能作为这个方法的标识。

2、char型变量中能不能存储一个中文汉字,为什么?

可以。因为java中使用的编码是Unicode(在不指定编码时,直接使用字符在字符集中的编号,这是能够达到统一的唯一方法),一个char类型占2个字节(即16比特),一个中文字符在Unicode编码下占2个字节(在utf-8编码下占3个字节),所以放一个中文是没有问题的。
补充:
使用unicode意味着字符在jvm内部和外部有不同的表现形式,jvm内部使用的是unicode,当这个字符被从jvm内部转移到外部时,比如存入文件系统,需要进行编码转换,如果不进行转换则可能会因为编码不同一产生乱码。所以java中有字节流和字符流,以及在字节流和字符流之间转换的转换流,如InputStreamReader和OutputStreamReader,这两个类是字节流和字符流之间的适配器,承担了编码转换的任务。
关于Unicode和utf-8下中文字符的存储前者为什么是两个字节,后者为什么是三个字节,参考:https://www.cnblogs.com/deepblue775737449/p/7604738.html

3、抽像的(abstract)方法是否同时可以是静态的(static),是否可同时是本地方法(native),是否可被synchronized修饰。

都不能。抽象方法需要子类重写,而静态方法是无法被重写的,二者产生矛盾;本地方法是由本地代码(如c代码)实现的,而抽象方法是没有实现的,也产生了矛盾;synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是矛盾的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值