Java基础部分
答题时,先答是什么,然后是有什么作用,最后是需要注意什么。
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以包括多个类,但是只有一个public的类,且public的类名要和文件名一致。
2.Java有没有 goto?
Java中的保留字,现在没有在java中使用。
3、说说&和&&的区别。
&表示逻辑与(and),只有当两边都是true的时候,整个运算结果才为true。还可以表示位运算符,表示按位与操作。
&&也可以表示逻辑与(and),但是它有短路的功能,当第一条件为false时,就不考虑第二个条件了。
4、在 JAVA中如何跳出当前的多重嵌套循环?
(1)在外层循环中做一个标号,在里层循环中使用带有标号的break语句。
ok:(注意这里是冒号) for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ System.out.println("i:"+i+" j:"+j); if(j==4){ break ok; } } } |
(2)设置一个boolean值的标记位,在for循环中使用判断是否继续循环来达到目的。
5、switch语句能否作用在 byte上,能否作用在 long上,能否作用在 String上?
可以作用在byte上,不能作用在long和string上。
switch(expr1),expr1为整数表达式或枚举常量,整数表达式可以为int基本类型或integer包装类型,由于byte,char,short都可以隐式转换成int型,所以这些类型和它们的包装类型都是可以。
6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
s1+1以后转换为了int型,赋给short型报错,需要强制转换类型。
没错,s1+=1,会自动转换成short型。
7、char型变量中能不能存贮一个中文汉字?为什么?
可以。因为char型变量保存的是Unicode编码的字符集,unicode字符集包含了汉字。如果某个特殊的汉字没有被包含在Unicode中,那就不能保存。Unicode编码占用两个字节,所以char占两个字节。
8、用最有效率的方法算出2乘以8等於几?
2<<3, 2左移3位,相当于乘以2的3次方。位运算是cpu直接支持的,效率高。
9、请设计一个一百亿的计算器
计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。
int的正数范围为2的31次方,表示最大数值约为20亿。
需要自己设计一个类,来表示很大的整数和提供与另外一个数的计算
概功能如下:
()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数
()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中
()提供加减乘除的功能
public class BigInteger{ int sign; byte[] val; public BigInteger(String val){ sing=; 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比较的是对象的内容。
如果一个类没有自己定义equals 方法,那么它将继承Object 类的equals 方法,Object 类的equals 方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义equals 方法,它默认的equals 方法(从Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals 和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
12、静态变量和实例变量的区别?
静态变量:加static关键字,在类加载的时候就加载。可以通过类名.变量来调用。
实例变量:创建对象的时候分配内存空间,通过对象来调用。
public class Demo2 { public static int staticVar=0; public int instanceVar=0; public void VariantTest(){ staticVar++; instanceVar++; System.out.println("staticVar="+staticVar+"instanceVar="+instanceVar);; } } public class Test { public static void main(String[] args) { Demo2 d1=new Demo2(); Demo2 d2=new Demo2(); Demo2 d3=new Demo2(); Demo2 d4=new Demo2(); d1.VariantTest(); d2.VariantTest(); d3.VariantTest(); d4.VariantTest(); } } |
输出结果:
staticVar=1instanceVar=1 staticVar=2instanceVar=1 staticVar=3instanceVar=1 staticVar=4instanceVar=1 |
13、是否可以从一个 static 方法内部发出对非 static方法的调用?
不行,应为static方法可以有类名直接调用,此时可能非static方法所属的对象没有创建。
14、Integer与 int 的区别
Integer是int的包装类,默认值为null,其中封装了许多的方法可以调用,例如Integer.parseInt(String s).
int是基本数据类型,默认值为0.
15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
语法为:Math.floor(x+0.5) 12 -11
Math.floor() 向下取整 Math.floor()
(-11.6) -12 (-11.3) -12 (11.6) 11 (11.3) 11
Math.ceil() 向上取整
(-11.6) -11 (-11.3) -11 (11.6) 12 (11.3) 12
16、下面的代码有什么不妥之处?
1. if(username.equals(“zxx”){}
username 可能为NULL,会报空指针错误;改为"zxx".equals(username)
2. int x = 1;
return x==1?true:false; 这个改成return x==1;就可以!
17、请说出作用域 public,private,protected,以及不写时的区别.
如果没写就表示friendly
作用域 |
当前类 |
同包 |
子孙类 |
其他包 |
public |
可以 |
可以 |
可以 |
可以 |
protected |
可以 |
可以 |
可以 |
否 |
friendly |
可以 |
可以 |
否 |
否 |
private |
可以 |
否 |
否 |
否 |
18、Overload和 Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload:重载返回值类型必须一致,参数个数可以不同,参数的类型也可以不同。对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
Override:重写,返回值类型、方法名和参数必须一致。
19、构造器 Constructor 是否可被 override?
构造器不能被继承,所以不能重写,但是可以重载。
20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的 main方法?
接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中可以有静态的main方法。
抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract 方法。
21、写 clone()方法时,通常都有一行代码,是什么?
clone有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。
22、面向对象的特征有哪些方面
封装:把描述一个对象的行为和属性封装到一个模块中,即一个类中。让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才能访问到这些成员变量。
继承:子类继承父类,自动共享父类数据和方法,并可以定义自己的数据和方法。提高了重用性和可扩展性。
多态:父类的引用指向子类变量。
抽象:找出事物的相似处和共同之处,然后将这些事物归为一类。
23、java中实现多态的机制是什么?
父类或接口定义的引用变量指向子类或具体实现类的实例对象,程序调用的方法在运行期才进行动态的绑定。就是引用变量所指向的具体实例对象的方法是内存里正在运行的对象的方法,而不是引用变量的类型中定义的方法。