1.一个“.Java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以包括多个类,但是只能有一个public类,并且public类与文件名一致。
2.Java有没有goto?
Java中保留字,现在没有在Java中使用。
3.说说&和&&的区别?
&和&&都可以用作逻辑与运算,当运算符两边都是true时,则为true,否则有一边为false则为false。
&&还具有短路与的作用,就是一个表达式结果为false时,就不计算另一个表达式了。
&还可以进行位运算,当运算符两边不是Boolean类型了,就用位与运算
4.在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;
}
}
5.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
在switch (expr1)中,expr1只能是一个整数表达式或者枚举常量,整数表达式可以使int类型或者Integer包装类,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于switch语句中。
6.short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?
short s1=1;s1=s1+1;会报强制转换类型错误,因为s1+1会自动转型为int类型,而当int类型要赋值给short类型时,便会报错。
short s1=1;s1+=1;则不会报错,因为+=在Java中是规定的运算符。
7.char型变量中能不能存贮一个中文汉字?为什么?
可以,因为char类型变量时来存贮Unicode编码的字符,Unicode字符中有汉字,则可以存贮中文汉字,不过,比如某个特殊汉字没有在Unicode字符中,那么char类型就不能存贮这个特殊汉字了,并且Unicode编码的字符是占用两个字节的,那么char类型变量也占有两个字节。
8.用最有效率的方法算出2乘以8等于几?
2<<3
这是最有效的计算方法,因为一个数左移n位,就相当于乘以2的n次方,而且位运算是cpu直接支持的,效率最高。
9.请设计一个一百亿的计算器?
大概功能如下:
1.这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数
2.有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中
3.提供加减乘除的功能
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(){
}
}
10.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
是引用变量不能变。
11.“==”和equals方法究竟有什么区别?
==操作符专门用来比较两个变量的值是否相等,也就是比较两个变量所对应的内存中所存储的数值是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候,涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存。对于指向对象类型的变量,如果要比较两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较了。
equals方法是用于比较两个独立对象的内容是否相等,就好比比较两个人的长相是否相同,它比较的两个对象时独立的。
12.静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建对象,其中的实例变量才会分配到空间,才能使用过这个实力变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不能穿件任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
13.是否可以从一个static方法内部发出对非static方法的调用?
不可以。
14.Integer与int的区别?
int是原始数据类型之一。Java为每个原始类型提供了封装类,Integer是Java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。
15.Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
round是四舍五入,则Math.round(11.5)等于12,Math.round(-11.5)等于-11
16.下面的代码有什么不妥之处?
if(username.equals("zxx"){}
username字符串比较应该用==
int x=1;
return x==1?true:false;
在Java里Boolean不能和其他任何类型转换
17.请说出作用域public,private,protected以及不写时的区别?
如果在修饰的元素上面没有写任何访问修饰符,则表示friendly
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
18.Overload和Override的区别,Overload的方法是否可以改变返回值的类型?
overload重载
1.在使用重载时只能通过不同参数样式。不同的参数类型,不同的参数个数,不同的参数顺序。
2.不能通过访问权限、返回类型、抛出的异常进行重载;
3.方法的异常类型和数目不会对重载造成影响;
4.对于继承来说,如果某一方法在父类中式访问权限是private,那么就不能再子类对其进行重载。
override覆盖
1.覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2.覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3.覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4.被覆盖的方法不能为private,否则在其子类中只是心定义了一个方法,病没有对齐进行覆盖。
19.构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写override,但是可以overload
20.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main方法?
接口可以继承接口,抽象类可实现接口,抽象类可继承具体类,抽象类可以有静态main方法
21.写clone()方法时,通常都有一行代码,是什么?
super.clone();
首先要把父类的成员复制到位,才能复制自己的成员
22.面向对象的特征有哪些方面?
封装,多态,继承, 抽象
封装,主要是高内聚,低耦合
多态,
多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。例如,下面代码中的UserDao是一个接口,它定义引用变量userDao指向的实例对象由daofactory.getDao()在执行的时候返回,有时候指向的是UserJdbcDao这个实现,有时候指向的是UserHibernateDao这个实现,这样,不用修改源代码,就可以改变userDao指向的具体类实现,从而导致userDao.insertUser()方法调用的具体代码也随之改变,即有时候调用的是UserJdbcDao的insertUser方法,有时候调用的是UserHibernateDao的insertUser方法:
UserDao userDao =daofactory.getDao();
userDao.insertUser(user);
继承:提高了软件的可重用性和可扩展性
抽象:就是找出事物的相似和共性之处,然后,将这些事物归为一个类
23.Java中实现多态的机制是什么?
靠的是父类或接口的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。