网易首页 > 网易号 > 正文 申请入驻

Java面试题-基础篇

0
分享至

1、是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

2、Integer与int的区别

int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。

例如:要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认值为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。

在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。

另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。

3、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应。

例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

这里有一些笔误,floor的英文意义是地板,该方法就表示向下取整,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;

4、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?

Overload是重载的意思,Override是覆盖的意思,也就是重写。

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

至于Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖时要注意以下的几点:

1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回值一致;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

Overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载时要注意以下的几点:

1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));

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

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

4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

5、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?

接口可以继成接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。

备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答,你想想,如果你是java语言的设计者,你是否会提供这样的支持,如果不提供的话,有什么理由吗?如果你没有道理不提供,那答案就是肯定的了。

只要记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。

6、Java中实现多态的机制是什么?

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

7、abstractclass和interface语法上有什么区别?

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然

eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是publicstatic final类型,并且默认即为publicstatic final类型。

7. 一个类可以实现多个接口,但只能继成一个抽象类。

8、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系!

native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用。例如,FileOutputSteam类要硬件打交道,底层的实现用的是操作系统相关的api实现;例如,在windows用c语言实现的,所以,查看jdk的源代码,可以发现FileOutputStream的open方法的定义如下:

private native void open(Stringname) throwsFileNotFoundException;

如果我们要用java调用别人写的c语言函数,我们是无法直接调用的,我们需要按照java的要求写一个c语言的函数,又我们的这个c语言函数去调用别人的c语言函数。由于我们的c语言函数是按java的要求来写的,我们这个c语言函数就可以与java对接上,java那边的对接方式就是定义出与我们这个c函数相对应的方法,java中对应的方法不需要写具体的代码,但需要在前面声明native。

关于synchronized与abstract合用的问题,我觉得也不行,因为在我几年的学习和开发中,从来没见到过这种情况,并且我觉得synchronized应该是作用在一个具体的方法上才有意义。而且,方法上的synchronized同步锁使用的同步锁对象是this,而抽象方法上无法确定this是什么。

9、内部类可以引用它的包含类的成员吗?有没有什么限制?

完全可以。如果不是静态内部类,那没有什么限制!

如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员,例如,下面的代码:

class Outer

static int x;

static class Inner

voidtest()

syso(x);

10、String s = "Hello";s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?

没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类型的对象转换十分容易。 同时,我们还可以知道,如果要使用内容相同的字符串,不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化,把它设置为初始值,应当这样做:public class Demo {private String s;...public Demo {s = "Initial Value";}...}而非s = new String("Initial Value");后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的 String类型属性s都指向同一个对象。上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。 至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本,即StringBuffer。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
上海威斯汀大饭店大堂被曝有外籍男子当众小便!店方称已报警

上海威斯汀大饭店大堂被曝有外籍男子当众小便!店方称已报警

南方都市报
2024-05-06 11:32:14
美女写真:魔鬼身材,超高颜值!

美女写真:魔鬼身材,超高颜值!

书画艺术收藏
2024-04-30 17:14:53
大乐透第24051期开奖结果:两注千万的一等奖都落在北方两个地区

大乐透第24051期开奖结果:两注千万的一等奖都落在北方两个地区

酷小子玩体彩
2024-05-07 06:52:23
黑美人吉克隽逸,比基尼,别有一番风味

黑美人吉克隽逸,比基尼,别有一番风味

美哒哒好身材
2024-05-07 09:17:25
女子花百万买保时捷Taycan电动车:官方宣称续航414公里,冬天只能开200多公里,天气好最多能行驶306公里

女子花百万买保时捷Taycan电动车:官方宣称续航414公里,冬天只能开200多公里,天气好最多能行驶306公里

和讯网
2024-05-06 10:53:02
国内油价调整消息:新一轮油价大幅下调时间定了!5月7日今日油价

国内油价调整消息:新一轮油价大幅下调时间定了!5月7日今日油价

有料财经
2024-05-07 00:05:24
7-0!亚洲杯揭幕战惨案:朝鲜狂胜韩国,中国女足首战澳洲剑指3分

7-0!亚洲杯揭幕战惨案:朝鲜狂胜韩国,中国女足首战澳洲剑指3分

