implements后面可以写多个吗?extends后面可以写多个吗?
现在我有一个长度为1 的Map,怎么最快速,最简便的代码把里面的Entry拿出来(key和value)
答案:
Map.Entry<String, String> next = map.entrySet().iterator().next();
这里面主要考的是JavaEE的基本功眨不扎实,能不能运用自如
请写出数组初始化的四种方式:
1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化;
4.看代码吧:利用Array.newInstance
Integer[] integers = (Integer[]) Array.newInstance(Integer.class, 10); System.out.println(integers.length); // 10
hashCode()与equals()的相关规定如下例子什么结果?
如下例子什么结果?
public static void main(String[] args) { // 备注:若Child类没有重写equals方法,结果是怎样的? Child child1 = new Child(); Child child2 = new Child(); System.out.println(child1 == child2); // false System.out.println(child1.equals(child2)); // false } //由此可以看出,假若你没有重写hashCode()方法,equals比较也会是false的
1.如果两个对象相等,则hashcode一定也是相同的
2.两个对象相等,对两个对象分别调用equals方法都返回true
3.两个对象有相同的hashcode值,它们也不一定是相等的
4.因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖(这算是一个规定)
5.hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)
finally块什么时候不会被执行?try里的return和finally的return返回值问题你理解吗?
在finally语句块第一行发生了异常
在前面的代码中用了System.exit(int)已退出程序。 exit是带参函数 ;若该语句在异常语句之后,finally会执行
程序所在的线程死亡。
关闭CPU。
关于try finally返回值问题:
如果try语句里有return,返回的是try语句块中变量值。 详细执行过程如下:
5. 如果有返回值,就把返回值保存到局部变量中;
6. 执行jsr指令跳到finally语句里执行;
7. 执行完finally语句后,返回之前保存在局部变量表里的值。
8. 如果try,finally语句里均有return,忽略try的return,而使用finally的return.
所以如下返回结果,一目了然吧:
public static void main(String[] args) { System.out.println(fun()); //2 最终返回的是finally里的值,这点需要注意 try里面是不会被返回的 } private static String fun() { try { return "1"; } finally { return "2"; } }
子类继承父类,构造方法问题
class Parent { // 不给无参构造 public Parent(String a) { } } class Son extends Parent { public Son() { } public Son(String s) { } } 报错吗? 答案:编译报错
Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,
因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法,,所以上面可以两种方法解决编译报错:
1、给Parent一个空构造
2、显示调用父类无参构造
class Son extends Parent { public Son() { super("a"); } public Son(String s) { super(s); } }
字符型(char)常量和字符串常量(String)的区别
1 形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符
2 含义上: 字符常量相当于一个**整形值( ASCII 值),**可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)
3 占内存大小 字符常量只占2个字节 字符串常量占若干个字节(至少一个字符结束标志) (注意: char在Java中占两个字节)
public static void main(String[] args) { char a = 'a'; System.out.println(a); //a System.out.println((int) a); //97 System.out.println(a + 10); //107 可以直接做加法运算 String b = "b"; System.out.println(b); //b System.out.println(b + "10"); //b10 进行了拼接 }
请举几个例子,你认为是JDK的bug的问题
例子一:三目运算法的bug
public static void main(String[] args) throws Exception { int i = true ? null : 0; System.out.println(i); }
这样编译不为null,感觉i可议赋值为null一样。但是运行时报错:
Exception in thread "main" java.lang.NullPointerException
例子二:java泛型的bug
比如常见的从MyBatis查出来的数据,类型匹配出错~~
SQL
1、MySQL聚合函数count(1) sum(1)结果返回0还是NULL?
count(1)或者count(*)
返回为0:如果所查询的表或者where条件筛选后得到的结果集为空,则 count(1)返回为 0。如:
select count(id) from test;
select count(id) from test where id < 0;
返回为NULL
如果所查询的表或者where条件筛选后得到的结果集为空且当前层查询中使用了 group by ,则 count(1)返回为 NULL 如:
select count(id) from test where id < 0 group by id;
那那种情况,怎么让它返回0呢??? 使用函数:
SELECT COUNT(*) FROM ( 原来的SQL )
sum(1)
返回为NULL
如果所查询的表或者where条件筛选后得到的结果集为空 ,则 sum(1)返回为 NULL 如
select sum(id) from test where id < 0;
那怎么解决呢?可以使用IFNULL函数(注意:上面count用IFNULL函数无效) 如:
select IFNULL(sum(id),0) from lp_student where id < 0;
常见异常信息如下:org.apache.ibatis.binding.BindingException: Mapper method 'com.xx.xx.xx.xx.xx.getCount attempted to return null from a method with a primitive return type (int).
2、count(1)和count(*)和count(列)有什么区别呢?
往常我经常会看到一些所谓的优化建议不使用Count(* )而是使用Count(1),从而可以提升性能,给出的理由是Count( *)会带来全表扫描。而实际上如何写Count并没有区别。
解释:
Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为NULL则不计数,而非NULL则会计数。比如我们看代码1所示,在Count中指定NULL(优化器不允许显式指定NULL,因此需要赋值给变量才能指定)
对于Count(列)来说,同样适用于上面规则