JAVA面试准备(java基础部分1)

1、一个“java”源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以,但只能有一个public类,类的名字需要和文件名字一致。


2、Java有没有goto?

有goto关键词,但是不能使用。


3、说说&和&&的区别。

&是位运算符,&&是逻辑运算符。

&&又被称为短路运算符,当第一个条件不成立时不判断第二个条件。


4、在java中如何跳出当前的多重嵌套循环?

break 。


5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

byte可以,long不行,jdk1.7后String可以。(byte可隐性转换为int)


6、short s1 = 1;s1 = s1 +1;有什么错?short s1 = 1; s1 +=1;有什么错?

需先将1强行转换成short类型。


7、char 型变量中能不能存储一个中文汉字?为什么?

可以,char型变量用来储存Unicode编码的字符,Unicode编码的字符包含汉字。


8、用最有效率的方法算出2乘以8等于几?

2<<3 , 移位运算。


9、请设计一个一百亿的计算器

1)注意边界值关系,int最大值约为21亿(2的31次方)。

2)具备一定的面向对象的设计能力。


10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

引用的对象可以修改,引用不能变。


11、"=="和equals方法究竟有什么区别?

== : 比较两边数据引用是否相等。(通常用于8种基本类型)

equals : 比较两边数据的内容是否相等。(object类,如String)


12、静态变量和实例变量的区别?

语法上,静态变量需添加static关键词。

在程序运行时,使用实例变量先得创建实例对象,静态变量可直接通过类名引用。


13、是否可以从一个static方法内部发出对非static方法的调用?

不可直接调用,因非static方法必须通过对象调用。如果想要强行调用,需要在static方法内部初始化非static方法的实例。


14、Integer和int的区别?

Integer是包装类,int是基础类型。Integer常用于数据类型转化。


15、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

12,-11(long型)

ceil:向上取整。 floor:向下取整, round:四舍五入(算法为Math.floor(x+0.5),即Math.round(-11.6)的结果是-12)。


16、 请说出作用域public,private,protected 以及不写时的区别。


当前类 同一package
子孙类
其他package
public
protected

friendly


private



不写时默认frendly。


17、Overload 和 Override的区别。Overloaded的方法是否可以改变返回值的类型?

Overload:重载,方法名必须相同,其他至少有一样不同,可以改变返回至的类型。

Override:重写,方法名,参数,返回值都需要一样,修饰符不能比父类小。


18、构造器Constructor是否可被override?

不能被重写,但是可以被overload。


19、接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?

接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类可以有静态的main方法。

抽象类和普通类的唯一区别就是不能创建实例对象和允许有abstact方法。


20、写clone()方法时,通常都有一行代码,是什么?

super.clone(),因clone有缺省行为。


21、面向对象的特征有哪些方面?

抽象、继承、多态、封装。


22、java中实现多态的机制是什么?

关键词:override,overload,动态绑定。


23、abstract class 和 interface有什么区别?

语法上:- 抽象类表现出的是继承关系,一个类只能使用一次继承关系。一个类可以实现多个接口

- 抽象类可以有自己的数据成员,可以有非abstract方法。接口中只能有static final成员,所有方法也必须是abstract的。

设计上:抽象类更表现出继承的关系,而接口更像扩展关系。


24、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

abstract方法不能是static,native,synchronized和final。


25、什么是内部类?Static Nested Class 和 Inner Class的不同。

内部类是指一个外部类内部再定义一个类,类名可以与文件名不同。

Static 可通过外部类,内部类直接访问,Inner Class不能被外部类直接访问。


26、内部类可以引用它的包含类的成员吗?有没有什么限制?

可以,如果不是静态内部类那没限制。

如果是静态内部类,那只能访问包含类的静态成员。


27、Anonymous Inner Class(匿名内部类) 是否可以extends其他类,是否可以implements interface?

可以,而且要实现方法。


28、String是基本的数据类型么?

不是,8种基本数据类型是:byte,short,int,long,char,float,double,boolean。


29、String s = "Hello";s=s+"world!";这两行代码执行后,原始的String对象中的内容到底变了没有?

原始的String对象中的内容没变,但是s的引用已经变了。


30、是否可以继承String类?

String类是final类所以不能被继承。


31、String s = new String("xyz");创建了几个String Object?两者之间有什么区别?

