面试题
1、请使用4种方法实现两个变量中数据的交换
//第一种 借助中间变量
//声明变量
int num1 = 3;
int num2 = 4;
int temp = num1;
//数据交换
num1 = num2;
num2 = temp;
System.out.println(num1);
System.out.println(num2);
//第二种 加减法
int a = 3;
int b = 4;
a = a + b;
b = a - b;
a = a - b;
System.out.println("a="+ a + ",b=" + b);
//第三种 乘除法
int a = 3;
int b = 4;
a = a * b;
b = a / b;
a = a / b;
System.out.println("a="+ a + ",b=" + b);
// 第四种 异或运算
//二进制 十进制
a = 2; 0010 2
b = 5; 0101 5
a = a ^ b; 0111 7
b = a ^ b; 0010 2
a = a ^ b; 0101 5
System.out.println("a="+ a + ",b=" + b);
2、8种数据类型
数值类型:
整数类型:byte、short、int、long
小数:float、double
非数值类型:char、boolen(true/false)
引用数据类型3个
类(String),接口,数组(String是类类型,不是基本类型。)
整数型(byte、short、int 和 long)的基本类型变量的默认值为 0。
单精度浮点型(float)的基本类型变量的默认值为 0.0f。
双精度浮点型(double)的基本类型变量的默认值为 0.0d。
字符型(char)的基本类型变量的默认值为 “\u0000”。
布尔型的基本类型变量的默认值为 false。
数组引用类型的变量的默认值为 null。如果创建了数组变量的实例,但没有显式地为每个元素赋值,则数组中的元素初始化值采用数组数据类型对应的默认值。
3、面向对象的特征有哪些方面?
封装
最常见的是把属性私有化封装在一个类里面,只能通过方法去访问
继承
子类继承父类,从而继承了父类的方法和属性
抽象
比如一个英雄类,抽象出了name,hp这些属性,使得开发过程中更加易于理解
多态
多态分操作符的多态和类的多态。 类的多态指父类引用指向子类对象,并且有继承,有重写。
4、&和&&的区别
& 有两个作用,分别是 位与 和 逻辑与
&& 就是逻辑与
作为逻辑与, & 和 && 分别表示长路与和短路与
长路与 两侧,都会被运算
短路与 只要第一个是false,第二个就不进行运算了
5、short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; 这一句没有错误,编译器会自动把1这个整数处理为short.
s1 = s1 + 1; 右侧的表达式会返回一个Int类型的整数,再把这个int类型的整数赋给short类型的s1的时候,就会出现强制转换错误
6、获取某个区间的随机数
public class random {
public static void main(String[] args) {
int min = 30;
int max = 45;
int random = min + (int)(Math.random()*(max - min));
System.out.println(random);
}
}
7、java8中switch(String)的错误解决
在jdk1.7中,switch(String)格式是可以支持的,但是在jdk1.8中却不行
8、开发过程遇到的异常
ArrayIndexOutOfBoundsException: 数组下标越界异常
java.lang.NullPointerException:空指针异常
NegativeArraySizeException 为数组分配的空间是负数异常
运行时异常与一般异常有何异同?
运行时异常 又叫做非可查异常,在编译过程中,不要求必须进行显示捕捉
一般异常又叫做可查异常,在编译过程中,必须进行处理,要么捕捉,要么通过throws 抛出去.
9、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
Math.round 的意思是+0.5 取整数
所以 Math.round(11.5) 即 11.5+0.5 = 12
Math.round(-11.5) 即 -11.5+0.5 = -11
10、数组有没有length()这个方法? String有没有length()这个方法?
数组获取长度的手段是 .length 属性
String获取长度的手段是 length()方法
集合获取长度的手段是 size()方法
文件获取长度的手段是 length()方法
NodeList获取长度的手段是getLength()方法
11、switch 是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch 可以作用在 byte,short,int String,Enum(枚举) 上,但是不能作用在long上面
注意:switch 作用在String上从JDK1.7开始支持,实质是编译时将字符串替换为了其对应的hash值
12、在JAVA中,如何跳出当前的多重嵌套循环
在外部循环的前一行,加上标签
在break的时候使用该标签
即能达到结束多重嵌套循环的效果
public class HelloWorld {
public static void main(String[] args) {
outloop: //outloop这个标示是可以自定义其他:比如outloop1,ol2,out5
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.println(i+":"+j);
if(0==j%2)
break outloop; //如果是双数,结束外部循环
}
}
}
}
13、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
try里的return 和 finally里的return 都会执行,但是当前方法只会采纳finally中return的值
14、关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
throws 用在方法声明上面,表示该方法有可能抛出某个异常
throw 抛出一个指定的异常
try catch 在try中有可能会抛出某个异常,一旦某个异常抛出后,就会在catch中进行捕捉,他俩一般说来都是成对出现的。
finally: 表示无论是否捕捉住异常,都会执行
15、int 和Integer的区别
int是基本类型32位长度的整数
Integer是类类型,是int的封装类
int和Integer之间可以通过自动装箱、自动拆箱互相转换
16、String和StringBuffer以及StringBuilder的区别
String是不可变的,一旦赋值,就不可以改变
举例说明
String str = "abc";
System.out.println(str);
str = str + "123";
System.out.println(str);
结果为
abc
abc123
虽然看上去都是对str进行操作
在第一步
String str = "abc";
JVM对先创建了一个String对象str并赋值"abc";
在第二个str上,实际上JVM又创建了一个名为str的String类型对象,然后又把”123“和原来的str值加起来赋值给新的str