面试题之代码纠错
来源:互联网 发布:yoosee软件下载 编辑:程序博客网 时间:2024/04/29 19:38
1.abstract class Test{
private String name;
public abstract boolean isTrueName(String name){}
}
这个题比较有混淆视听的感觉,他一上来给你来一个private修饰的成员变量!很过人会认为他有错,其实不对,他只是限制了子类对这个name属性的访问,但并不错
真正的错误出现在了这个抽象方法的最后那对大括号了,因为抽象方法不能够有带花括号!abstract method必须以分号结尾;
注意:抽象类也是可以有方法实现的,但是必须得有抽象方法的存在
2.public class Something{
void doSomething(){
private String s=" ";
int l=s.length();
}
}
此处的错误有点简单,就是局部变量前面不能有任何的访问修饰符(public ,protected和private)。final可以用来修饰局部变量
(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)
strictfp, 即 strict float point (精确浮点)。
3.abstract class Something{
private abstract String doSomething();
}
这个很容易判断,因为访问修饰符private只能在本类中访问,但是抽象类是用来继承的,他的抽象方法是要子类实现的的,但是如果用private修饰了之后就不能被子类访问到了,所以此处的就错了
4.public class Something{
public int addOne(final int x){
return ++x;
}
}
这个错也是比较明显的,int x被修饰为了final,也就是说x不能在addOne method中被修改。
5.public class Something{
public static void main(String[] args){
Other o=new Other();
new Something().addOne(o);
}
public void addOne(final Other o){
o.i++;
}
}
class Other{
public int i;
}
和上面的那道题很相似,都是关于final的问题,
但是此题是对的,在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference(比如o=new Other();),那么和上面一样是错的,但是这里面修改的是o的member vairable(成员变量),而o的reference并没有改变,所以正确
6.class Something{
int i;
public void doSomething{
syso(“i=" + i);
}
}
这个是没有错误的,请不要疑神疑鬼的看到面试题让找错就说有错,这个真没错!int i属于instant variable(实例变量,或叫成员变量).instant variable有default value。int的default value是0
7.class Something{
final int i;
public void doSomething(){
syso(”i=“+i);
}
}
这个就在成员变量前面加了一个final就错了,因为final修饰的成员变量没有默认值,必须在constructor(构造器)结束前被赋予明确的值,可以修改为final int i =0;
8.public class Something{
public static void main(String[] args){
Something s=new Something();
syso("s.doSomething() returns”+doSomething());
}
pulic String doSomething(){
return “Do something";
}
}
看上去还是不错的哦!但是还是错了!
乍一看,main方法里面调用了同一个类中的doSomething()方法,毕竟两个methods都在同一个class里,但是仔细看main方法是static的。staticmethod不能直接call non-static methods。
9.这个Something类文件名叫OtherThing.java
class Something{
private static void main(String[] something_to_do){
syso("Do something………………”);
}
}
这个好像很明显
正确,因为没有人说过java的Class名字必须和其文件名相同。但是public class的名字必须和文件名相同
10.
interface A{
int x=0;
}
class B{
int x=1;
}
class C extends B implements A{
public void pX(){
syso(x);
}
public static void main(String[] args){
new C().pX();
}
}
错误,变异的时候就会发生错误,(未明确的X调用),父类还有是实现的接口中有有两个X都匹配(就像在同事import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为public static final 所以可以通过A.x来明确
11.
interface Playable{
void play();
}
interface Bounceable{
void play();
}
interface Rollable extends Playable,Bounceable{
Ball ball=new Ball("PingPang“);
}
class Ball implements Rollable{
private String name;
public String getName(){
return name;
}
public Ball(String name){
this.name=name;
}
public void play(){
ball=new Ball("Football");
syso(ball.getName());
}
}
这个是容易忽略的错误
接口是可以多继承的,这个没有错误。问题处在了interface Rollable里面的”Ball ball=new Ball(“PingPang);"。任何在interface里声明的interface variable(接口变量,也成为成员变量),默认都是public static final。也就是说Ball ball=new Ball(”PingPang");实际上是public static final Ball ball =new Ball(“PingPang")。在Ball类的play()
方法中。”ball=new Ball("Football");改变了ball的引用reference,而这里的ball来自Rollable interface ,Rollable interface 里面的ball是public static final的,final的object是不能被改变reference的,因此,编译器将在ball=new Ball(“Football”)出报错
- 面试题之代码纠错
- 面试题解析之代码的健壮性
- java面试题之代码题
- J2EE面试题之代码查错
- 代码面试题:Subtree
- 最代码面试题
- 几行代码解决淘宝面试题之Clojure版
- 面试题之用伪代码设计缓存
- Java面试题之继承与代码块
- 书中代码纠错之 javascript闭包---
- solr入门之拼写纠错深入研究及代码Demo
- 自己编的有关前端面试题及答案,请路过的大神帮忙纠错
- C++面试题之const面试题
- C++面试题之i++面试题
- C++面试题之sizeof面试题
- C++面试题之sizeof面试题
- 面试题之二
- 面试题之三
- display 和 visibility 的区别
- Reverse Bits
- nodejs module 理解
- lua-cjson安装与使用
- iOS图片加载速度极限优化—FastImageCache解析
- 面试题之代码纠错
- 【HTML】Canvas(1)-绘制图形
- Hbase MemStore
- GitHub上README.md写法总结
- UITextField抖动效果
- My Fedora trouble[7]
- Java线程池使用说明
- java使用JDBC操作MYSQL数据库
- 面试总结-百度(1)