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