您的位置:首页 > 职场人生

自己遇到的java面试题

2016-09-06 00:00 246 查看
1、杠杆利用类型参数推断

首先是一个静态方法:

class New1 {

public static <K, V> Map<K, V> map(){

return new HashMap<K, V>();

}

// 然后可以这样创建一个Map:

public static void test(String[] args){

Map<String, List<Cat>> catMap = New.map();

}

}

可以发现,右边的不用再按照以前的这种写法了:

Map<String, List> catMap = new HashMap<String, List>();

左边声明部分的类型为右边提供了一种推断,使得编译器可以直接创造出来具体的类了。不过,这种场景没有声明,直接使用New.map()是编译不通过的,因为没有像这里左边的可以推断的依据了, 如下面的,加入f()是一个方法,需要传入一个Map,如下的写法是编译不通过的:

f(New.map());

如果确实还是想按照上面那样使用,则可以考虑使用显示类型说明了,在操作符与方法名直接插入尖括号显示的指明类型,代码如下:

F(New.<Person, List>map());

不过这种方式很少使用。也就是说,在编写非赋值语句时,才要这样的说明,而使用不了杠杆利用类型推断。

2. 下列输出结果

System.out.println(6+6+”Result”+6+6);

结果为:

12Result66

原因:遇到+会转换成stringbuilder append()方法,前面的6+6是四则运算,+后面的会类型匹配转换成string, +前后如果有string,那么非string的参数会自动转换成string

3.null调用

public class Test {

public void foo() {

System.out.println("local");

}

public static void main(String[] args) {

((Test) null).foo();

}

static {System.out.println("static");}

}

结果:

Exception in thread "main" java.lang.NullPointerException

at com.shenyanf.www.Test.main(Test.java:8)

static

如果修改为

public class Test {

public static void foo() {

System.out.println("local");

}

public static void main(String[] args) {

((Test) null).foo();

}

static {System.out.println("static");}

}

结果:

static

local

因为引用的是静态方法,静态方法使用静态绑定,不会抛出空指针异常

4.char[] pirntln显示

打印char数组,相当于打印char数组组成的字符串,如果一个char数组是null那么它无法转换为字符串当然打印不了。

而println没有专门打印int数组的方法,如果你println一个int数组,实际调用的是println(Object o)这个方法,所以这个数组是按普通对象来打印的,而普通对象为null是,println就会输出null。

public class Test{

long[] i = { 1, 2, 3, 4 };

public static void main(String[] args) {

Test test = new Test();

System.out.println(test.i);

}



结果:显示[J@55f33675,显示数组的地址,只有char数组会转换成string

5.length(),length,size()

1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.

2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.

3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!

这个例子来演示这两个方法和一个属性的用法

public static void main(String[] args) {

String[] array={"ma","cao","yuan"};

String str="macaoyuan";

System.out.println(array.length);

System.out.println(str.length());

List<Object> list=new ArrayList();

list.add(a);

System.out.println(list.size());

}

输出的值为:

3

9

1

6.stirng 转换成int 不用integer.praseInt

public void String2Integer(String str) {

char[] ch = str.toCharArray();

int temp = 0;

int value = 0;

for (int i = 0; i < ch.length; i++) {

temp = ch[i] - '0';

value = temp + value * 10;

}

System.out.println("value is " + value);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: