java基础和面向对象面试题

逻辑思考题:
1:矿泉水1元钱1瓶,每2个空瓶换一瓶矿泉水,现有20元钱,请问可以买多少瓶矿泉水?
			20+10+5+2+1+1=39(瓶)
2:下面这个表达式,你移动一个数字或者符号就可以把这个表达式变成正确的.请试试.
62-63=1
	将6移至2的右上方,变成2的指数,即2的6次方=64 所以64-63=1

3: 一栋房子需要一个工匠七天建成,这个工匠的工钱是一份金条,假如现在你需要盖一栋房子,而你只有一根完整的金条,怎么能把金条分三份的情况下每天都付给工匠工资,最后一天刚好付完?
切两刀,分别分成三块,每块大小占金条的1/7、2/7、4/7。
第一天给1/7
第二天给2/7还回1/7
第三天再给1/7;
第四天给4/7还回1/7、2/7;
第五天给1/7;
第六天给2/7还回1/7;
第七天给1/7。


面试题:
1:谈谈final, finally, finalize的区别
1.		final:最终的意思,可以修饰类,修饰成员变量,修饰成员方法 
2.	    修饰类,类不能被继承 
3.	    修饰变量,变量是常量 
4.	    修饰方法,方法不能被重写 
5.	 finally:是异常处理的一部分,用于释放资源。 
6.	    一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了 
7.	    finalize:是Object类的一个方法,用于垃圾回收 

2: &和&&的区别
	&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

3: Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
	Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,所以,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,所以,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

4: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
	对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

5:数组有没有length()这个方法? String有没有length()这个方法?
	java中数组有没有length()方法,求数组的长度可以使用数组的length属性。
1
2	int[] arr={1,2,3,4,5};
int length=arr.length;//求数组的长度
String 有length()方法,用来求字符串的长度
1
2	String  str="Hello";
int length=str.length(); //求字符串的长度


6: Overload和Override的区别。Overload的方法是否可以改变返回值的类型?
	  重载(Overload)
(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。

  重载Overloading是一个类中多态性的一种表现。
(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

  调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。
    无法以返回型别作为重载函数的区分标准。

  重写(Overriding)
(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。

  但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

  方法重写又称方法覆盖。
(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

  如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
(3)子类函数的访问修饰权限不能少于父类的;

7:给我写出JDK提供的5个常用类名,5个接口名,5个包名.

	1、java.lang包:java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
2、java.io包:java语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等等
3、java.util包:Java的实用工具类库Java.util包。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。包含如处理时间的date类,处理变成数组的Vector类,以及stack和HashTable类

4、java.util.zip包:实现文件压缩功能
5、java.lang.reflect包:提供用于反射对象的工具

类:1.java.lang.Object 
2.java.lang.String 
3.java.lang.System 
4.java.io.file 
5.java.io.FileInputStream 

接口:1.java.util.List 
2.java.util.Map 
3.java.util.Iterator 
4.java.sql.CallableStatement 
5.java.lang.Comparable

8:构造方法是否可被override?
	不可以 ,回报异常。 
override是用来重写父类中的方法以及重写本类和object的toString()方法。

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

10: 编程题: 用最有效率的方法算出2乘以8等於几?
	2 << 3
11: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性吗?
	不可以
12: switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
	switch语句中的表达式只能是byte,short,char ,int以及枚举(enum),所以当表达式是byte的时候可以隐含转换为int类型,而long字节比int字节多,不能隐式转化为int类型,所以switch语句可以用在byte上而不可以用在long上,另外由于在JDK7.0中引入了新特性,所以witch语句可以接收一个String类型的值,String可以作用在switch语句上

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