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

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.

相关推荐
热点推荐
项英牺牲真相:为何多次拒绝毛泽东北上命令?只因自己的两个私心

项英牺牲真相:为何多次拒绝毛泽东北上命令?只因自己的两个私心

阿胡
2025-02-07 15:06:06
88岁日本老头炒股69年赚18亿,规则就两条:跌5%不动跌15%闭眼买

88岁日本老头炒股69年赚18亿,规则就两条:跌5%不动跌15%闭眼买

白浅娱乐聊
2026-07-11 14:53:50
五天票房只有429元,多位明星加盟助力,今年暑期档最惨电影诞生了

五天票房只有429元,多位明星加盟助力,今年暑期档最惨电影诞生了

影视高原说
2026-07-19 08:17:32
世界杯金手套奖怎么选?不是门将零封最多就能拿,评选有个硬核小组

世界杯金手套奖怎么选?不是门将零封最多就能拿,评选有个硬核小组

甜度百分百21
2026-07-19 01:32:22
印度职场歧视截图曝光:印度求职者写信给华裔HR,称“别录中国人,多录印度人”

印度职场歧视截图曝光:印度求职者写信给华裔HR,称“别录中国人,多录印度人”

怪味历史连连看
2026-07-16 17:58:48
英格兰胜法国,创四大不可思议!图赫尔德尚遭讽,姆巴佩完爆梅西

英格兰胜法国,创四大不可思议!图赫尔德尚遭讽,姆巴佩完爆梅西

曦言说
2026-07-19 07:39:18
7月19号正式开播,腾讯,爱奇艺同步连播!这部剧的关注度贼拉高

7月19号正式开播,腾讯,爱奇艺同步连播!这部剧的关注度贼拉高

小邵说剧
2026-07-18 07:46:36
战争要结束了?美国炸了伊朗的命根子,重要性不比德黑兰差

战争要结束了?美国炸了伊朗的命根子,重要性不比德黑兰差

探源历史
2026-07-19 05:25:02
76年许世友在韶山喝酒,女儿低声一句话让他脸色大变:不能再喝了

76年许世友在韶山喝酒,女儿低声一句话让他脸色大变:不能再喝了

浩渺青史
2026-07-19 02:54:50
任天堂Switch原价50美元游戏骨折价2.49美元,仅剩72小时截止至7月21日

任天堂Switch原价50美元游戏骨折价2.49美元,仅剩72小时截止至7月21日

热搜摘要官
2026-07-19 00:15:25
身份证换了,“麻烦”来了

身份证换了,“麻烦”来了

布衣乱弹
2026-07-18 17:56:07
不破不立,倒查10年,大检举时代,来临!

不破不立,倒查10年,大检举时代,来临!

创始人笔记
2026-07-15 00:01:48
《焦点访谈》批评湖南“纸上种稻”,为何没引来批评反倒大片求情

《焦点访谈》批评湖南“纸上种稻”,为何没引来批评反倒大片求情

三农雷哥
2026-07-18 17:45:48
阿根廷天塌了!决赛主裁判敲定,4年前吹输沙特的“苦主”又来了

阿根廷天塌了!决赛主裁判敲定,4年前吹输沙特的“苦主”又来了

小正说娱乐
2026-07-19 07:19:09
曼城哭晕!穆里尼奥重磅挖人!世界杯真核铁心加盟皇马

曼城哭晕!穆里尼奥重磅挖人!世界杯真核铁心加盟皇马

澜归序
2026-07-19 04:18:32
阿根廷已赢得三座大力神杯,若再夺冠将超越德国独占历史最多

阿根廷已赢得三座大力神杯,若再夺冠将超越德国独占历史最多

懂球帝
2026-07-16 07:39:09
三里屯姐妹共享男伴!九亿姐的“地头蛇”男友!

三里屯姐妹共享男伴!九亿姐的“地头蛇”男友!

八卦疯叔
2026-07-16 11:21:20
体坛丑闻!中国花样游泳奥运金牌教练贺晓初落马,罪恶行为被曝光

体坛丑闻!中国花样游泳奥运金牌教练贺晓初落马,罪恶行为被曝光

傲傲讲历史
2026-07-16 20:53:56
女人最难忘的男人,不是对她好的,而是给过这种感觉的!

女人最难忘的男人,不是对她好的,而是给过这种感觉的!

皓皓情感说
2026-06-06 08:04:02
姆巴佩获两神迹,却陷三大争议!中场换球衣遭炮轰,赛后言不由衷

姆巴佩获两神迹,却陷三大争议!中场换球衣遭炮轰,赛后言不由衷

展望战史
2026-07-19 08:40:52
2026-07-19 09:55:00
三分江湖气
三分江湖气
仗剑走天涯,看一看世界的繁华
47文章数 467关注度
往期回顾 全部

科技要闻

WAIC2026看什么?这份"不迷路"攻略请收好

头条要闻

牛弹琴:一觉醒来中东杀红眼 伊朗让美军付出重大代价

头条要闻

牛弹琴:一觉醒来中东杀红眼 伊朗让美军付出重大代价

体育要闻

英格兰集体领铜牌 德尚最后一舞落泪

娱乐要闻

大S给具俊晔留遗产是昏头?实际上她清醒得很

财经要闻

任泽平VIP会员自称爆仓巨亏千万

汽车要闻

把中国超跑卖到英国,比亚迪正在被世界看见

态度原创

本地
旅游
健康
手机
公开课

本地新闻

十年了,为什么鬼怪CP还能让人美美嗑上?

旅游要闻

内蒙古自治区第36届旅游那达慕今日启幕

刮痧也会刮出脑梗?讲个真实案例

手机要闻

WAIC 2026手机观察:从豆包到Agent OS,手机开始接管一切

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版