JAVA 面试题汇总
改错题
public void doSomething() {
System.out.println(\} }
答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为\0;\。 8)
public class Something {
public static void main(String[] args) {
Something s = new Something();
System.out.println(\}
public String doSomething() {
return \} }
答案: 错。看上去在main里访问doSomething方法没有什么问题,毕竟两个方法都在同一个class里。但仔细看,main是静态的。静态方法不能直接访问非静态方法。可改成\。同理,静态不能访问非静态成员变量。 9)
此处,Something类的文件名叫OtherThing.java class Something {
private static void main(String[] something_to_do) {
System.out.println(\} }
答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。 10) interface A{
~ 41 ~
JAVA 面试题汇总
改错题
int x = 0; } class B{
int x =1; }
class C extends B implements A {
public void pX(){
System.out.println(x); }
public static void main(String[] args) {
new C().pX(); } }
答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的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(\}
class Ball implements Rollable {
private String name; public String getName() {
return name; }
public Ball(String name) {
~ 42 ~
JAVA 面试题汇总
改错题
this.name = name; }
public void play() {
ball = new Ball(\System.out.println(ball.getName()); } }
答案: 错。\Rollable extends Playable, Bounceable\没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的\。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说\实际上是\Ball(\。在Ball类的Play()方法中,\= new Ball(\改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在\这里显示有错。
~ 43 ~
JAVA 面试题汇总
编程题
编程题
1) 在控制台中输入一个字符串,然后按照逆序打印出来 import java.io.*; public class test{
public static void main(String args[]){
StringBuffer str = new StringBuffer(new Scanner(System.in).next());
System.out.println(str.reverse().toString());
}
2) 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1(); Inc inc=tt.new Inc(); Dec dec=tt.new Dec(); for(int i=0;i<2;i++){ }
Thread t=new Thread(inc); t.start();
t=new Thread(dec); t.start();
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+\
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+\
}
class Inc implements Runnable{
~ 44 ~
JAVA 面试题汇总
编程题
}
public void run(){ }
for(int i=0;i<100;i++){ }
inc();
class Dec implements Runnable{ } }
3) 将一个键盘输入的数字转化成中文输出(例如:输入1234567,输出:一百二拾三万四千五百六拾七),请用java语言编一段程序实现! public class Reader { private String strNum;
private String strNumChFormat; private String strNumTemp; private int intNumLen; private String strBegin; public Reader(String strNum) { }
public boolean check(String strNum) { boolean valid = false;
if (strNum.substring(0,1).equals(\ } try {
new Double(strNum); valid = true;
} catch (NumberFormatException ex) {
this.strNum = strNum.substring(1); this.strNum = strNum; public void run(){ }
for(int i=0;i<100;i++){ }
dec();
~ 45 ~