1、 short s = 1 ;s = s + 1 ;有错吗?为什么?short s = 1 ;s += 1 ;有错吗?为什么?
有错,因为1是int类型,s+1会自动转换成int, 需要强转为short才能用s接收
没有错,因为+=操作符,在解析时自动做了类型转换,等价于(short)(s+1) 。
2、Java 中的 Math. round(-1. 5) 等于多少?
-1.5介于-2和-1之间,四舍五入,所以结果是-1
3、请说下访问修饰符?
Public 公共的,修饰的类和成员,在当前工程中都可以被访问
Protected 受保护的,在子类和同包中可以被访问
默认的,在同一个包中可以被访问
Private 私有的,仅在当前类中可以被访问
4、 final 在 Java 中有什么作用?
1.修饰的变量会变为常量,必须在声明时赋初始值,且值不可修改
2.修饰的方法,不可以被重写
3.修饰的类,不可以被继承
5、 final、finally、finalize 有什么区别?
1.final可以修饰类,方法和变量,表示不可改变。
2.finally是异常处理时的一个代码块,出现在try-catch后面,不论是否发生异常,finally代码块都会被执行。
3.finalize 是Object中的一个方法,当垃圾回收器从内存中清除一个对象时会调用该方法。
6、 请列出5个常见的异常类?
NullPointerException空指针异常
ArrayIndexOutOfBoundsException 数组下标越界异常
ArithmeticException 数学运算异常
ClassCastException 类型转换异常
ClassNotFoundException 找不到指定类,常出现在反射中
7、 == 和 equals 的区别是什么?
==是比较运算符,比较的是两个对象的地址值是否相等。
equals是Object中的方法,在Object中对于equals的实现也是调用== . 但该方法通常被其它类重写,例如String类,重写后的规则是比较两个字符串的内容是否相同。
8、throw 和 throws 的区别?
throw是主动声明一个异常对象。
throws是异常的处理方式之一,用在方法名后面,表示向上抛出异常类型。
9、下面的代码输出什么?
String str6 = “b”;
String str7 = “a” + str6;
String str67 = “ab”;
System.out.println("str7 = str67 : "+ (str7 == str67));
输出false,因为 String s= “a”+”b” 和 String s= “a”+str6不一样.
String s= “a”+”b” 在编译阶段就会合并,和String s= “ab”是等价的。
String s= “a”+str6,中str6是一个变量,在编译过程中不能合并,那么+运算符会用StringBuilder的append方法实现,即:
String s=new StringBuilder().append(“a”).append(str6).toString();且在toString方法中,是new String(),即创建了一个String对象。
10、 下面的代码输出什么?
final String str8 = “b”;
String str9 = “a” + str8;
String str89 = “ab”;
System.out.println("str9 = str89 : "+ (str9 == str89));
输出true,因为str8是一个常量,在编译过程中就会合并在一起。即:
"a" + str8 等价于 "a" +"b"
11、 接口和抽象类有什么区别?
1.接口中只能有抽象方法和静态方法,以及default方法,不能有普通方法。抽象类中可以有抽象方法,也可以有普通方法。
2.接口中只能有public static final 修饰的常量,不能有变量。而抽象类中可以有变量和常量。
3.抽象类只能单继承,即只能有一个直接父类;而接口可以多继承,即:可以继承多个接口。
以上3个点是最核心的区别,当然还会有其它的细节上的区别。
12、下面的代码输出什么?
Integer i1 = 1 ;
Integer i2 = 1 ;
Integer i3 = 128 ;
Integer i4 = 128 ;
System.out.println(i1 == i2);
System.out.println(i3 == i4);
输出true和false.在Integer中有一个缓存区(Integer [] cache),范围是[-128,127],如果给Integer变量赋值在这个范围内,则直接从数组中取对应的元素,所以前者输出为true.反之,如果不在这个范围内,则会new Integer(int) 新建一个对象,所以后者输出为false.
详情查看Integer.valueOf(int) 方法的源码。
13、List Set Map的区别?
List是有序集合,集合中的元素可以重复,有下标。
Set是无序集合,集合中元素不可以重复,没有下标。
Map集合中的元素是entry,即key-value构成的键值对,其中键不可以重复,没有下标。
14、说下java中的集合?
1.集合是一个容器,可以盛放对象或数据,不约束类型,不约束长度。
2.Collection接口是集合的顶层接口,下辖两个子接口:List和Set.
3.List接口常用的实现类有ArrayList和LinkedList.一个是数组结构,一个是链表结构。
4.Set接口常用的实现类有HashSet和TreeSet,一个是无序的,一个是有序的。
5.还有一个接口是Map,常用的实现类有HashMap和TreeMap,一个使用hash算法,一个使用红黑树算法。
15、说下HashTable HashMap的区别?
Hashtable是一个线程安全的集合,单线程集合,速度慢,Hashtable集合不能存储null值,null键。
HashMap是线程不安全集合,是一个多线程集合,不过它的速度很快,可以存储null值,null键。
补充:
1.Hashtable和HashMap都是Map接口的实现类,底层都是哈希表。
2.Hashtable集合逐渐被HashMap集合取代,但是Hashtable的子类Properties依然沿用,Properties集合也是唯一一个和IO流相结合的集合。
16、HashMap(HashSet)用来装学生信息,人数在37-43人左右,请问如何初始化HashMap数量达到性能最优?
答案:64
在创建HashMap(或HashSet)时,可以给一个初始容量,官方建议是2的n次幂,即:16,32,64,128...这些数据,如果元素个数超出了给定的容量,会自动扩容一倍,影响性能。
17、代码中有且仅有如下代码String s1 = new String(“Hello”); ,这行代码会创建几个字符串对象?
2个,分别是:
String s=”hello”; 和 String s1=new String(s); 其中s和s1都是字符串对象,他们也分别代表了字符串对象创建的2种方式。
详情查看https://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html
18、使用冒泡法将整形数组的进行排序
public static void sort(Integer[] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
19、重写跟重载的区别 ?
重写:子类中可以重写父类的方法,要求子类中重写的方法和父类中被重写的方法:方法名相同,参数列表相同,返回值类型相同,且访问修饰符应相同或宽于父类。
重载:同一个类中,方法名相同,但形参不同(形参个数不同,类型不同,顺序不同)的两个方法构成方法的重载。
20、ArrayList跟Vector的区别?
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
21、说下数组跟链表的区别?
在内存中,元素的空间可以在任意地方,空间是分散的,不需要连续
在内存中,数组是一块连续的区域
链表查询慢但是数组查询速度快
链表添加数据和删除数据较快,数组较慢```
22、请说出5个常见的类?说出5个常见的包?
常见的类:
String ArrayList BufferedReader Integer Date
常用的包:
(1).Java.lang包
这个包下包含了Java语言的核心类,如String、Math、Sytem和Thread类等,使用这个包无需使用import语句导入,系统会自动导入这个包中的所有类。
(2)java.io包
这个包含了一些Java输入/输出编程相关的类/接口。
(3).Java.util包
这个包下包含java的大量工具类/接口和集合框架类/接口。如Arrays和List、Set等。
(4)Java.net包
这个包下包含了一些Java网络编程相关的类/接口。
(5).java.sql
这个包下包含了java进行JDBC数据库编程的相关类/接口。