1、一个".java"源文件中是否能够包括多个类(不是内部类)?有什么限制?java
答:能够,但只能有一个public,而且public类名与文件名一致面试
2、Java有没有goto? 算法
答:保留为关键字编程
3、说说&和&&的区别。bootstrap
答:&&有短路功能,&能够作位运算符数组
4、在JAVA中如何跳出当前的多重嵌套循环?并发
答:1、使用带有标号的break 语句,便可跳出外层循环。app
2、循环条件逻辑与布尔标志符,知足条件后取反jvm
5、switch语句可否做用在byte上,可否做用在long上,可否做用在String上? ide
答: 在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量,整数表达式能够是int基本类型或Integer包装类型,因为,byte,short,char均可以隐含转换为int,因此,这些类型以及这些类型的包装类型也是能够的。
因为在JDK7.0中引入了新特性,因此witch语句能够接收一个String类型的值,String能够做用在switch语句上
6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:1、s1+1为int型,转换为short报错,编译器将报告须要强制转换类型的错误。
2、隐含强制转换,不报错
7、char型变量中能不能存贮一个中文汉字?为何?
答: char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,因此,char型变量中固然能够存储汉字啦。不过,若是某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
补充说明:unicode编码占用两个字节,因此,char类型的变量也是占用两个字节。
8、用最有效率的方法算出2乘以8等於几?
答:2<<3。位运算cpu直接支持的,效率最高
9、请设计一个一百亿的计算器
先不考虑long类型,因为int的正数范围为2的31次方,表示的最大数值约等于2*1000*1000*1000,也就是20亿的大小,因此,要实现一个一百亿的计算器,咱们得本身设计一个类能够用于表示很大的整数,而且提供了与另一个整数进行加减乘除的功能,大概功能以下:
()这个类内部有两个成员变量,一个表示符号,另外一个用字节数组表示数值的二进制数
()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中
()提供加减乘除的功能
public class BigInteger
{
int sign;
byte[] val;
public Biginteger(String val)
{
sign = ;
val = ;
}
public BigInteger add(BigInteger other)
{
}
public BigInteger subtract(BigInteger other)
{
}
public BigInteger multiply(BigInteger other)
{
}
public BigInteger divide(BigInteger other)
{
}
}
参看jdk中自带的java.math.BigInteger类的源码。
10、使用final关键字修饰一个变量时,是引用不能变,仍是引用的对象不能变?
答:a:基本类型 值不能发生改变
b:引用类型 地址值不能发生改变,可是对象的内容是能够改变的
tips:有人在定义方法的参数时,可能想采用以下形式来阻止方法内部修改传进来的参数对象:public void method(final StringBuffer param){ }
实际上,这是办不到的,在该方法内部仍然能够增长以下代码来修改参数对象:param.append("a");
11、"=="和equals方法究竟有什么区别?
答:若是一个类没有本身定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操做符,也是在比较两个变量指向的对象是不是同一对象,这时候使用equals和使用==会获得一样的结果,若是比较的是两个独立的对象则总返回false。若是你编写的类但愿可以比较该类建立的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你本身写代码来决定在什么状况便可认为两个对象的内容是相同的。
12、静态变量和实例变量的区别?
对于下面的程序,不管建立多少个实例对象,永远都只分配了一个staticVar变量,而且每建立一个实例对象,这个staticVar就会加1;可是,每建立一个实例对象,就会分配一个instanceVar,便可能分配多个instanceVar,而且每一个instanceVar的值都只自加了1次。
public class VariantTest
{
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest()
{
staticVar++;
instanceVar++;
System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);
}
}
13、是否能够从一个static方法内部发出对非static方法的调用?
答:不能够。由于非static方法是要与对象关联在一块儿的,必须建立一个对象后,才能够在该对象上进行方法调用,而static方法调用时不须要建立对象,能够直接调用。也就是说,当一个static方法被调用时,可能尚未建立任何实例对象,若是从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪一个对象上的呢?这个逻辑没法成立,因此,一个static方法内部发出对非static方法的调用。
14、Integer与int的区别
答:Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer能够区分出未赋值和值为0的区别,int则没法表达出未赋值的状况。Integer提供了多个与整数相关的操做方法
15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
答:四舍五入算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整
16、下面的代码有什么不妥之处?
都是些括号问题
17、请说出做用域public,private,protected,以及不写时的区别
只要记住了有4种访问权限(public,protected,friendly,private),4个访问范围(当前类,当前包,子类,不一样包),水平和垂直方向上分别按排从小到大排列
18、Overload和Override的区别。Overloaded的方法是否能够改变返回值的类型?
区别很大
重写Override:表示子类中的方法能够与父类中的某个方法的名称和参数彻底相同,经过子类建立的实例对象调用这个方法时,将调用子类中的定义方法,这至关于把父类中定义的那个彻底相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,由于子类能够解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。
(非重写)若是父类的方法是private类型,那么,子类则不存在覆盖的限制,至关于子类中增长了一个全新的方法。
1九、 线程如何同步和通信。同窗回答说synchronized方法或代码块!面试官彷佛不太满意!
只有多个synchronized代码块使用的是同一个监视器对象,这些synchronized代码块之间才具备线程互斥的效果,假如a代码块用obj1做为监视器对象,假如b代码块用obj2做为监视器对象,那么,两个并发的线程能够同时分别进入这两个代码块中。 …这里还能够分析一下同步的原理。
对于同步方法的分析,所用的同步监视器对象是this
接着对于静态同步方法的分析,所用的同步监视器对象是该类的Class对象
接着对如何实现代码块与方法的同步进行分析。
20、ClassLoader如何加载class 。
jvm里有多个类加载,每一个类加载能够负责加载特定位置的类,例如,bootstrap类加载负责加载jre/lib/rt.jar中的类, 咱们平时用的jdk中的类都位于rt.jar中。extclassloader负责加载jar/lib/ext/*.jar中的类,appclassloader负责classpath指定的目录或jar中的类。除了bootstrap以外,其余的类加载器自己也都是java类,它们的父类是ClassLoader。