没有合适的资源?快使用搜索试试~ 我知道了~
java常见面试题(史上最全最经典-希望对你有用)
需积分: 44 139 下载量 20 浏览量
2017-11-12
16:35:31
上传
评论 6
收藏 179KB DOC 举报
温馨提示
试读
39页
java常见面试题(史上最全最经典-希望对你有用).基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。
资源推荐
资源详情
资源评论
1. Java 基础部分
基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语
法,线程的语法,集合的语法, 的语法,虚拟机方面的语法。
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个 的类,并且 的类名必须与文件名相一致。
2、Java 有没有 goto?
中的保留字,现在没有在 中使用。
3、说说&和&&的区别。
和都可以用作逻辑与的运算符,表示逻辑与(),当运算符两边的表达式的
结果都为 时,整个运算结果才为 ,否则,只要有一方为 ,则结果为 。
还具有短路的功能,即如果第一个表达式为 ,则不再计算第二个表达式。
还可以用作位运算符,当操作符两边的表达式不是 类型时,表示按位与操作。
4、在 JAVA 中如何跳出当前的多重嵌套循环?
在 中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环
体的代码中使用带有标号的 语句,即可跳出外层循环。
5、switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?
在 ()中, 只能是一个整数表达式或者枚举常量(更大字体),整数表
达式可以是 基本类型或 包装类型,由于, 都可以隐含转换为 ,
所以,这些类型以及这些类型的包装类型也是可以的。显然, 和 类型都不符合
的语法规定,并且不能被隐式转换成 类型,所以,它们不能作用于 语句中。
6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于 ! "!由于 " 运算时会自动提升表达式的类型,所以结果是 型,
再赋值给 类型 时,编译器将报告需要强制转换类型的错误。
对于 !" !由于" 是 语言规定的运算符, 编译器会对它进行特殊处
理,因此可以正确编译。
7、char 型变量中能不能存贮一个中文汉字?为什么?
型变量是用来存储 # 编码的字符的, 编码字符集中包含了汉字,所以,
型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 编
码字符集中,那么,这个 型变量中就不能存储这个特殊汉字。补充说明: 编
码占用两个字节,所以, 类型的变量也是占用两个字节。
8、用最有效率的方法算出 2 乘以 8 等於几?
$%%&,
10、使用 'nal 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用 ' 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容
还是可以改变的。
11、"=="和 equals 方法究竟有什么区别?
操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中
所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用
操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占
用一块内存(堆内存),变量也占用一块内存,例如 ( ()*!变量 是一
个内存,()*是另一个内存,此时,变量 所对应的内存中存储的数值就是对象
占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一
个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用 操作符进
行比较。
+ 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是
否相同,它比较的两个对象是独立的。例如,对于下面的代码:
),,*!
),,*!
两条 语句创建了两个对象,然后用 - 这两个变量分别指向了其中一个对象,这是两
个不同的对象,它们的首地址是不同的,即 和 中存储的数值是不相同的,所以,表达
式 将返回 ,而这两个对象中的内容是相同的,所以,表达式 .+)*将返回
。
12、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加 关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例
变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于
类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量
就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使
用类名来引用。
13、是否可以从一个 sta*c 方法内部发出对非 sta*c 方法的调用?
不可以。因为非 方法是要与对象关联在一起的,必须创建一个对象后,才可以在
该对象上进行方法调用,而 方法调用时不需要创建对象,可以直接调用。也就是说,
当一个 方法被调用时,可能还没有创建任何实例对象,如果从一个 方法中发出
对非 方法的调用,那个非 方法是关联到哪个对象上的呢?这个逻辑无法成立,
所以,一个 方法内部发出对非 方法的调用。
14、Integer 与 int 的区别
是 提供的 / 种原始数据类型之一。 为每个原始类型提供了封装类,
是 为 提供的封装类。 的默认值为 0,而 的默认值为 ,即 可以
区分出未赋值和值为 0 的区别, 则无法表达出未赋值的情况。例如,要想表达出没有参
加考试和考试成绩为 0 的区别,则只能使用 。
在 1 开发中, 的默认为 ,所以用 表达式在文本框中显示时,值为空白
字符串,而 默认的默认值为 0,所以用 表达式在文本框中显示时,结果为 0,所以,
不适合作为 层的表单数据的类型。
在 2 中,如果将 (3 定义为 类型,那么 2 就可以根据其值是否
为 而判断一个对象是否是临时的,如果将 (3 定义为了 类型,还需要在 4 映射
文件中设置其 5 属性为 0。
另外, 提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数
中还定义了表示整数的最大值和最小值的常量。
15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
6 类中提供了三个与取整有关的方法:、7、,这些方法的作用与它们的英
文 名 称 的 含 义 相 对 应 , 例 如 , 的 英 文 意 义 是 天 花 板 , 该 方 法 就 表 示 向 上 取 整 ,
6.).&*的结果为 $6.)5.&*的结果是5;7 的英文意义是地板,该方法
就表示向下取整,6.).8*的结果为 6.)5.8*的结果是5$;最难掌握的是
方法,它表示“四舍五入”,算法为 6.7)"0.9*,即将原来的数字加上 0.9 后再向
下取整,所以,6.).9*的结果为 $,6.)5.9*的结果为5。
$
16、下面的代码有什么不妥之处?
.)4.+):;<*=>
$. !
?@!
17、请说出作用域 public,private,protected,以及不写时的区别
这四个作用域的可见范围如下表所示。
说明:如果在修饰的元素上面没有写任何访问修饰符,则表示 。
作用域当前类同一 子孙类其他
√√√√
√√√A
√√AA
√AAA
18、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?
重载 ( 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各
不相同(即参数个数或类型不同)。
重写 ( 表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通
过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定
义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
在覆盖要注意以下的几点:
、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
$、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
&、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
B、被覆盖的方法不能为 ,否则在其子类中只是新定义了一个方法,并没有对其进行
覆盖。
在使用重载要注意以下的几点:
、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不
同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是 )7*,
但是不能为 )*);
$、不能通过访问权限、返回类型、抛出的异常进行重载;
&、方法的异常类型和数目不会对重载造成影响;
B、对于继承来说,如果某一方法在父类中是访问权限是 ,那么就不能在子类对其进
行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
如果几个 ( 的方法的参数列表不一样,它们的返回者类型当然也可以不一样。
如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载 (。
这是不行的
19、构造器 Constructor 是否可被 override?
构造器 C 不能被继承,因此不能重写 (,但可以被重载 (。
20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类
(concrete class)?抽象类中是否可以有静态的 main 方法?
接口可以继承接口。抽象类可以实现)44*接口,抽象类是否可继承具体类。抽
象类中可以有静态的 4 方法。
只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有 方法。
21、写 clone()方法时,通常都有一行代码,是什么?
&
有缺省行为,.)*!因为首先要把父类中的成员复制到位,然后才是复制
自己的成员。
22、面向对象的特征有哪些方面
面向对象的编程语言有 B 个主要的特征。
封装:封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件
的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。把握一个原则:把对同一
事物进行操作的方法和相关的方法放在同一个类中,把方法和它操作的数据放在同一个类
中。
抽象:抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只
考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意
力集中在与当前目标有关的方面。
继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个
已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方
法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这
是类之间的一种关系,提高了软件的可重用性和可扩展性。
多态:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调
用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的
实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期
间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让
引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修
改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这
就是多态性。多态性增强了软件的灵活性和扩展性。
23、java 中实现多态的机制是什么?
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调
用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存
里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
24、abstract class 和 interface 有什么区别?
含有 修饰符的 即为抽象类, 类 不能创建 的实例对 象。含有
方 法 的 类 必 须 定 义 为 , 类 中 的 方 法 不 必 是 抽 象 的
类中定义抽象方法必须在具体)C*子类中实现,所以,不能有抽象构造
方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须
定义为 类型。
接口()可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的 。
接口中的方法定义默认为 类型,接口中的成员变量类型默认为
'。
下面比较一下两者的语法区别:
.抽象类可以有构造方法,接口中不能有构造方法。
$.抽象类中可以有普通成员变量,接口中没有普通成员变量
&.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽
象的普通方法。
B.抽象类中的抽象方法的访问类型可以是 , 和(默认类型虽然 下不
报错,但应该也不行),但接口中的抽象方法只能是 类型的,并且默认即为
类型。
9.抽象类中可以包含静态方法,接口中不能包含静态方法
B
8.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任
意,但接口中定义的变量只能是 ' 类型,并且默认即为 ' 类型。
D.一个类可以实现多个接口,但只能继承一个抽象类。
25 、 abstract 的 method 是 否 可 同 时 是 sta*c, 是 否 可 同 时 是 na*ve , 是 否 可 同 时 是
synchronized?
的 4 不可以是 的,因为抽象的方法是要被子类实现的,而 与
子类扯不上关系!
方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实
现的问题,所以,它也不能是抽象的,不能与 混用。
关于 ; 与 合用的问题,我觉得也不行,因为在我几年的学习和开发
中,从来没见到过这种情况,并且我觉得 ; 应该是作用在一个具体的方法上才
有意义。而且,方法上的 ; 同步所使用的同步锁对象是 ,而抽象方法上无法
确定 是什么。
26、什么是内部类?Sta*c Nested Class 和 Inner Class 的不同。
内部类就是在一个类的内部定义的类,内部类中不能定义静态成员,内部类可以直接
访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的
方法体中。
在方法外部定义的内部类前面可以加上 关键字,从而成为 EC,它
不再具有内部类的特性,所有,从狭义上讲,它不是内部类。 EC 与普通类
在运行时的行为和功能上没有什么区别,只是在编程引用时的语法上有一些差别,它可以
定义成 、、默认的、 等多种类型,而普通类只能定义成 和默认
的这两种类型。在外面引用 EC 类的名称为“外部类名.内部类名”。在外面不
需要创建外部类的实例对象,就可以直接创建 EC,例如,假设 是定义
在 ( 类中的 EC,那么可以使用如下语句创建 类:
(. (.)*!
由于 EC 不依赖于外部类的实例对象,所以,EC 能访问外部
类的非 成员变量。当在外部类中访问 EC 时,可以直接使用
EC 的名字,而不需要加上外部类的名字了,在 EC 中也可以直接引
用外部类的 的成员变量,不需要加上外部类的名字。
在静态方法中定义的内部类也是 EC,这时候不能在类前面加 关键字,
静态方法中的 EC 与普通方法中的内部类的应用方式很相似,它除了可以直
接访问外部类中的 的成员变量,还可以访问静态方法中的局部变量,但是,该局部变
量前必须加 ' 修饰符。
27、内部类可以引用它的包含类的成员吗?有没有什么限制?
完全可以。如果不是静态内部类,那没有什么限制!
如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成
员变量,而只能访问外部类中的静态成员,
28 、 Anonymous Inner Class ( 匿 名 内 部 类 ) 是 否 可 以 extends( 继 承 ) 其 它 类 , 是 否 可 以
implements(实现)interface(接口)?
可以继承其他类或实现其他接口。不仅是可以,而是必须F
29、super.getClass()方法调用
下面程序的输出结果是多少?
4..3!
9
剩余38页未读,继续阅读
资源评论
Thinker1990s
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功