一. Java基础部分面试题
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以包括 但公共类只能有一个、且与源文件名相同
2、Java有没有goto?   
答:有、但是是作为保留字存在的。
3、说说&和&&的区别。
答:在java中,这两个符号都属于逻辑运算符与的操作。但&&表示的是短路运算,所谓的短路运算是,与运算中,两边的表达式的布尔值,如果有一个为假,另外一个就不需要进行判断了。最为常见的地方是,if(o!=null&&o.equals(s)) 如果第一个为false 那么不会对第二个式子判断,但如果是非短路运算符& 会对第二个判断,但此时o为空,会抛出NullPointerExcetption异常
而&还有取地址的作用 常用来对一个整数的后四bit位计算(常和ox0f进行运算)。
4、在JAVA中如何跳出当前的多重嵌套循环?
答:关键字 常见的有return、ok标号和break。用法上:ok是使用带有ok标号的break语句 我最常用的不是这一种,而是return和让外层的循环条件表达式的结果可以受到内层循环代码的控制。
5、equals不等于switch语句能否作用在byte上,能否作用在long上,能否作用在String上?   
答:可以作用在byte、short、int、char(及以上四种的包装类)7.0之后支持String 和枚举.可以理解为 expression值只能是整型表达式和枚举常量
6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?   
答:错误在于s1+1是一个短整型和一个1相加 1作为字面值是byte、short、int通用的,但在进行刚才的加法运算时,会被认为是一个整型。整型和短整型相加会出现自动类型提升。将提升后的整型值赋值给一个短整型会报错 而直接给short赋值一个1不会被认为是整型,只有在加法运算时会。但s1+=1;这中写法形式也不会出现自动类型提提升
7、char型变量中能不能存贮一个中文汉字?为什么?
答:可以。Char中放入的字符是以unicode编码方式存入的。    Unicode编码是包含汉字的。但如果字符集没有的话。自然是不能存储的。
8、用最有效率的方法算出2乘以8等于几?   
答:位运算 左移动几位相当于乘以2的几次方 右移动几位相当于除以2的几次方
9、请设计一个一百亿的计算器   
10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
答:是引用不能变。所以将对象作为实参时,有些人希望在形参上加修饰符final也是可以改变值的。我目前见过final用的最爽的地方就是单例模式中的饿汉式模式 当出现时间片结束时,纵然没有new完对象,再返回时,也不会new出新对象。
11、"=="和equals方法究竟有什么区别?   
答:这两个方法的区别主要是针对对象类型 ==表示两个对象的引用是否相同 equals表示两个对象的内容是否相同。Equals常用在String的比较中,另外所有的对象都是继承自object类,
equals方法是该类的一个方法,换句话说,所有的类都具备这个方法,当对两个对象调用equals比较时,如果没有Override的方法,那么就会调用object的方法,而object中的Equals方法默认是使用==的。
12、静态变量和实例变量的区别?   
答:概念上,两种变量都是一个类的成员变量,只不过两种变量的修饰符一个有static一个没有。出现时机上:静态变量的是出现在类加载时,也就是说,当对象没有出现时,它就已经出现了,实例变量的出现是对象出现时的。所属范围上说,静态变量它是属于类,所有对象的,并不是一个单独对象的属性。而实例变量是仅属于一个对象的。
13、是否可以从一个static方法内部发出对非static方法的调用?
答:不可以。Static方法是属于一个类的,不需要创建对象,而非static是属于一个对象的,对象没有创建,它是没有出现的,所以当我们用static调用非static方法时,对象可能还没有出现。
14、Integer与int的区别
:区别是integer是对象类型,int是基本类型。Integer是为了将int对象化而设计出来的,它支持int的语法操作,包括直接赋值,自增运算等等由于int等基本类型是有默认值的,我们无法判断出是否有赋值的情况。例如一个学生有一门成绩是一个整型值,我们就无法得到他缺考的情况。
15、und(11.5)等于多少? und(-11.5)等于多少?   
答:und方法是对数进行四舍五入的操作。就是将值加上0.5在向下取整。而直接的向上和向下取整是使用math的ceil和floor的方法
16、请说出作用域public,private,protected,以及不写时的区别?   
答:不写时,默认关键字是default。这四个关键字,从修饰对象和修饰范围上说。
修饰对象上:public 可以修饰类,方法、构造方法和属性。Private可以修饰方法和属性、构造方法 default可以修饰类、方法和属性、构造方法。Protected可以修饰、构造方法、方法和属性。
修饰范围:public是本包和导入包均可见 private是本类可见 default是本包可见protected是对继承体系可见(本包和导入包的子类型)
17、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
答:OverLoad是重载。Override是重写。Override是发生在继承体系中,子类对父类的方法进行重写,语法要求是:返回值,方法名,参数列表要一致,修饰权限要高于父类,抛出被父类更安全、更具体的异常,至少是相同的。比如抛出父类异常的子异常。
OverLoad是本类中,同一方法的不同实现,它要求方法名相同。参数列表不同(个数,顺序,类型),返回值不做要求,但最好不同,因为我们在调用方法是常常不接收返回值,如果这种情况出现,而重载的方法的仅仅是返回值不同的话,编译器会分不出调用哪个方法。但5.0后返回值可以不同在异常时常用。即在返回值、异常和返回类型上有重载。方法的异常类型和数目不会对重载有影响。
而以上两种如果原方法都是private的话,那么新的方法都可以视为写了一个新方法,所以没有重载和重写的概念在里头了。
18、构造器Constructor是否可被override?       
答:构造器不能被继承,所以不能重写,但可以重载。
19、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?   
答:接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体的类,抽象类可以有静态的main方法。抽象类不可以实例化和拥有abstract的方法。
20、面向对象的特征有哪些方面?
答:封装、多态、继承、抽象。
21、java中实现多态的机制是什么?
答:父类或者接口的引用可以指向子类或者实现类的对象。在编译时,分析引用变量中的类型方法,运行时绑定实际的类。
22、abstract class和interface有什么区别?
答:interface是特殊的抽象类。Abstract类    包含抽象方法,没有抽象静态方法可以有普通方法和构造方法,但不能有抽象构造方法,没有构造方法。不能被实例化,只能被继承。
Interface中,所有的抽象方法是公开,抽象的,属性时公开、静态、常量的。且没有构造方法。
23、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
24、什么是内部类?Static Nested Class 和 Inner Class的不同。   
25、内部类可以引用它的包含类的成员吗?有没有什么限制?
答:可以,但要求是用final修饰的。
26、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答:可以,没有问题。而且必须是某个类的子类或者接口的实现类。
27、String是最基本的数据类型吗?   
答:不是,String是较为常见的对象类型。而基本类型只有八种:byte,short,int,long,char,boolean,double,float。
28、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
答:没有,这个过程实际上是创建了新的对象,将s的引用指向了一个新的对象。String是一个不可变的类immutable。
29、是否可以继承String类?
答:不可以。它是一个final类,是不能被继承的。
30、String s = new String("xyz");创建了几个对象? 二者之间有什么区别?   
答:如果“xyz”是第一次出现,那么应该是两个对象,如果已经出现过,应该是一个对象。New出现的地方一定会有一个对象。而“xyz”的出现也会生成一个对象,放入到串池中,以方
便下次使用。
31、String 和StringBuffer的区别   
答:构造方式不同,String是提供数值不可改变的,而StringBuffer字符可以改变的。StringBuffer的出现是为了解决String在做字符串连接时,造成的过多内存消耗。仅仅通过一个StringBuffer对象就可以完成字符串连接。而不是想String一样,每进行一次字符串连接就开辟一个空间存放对象。
32、如何把一段逗号分割的字符串转换成一个数组?
答:直接调用String类中的静态方法Spilt(,);这个方法是将字符串按照指定的字符进行劈分。
33、数组有没有length()这个方法? String有没有length()这个方法?   
答:数组中是属性,数组中表示数组元素的个数,String中表示字符的个数。
34、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";   
答:7个。每一个字符是一个对象,运算时,+号左边是一个新的对象
35、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?       

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。