侃球熊弟
2024-05-06 19:52:28
沙特大满贯5月7日赛程:单打十六强全部出炉,4场焦点大战引关注

沙特大满贯5月7日赛程:单打十六强全部出炉,4场焦点大战引关注

三石体育
2024-05-07 07:34:29
大四女生五天登五岳:是体育生,曾单人18天骑行1200公里

大四女生五天登五岳:是体育生,曾单人18天骑行1200公里

极目新闻
2024-05-06 10:11:50
大祸临头?徐巧芯因涉嫌泄密恐判七年,台相关部门已准备提告!

大祸临头?徐巧芯因涉嫌泄密恐判七年,台相关部门已准备提告!

娱乐圈酸柠檬
2024-05-07 00:38:06
伊万卡也放大招了!在迈阿密出席海滩派对穿迷你小红裙,难得火辣

伊万卡也放大招了!在迈阿密出席海滩派对穿迷你小红裙,难得火辣

时尚丽人风行
2024-05-06 17:03:59
总价6100万,板凳坐穿!巴萨19岁新星哭了:哈维不重视他

总价6100万,板凳坐穿!巴萨19岁新星哭了:哈维不重视他

叶青足球世界
2024-05-06 08:35:04
爆砍43+6,NBA又一位超巨诞生!离开东契奇 是你做的最明智的选择

爆砍43+6,NBA又一位超巨诞生!离开东契奇 是你做的最明智的选择

大卫的篮球故事
2024-05-07 10:41:05
倘若中国缺席巴黎奥运:体育界的微妙转变与全球合作的挑战

倘若中国缺席巴黎奥运:体育界的微妙转变与全球合作的挑战

小豆豆赛事
2024-05-07 00:21:21
湖南省交通厅回应“安慈高速开通2年半就出现裂缝”:情况属实,正在处置

湖南省交通厅回应“安慈高速开通2年半就出现裂缝”:情况属实,正在处置

极目新闻
2024-05-06 16:23:35
马筱梅杀疯了!台媒爆料汪小菲将放弃抚养权,大S评论区炸翻天了

马筱梅杀疯了!台媒爆料汪小菲将放弃抚养权,大S评论区炸翻天了

娱乐的小灶
2024-05-06 15:09:39
五粮液彻底追不上茅台了

五粮液彻底追不上茅台了

蓝鲸财经
2024-05-06 09:50:43
英特尔要求主板制造商在5月31日前将"默认"配置文件作为BIOS默认设置

英特尔要求主板制造商在5月31日前将"默认"配置文件作为BIOS默认设置

cnBeta.COM
2024-05-06 18:07:06
儿子记录妈妈和小姨倒立进车,动作干净丝滑,网友:爸爸好有福气

儿子记录妈妈和小姨倒立进车,动作干净丝滑,网友:爸爸好有福气

碧水青山游
2024-05-05 15:25:35
万众一心,贝尔梦回勇士,广东大胜辽宁,李奕臻未来可期

万众一心,贝尔梦回勇士,广东大胜辽宁,李奕臻未来可期

撒丁岛体育
2024-05-06 22:06:55
2024-05-07 10:50:44
三分江湖气
三分江湖气
仗剑走天涯,看一看世界的繁华
47文章数 467关注度
往期回顾 全部

科技要闻

论文一窥苹果AI大计,Siri这回要变厉害了

头条要闻

约旦国王会见拜登时警告:进攻拉法将导致“新屠杀”

头条要闻

约旦国王会见拜登时警告:进攻拉法将导致“新屠杀”

体育要闻

归化奥斯卡,足协有何顾忌?

娱乐要闻

44岁董洁携顶顶拍杂志 与儿子相互依偎

财经要闻

香飘飘接得住泼天富贵吗?

汽车要闻

售价7.49-9.69万元 2024款奇瑞瑞虎7上市

态度原创

教育
时尚
旅游
本地
军事航空

教育要闻

山西今年上半年高等教育自考成绩可查询

真正衣品好的女人,一般很少穿一身黑,看这些气质女人就行了

旅游要闻

伴游、租妻,「性旅游」正在全球化

本地新闻

食味印象 | 潍坊:碳水脑袋的人间乐园

军事要闻

美国暂停向以色列运送美制弹药

无障碍浏览 进入关怀版