java面试题
一:学习Java基础的目的?
一、掌握基本的Java语言底层编码方法,同时掌握Java这门语言的编程思想,为了后期学习JavaEE打下基础,要不然在学习JavaEE的时候,连封装,继承,多态都不懂.
二、在学习完JavaSE和JavaEE后招工作的时候能够答上面试题和笔试题(Java基础在面试的过程中也占不小的一部分)。
二:String是最基本的数据类型吗?
String 是引用数据类型。基本数据类型包括byte、int、char、long、float、double、boolean和short。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类,JDK1.5版本之后出现了StringBuilder,StringBuilder是线程不同步的,Stringbuffer是线程同步的,开发建议使用StringBuilder,,提高了效率。
三:String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
四:Java语言的基础开发工具是:( JDK ),集成开发工具是: ( Eclipse )
五:已知字符a的编码是97,大写字符A的编码是65,而且大写字符和小写字符的编码都是连续的,则小写字符e和大写字符E的编码依次是:(101,69)
六:修改以下代码中的错误:
char c = 100000;数值超出char的取值范围
七:Java有没有goto?
java中的保留字,现在还没有在java中使用。其实goto这个词是C语言中的,goto语句通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出循环体等功能。而在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。但是在java语言中,goto这个词只是作为了保留字,还没有使用。那是因为java语言讲究简单,方便。
八:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
九:在Java中,字符串是作为 对象 出现的。
十:是否可以继承String类?
String是被final修饰的最终类,不能被继承
十一:程序结果:
public class Test extends Fu { public static void main(String[] args) { int i = 0; Fu f = new Test(); Test t = new Test(); for(f.show('A');f.show('B') && (i<2);f.show('C')){ i++; t.show('D'); } } boolean show(char a){ System.out.println(a); return false; } } class Fu{ boolean show(char a){ System.out.println(a); return true; } } //结果为A B
1 public class Test extends Fu { 2 public static void main(String[] args) { 3 A a = new B(); 4 System.out.println(a.func());//编译失败,因为a所属的A接口没有定义func方法 5 } 6 } 7 interface A{} 8 class B implements A{ 9 public String func(){ 10 return "func"; 11 } 12 }
1 public class Test extends Fu { 2 public static void main(String[] args) { 3 A a = get();//相当于 A a = new B(); 4 System.out.println(a.test());//编译失败,因为a所属的A接口没有定义test方法 5 } 6 static A get(){ 7 return new B(); 8 } 9 } 10 interface A{} 11 class B implements A{ 12 public String test(){ 13 return "yes"; 14 } 15 }
1 public class Test extends Super { 2 public static void main(String[] args) { 3 int i = 4; 4 Super d = new Test("A"); 5 System.out.println(d.i); 6 } 7 public Test(String a){ 8 //super();//走的是父类的空参数构造函数 9 System.out.println("C"); 10 i+=5; 11 } 12 } 13 class Super{ 14 int i = 0; 15 public Super(String a){ 16 System.out.println("A"); 17 i = 1; 18 } 19 public Super(){ 20 System.out.println("B"); 21 i+=2; 22 } 23 } 24 //结果是B C 7
1 public class Test { 2 public static void main(String[] args) { 3 //补足代码,调用两个函数,用匿名内部类 4 Inter in = new Inter(){ 5 public void func() { 6 } 7 public void show(int a, int b) { 8 } 9 }; 10 in.func(); 11 in.show(3, 5); 12 } 13 } 14 interface Inter{ 15 void show(int a,int b); 16 void func(); 17 }
1 public class Test { 2 public static void main(String[] args) { 3 TD.Inner ti = new TD().new Inner(); 4 ti.show(); 5 } 6 } 7 class TD{ 8 int y = 6; 9 class Inner{ 10 static int y = 3;//编译失败,非静态内部类中不能有静态成员 11 void show(){ 12 System.out.println(y); 13 } 14 } 15 }
1 class fu{ 2 int num = 4; 3 void show(){ 4 System.out.println("showfu"); 5 } 6 } 7 class zi extends fu{ 8 int num = 5; 9 void show(){ 10 System.out.println("showzi"); 11 } 12 } 13 class T{ 14 public static void main(String[] args){ 15 fu f = new zi(); 16 zi z = new zi(); 17 System.out.println(f.num);//4 18 System.out.println(z.num);//5 19 f.show();//showzi 20 z.show();//showzi 21 } 22 }
十二:写出错误答案错误原因,用单行注释的方式
1 class Demo{ 2 int show(int a,int b){ 3 return 0; 4 } 5 } 6 下面那些函数可以在Demo的子类中存在 7 A.public int show(int a ,int b){return 0;}//可以,覆盖 8 B.private int show(int a ,int b ){return 0;}//不可以,权限不够 9 C.private int show(int a,long b){return 0;}//可以,子类特有的方法 10 D.public short show (int a,int b){return 0;}//不可以,调用的不确定性,当调用show方法是不知道返回short 还是int 11 E.static int show(int a ,int b){return 0;}//不可以,静态只能覆盖静态
十三:写出this关键字的含义,final有哪些特点
十四:
十五:多线程面试题
1 class Test implements Runnable{ 2 public void run(Thread t){ 3 } 4 } 5 //如果错误 错误发生在哪一行?错误在第一行,应该被abstract修饰,因为run方法没有被覆盖 6 7 8 class ThreadTest{ 9 public static void main(String[] args) { 10 11 new Thread(new Runnable(){ 12 public void run(){ 13 System.out.println("runnable run"); 14 } 15 }) 16 { 17 public void run(){ 18 System.out.println("subThread run"); 19 } 20 }.start();//结果是subThread run 21 22 23 /* 24 new Thread() 25 { 26 public void run() 27 { 28 for(int x=0; x<50; x++) 29 { 30 System.out.println(Thread.currentThread().getName()+"....x="+x); 31 } 32 33 } 34 }.start(); 35 36 for(int x=0; x<50; x++) 37 { 38 System.out.println(Thread.currentThread().getName()+"....y="+x); 39 } 40 Runnable r = new Runnable() 41 { 42 public void run() 43 { 44 for(int x=0; x<50; x++) 45 { 46 System.out.println(Thread.currentThread().getName()+"....z="+x); 47 } 48 } 49 }; 50 new Thread(r).start(); 51 52 */ 53 54 } 55 }