1个或2个,当之前已经创建过xyz的对象时,那就是一个。如果没有,那就是2个。

xyz创建在常量池中,而s则创建作为引用引用至xyz。


32、String 和 StringBuffer的区别

String 不是数据基本类型,是不可变对象,是final类不可被继承。

StringBuffer是可变对象,只能通过构造函数对他进行赋值。


33、如何把一段逗号分隔的字符串转换成一个数组?

可以使用String类中的split方法,也可以使用StringTokenizer类的方法。


34、数组有没有length()这个方法?String有没有length()这个方法?

数组没有length()的方法,只有length的属性。String有length()的方法。


35、下面这个语句一共创建了多少个对象?String s="a"+"b"+"c"+"d";

一个对象。"a"+"b"+"c"+"d" 在编译时字符串常量相加已优化,无需等到运行期处理。


36、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,return前还是后?

运行,return后。


37、下面程序代码的输出结果是?

public class SmallT{
    public int get(){
        try{return 1;}
        finally{return 2;}
    }
    public void static main(String args[]){
      SmallT s = new SmallT();
      int b = s.get();
      System.out.println(b);
    }
}

返回的结果是2。try中的函数先于finally中的函数,所以返回结果为2。


38、final,finally,finalize的区别?

final是类型,finally是异常处理结构的一部分,finalize是Object类的一个方法。


39、运行时异常和一般异常有何异同?

分为runtime exception和checked exception,runtime exception及运行时抛出的异常,如空指针异常。checked exception及编译时就需要处理的异常,如IO异常以及数据库异常。


40、java中的异常处理机制的简单原理和应用。

异常指java运行期间(非编译)所发生的非正常情况或错误。java对异常进行了分类,所有异常的根类为Throwable,Throwable派生出2个子类:Error和Exception。Error表示应用程序本身无法克服和恢复的问题,如内存溢出和线程死锁。Exception表示程序能克服和恢复的问题,其中又分为系统异常和普通异常。系统异常如:空指针异常,数组越界异常,类转换异常。普通异常是运行环境变化所导致的问题,如网络断线,硬盘空间不足。

java为系统异常和普通异常提供了不同就解决方案,编译器强制普通异常必须try,catch处理或throws声明抛给上层调用方法处理,所以普通异常也被称为checked异常。


41、请写出你最常见的5个runtime expection

类转换异常:ClassCastException。

空指针异常:NullPointerException。

数组越界异常:StringIndexOutOfBoundsException。


42、java异常处理关键词中,throws,throw,try,catch,finally分别代表什么含义?在try块中可以抛出异常么?

throw:抛出异常。

throws:捕获并抛出异常。

try catch:内部捕获异常并自定义处理。

finally:无论是否捕获异常都运行程序块。

在try块中可以用throw抛出异常。


43、java中有几种方法可以实现一个线程?用什么关键词修饰同步方法?stop()和suspend()方法为何不推荐使用?

继承Thread类型,实现runable接口。

使用synchronized关键词。

stop()不安全,会解除所有线程的锁定。suspend()容易发生死锁。


44、sleep()和wait()有什么区别?

进入同步锁后,Sleep()不会释放当前锁。而wait()会暂时释放当前锁等待唤醒。


45、同步和异步有何异同,什么情况下分别使用他们?

如果数据在线程间共享,那需要同步。

通常使用异步。


46、多线程有几种实现方法,同步有几种实现方法?

多线程:继承Thread类或实现Runnable接口。

同步:Synchronized,wait,notify。


47、启动一个线程用run()还是start()?

用start()。


48、当一个线程进入一个对象的一个Synchronized方法后,其他线程是否可进入此对象的其他方法?

(1)、其他方法前是否加了Synchronized关键词,如果没加则能。

(2)、如果这个方法内部调用了wait,则可以。


49、线程的基本概念、基本状态以及状态之间的关系。

一个程序有多条执行线索,一个线程就是一个执行线索。

状态:就绪,运行,未运行/阻塞/睡眠,


50、简述synchronized和java.util.concurrent.locks.Lock的异同?

相同点:Lock能完成synchronized所实现的功能。

不同点:Lock有比synchronized更精确的线程语义和更好的性能。

你可能感兴趣的:(java,面试)