java面试题

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以,但是只能有一个public类 而且如果有public类的话,这个文件的名字要和这个类的名字一样。
2、Java有没有goto?
答:java中的保留字,现在没有在java中使用
3、说说&和&&的区别?
答:&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,只要一方为false,结果为false
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str!=null&&!str.equal(""))表达式,当str为null时,后面表达式不执行,所以不会出现NullPointerEeception如果将&&改为&,则会抛出NullPointerEeception异常。if(x==3&++y>0)y会增长  如果是&&不会增长
&还可以用作运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31&0x0f的结果为0x01
两者既有共同点,又各有特殊之处  如上述例子
4、在JAVA中如何跳出当前的多重嵌套循环?
答:在java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的的break语句,即可跳出外层循环。例如:
ok:
for(int i=0;i<10;i++)
{
     for(int j=0;j<10;j++)
{
     system.out.println("i="+i+",j="+j);
     if(j==5)break ok;
}
}
不过我个人觉得通常不使用标号这种方式,而是让外层的循环条件表达式的结果可以收到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。
int arr[][]={{1,2,2},{2,2,5},{4,4}};
boolean found =false;
for(int i=0;i<arr.length&&!found;i++)
{
    for(int j=0;j<arr[i].length;j++)
{
    system.out.println("i="+i+",j="+j);
    if(arr[i][j]==5)
{     
    found=true;
    break;
}
}
}
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
答:在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
6、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编译器会对它进行特殊处理,因此可以正确编译。
7、char型变量中能不能存贮一个中文汉字?为什么?
答:不能
char 只占一个字节。
汉字通常是两个字节来表示,可以使用char数组来表示汉字。
例如
char a[5]="你"
8、用最有效率的方法算出2乘以8等於几?
答:用移位法2 左移3位 就是乘以8
9、请设计一个一百亿的计算器
答:
10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
答:
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer("immutable");
执行如下语句将报告编译期错误:
a=new StringBuffer("");
但是,执行如下语句则可以通过编译:
a.append(" broken!"); 
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:
        public void method(final  StringBuffer  param)
        {
        } 
实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:
                param.append("a");
11、"=="和equals方法究竟有什么区别?
答:==确实比较的是引用,equals比较的是引用指向的内容
12、静态变量和实例变量的区别?
答:静态变量有static  区别在于类变量和实例变量的区别是类变量是所有对象共有,其中一个对象将他值改变,其他对象得到的就是改变后的结果,而实例变量则属于对象私有,某一个对象将其值改变,不影响其他对象.
13、是否可以从一个static方法内部发出对非static方法的调用?
不行,
可以这样理解
static修饰的方法可以直接用类名调用
非static修饰的方法必须用类new出对象才能调用
当我们用类名直接调用时,可能这个类的对象并没有new。
如果这时候static方法里调用非static的方法就会出现空指针异常,
当然这种错误编译时就不会通过
14、Integer与int的区别
答:Integer 是对象,定义的变量是对Integer对象地址的引用,==比较的是对象在内存中的物理地址。所以不等。 
int定义的变量就是值的引用。(范围为正负2^31)
15、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?
答:Math.round()是四舍五入的函数,所以Math.round(11.5)是12, Math.round(-11.5)是-11
16、下面的代码有什么不妥之处?
答:
17、请说出作用域public,private,protected,以及不写时的区别
答:区别如下: 


作用域 当前类 同一package 子孙类 其他package 


public √ √ √ √ 


protected √ √ √ × 


friendly √ √ × × 


private √ × × × 


不写时默认为friendly
18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
19、构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?
答:1.接口可以继承接口..但是要使用extends~而不是用implements如:interface a{}interface b extends a{}
2.抽象类可以实现接口..比如java.util中的AbstractCollection类就是实现的Collection接口
3.抽象类可以继承实体类下面这段执行无误的代码说明的所有的问题:interface MyInterface {}interface AnotherInterface extends MyInterface {}class EntityClass {}abstract class AbstractClass extends EntityClass implements MyInterface {}
main方法都是静态的,抽象类中的方法可以为抽象方法,也可以为具体的方法。
21、写clone()方法时,通常都有一行代码,是什么?
答:clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。
22、面向对象的特征有哪些方面
答:封装,继承,多态
23、java中实现多态的机制是什么?
答:靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:abstract的method 不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系!


native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。