java面试题及答案

1、新建一个泛型方法,返回Map<K,V>

杠杆利用类型参数推断

首先是一个静态方法:

class New1 { 

            publicstatic <K, V> Map<K, V> map(){

    return newHashMap<K, V>();

  }

 

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

  public staticvoid test(String[] args){

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

  }

}

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

Map<String, List> catMap = newHashMap<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 voidmain(String[] args) {

              ((Test)null).foo();

       }

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

}

结果:

Exception in thread "main" java.lang.NullPointerException

       atcom.shenyanf.www.Test.main(Test.java:8)

static

 

如果修改为

public class Test {

       public static void foo() {

              System.out.println("local");

       }

       public static voidmain(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={"1","2","3"};

String str="1111";

System.out.println(array.length);

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

List<Object> list=new ArrayList();

list.add(a);

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

}

输出的值为:

3

4

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);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值