JDK 5.0特性
1,静态导入
import static java.lang.Math.*; //静态导入的是静态方法和静态类,或者是静态成员变量 class StaticImport { public static void main(String[] args) { int a=Math.max(10,20); int b=Math.min(10,20); System.out.println(a); System.out.println(b); } }
2,装箱和拆箱
//装箱和拆箱 //值类型转换为引用类型---装箱 //引用类型转换为值类型---拆箱 class BoxAndUnBox { public static void main(String[] args) { //5.0之后才可以这样写 // Integer i=new Integer(0); // int j=i; //将值类型转换为封装类型,即装箱 //4.0版本 需要进行封箱,和拆箱 Integer i=new Integer(10); int j=i.intValue(); System.out.println(j); Double dou=new Double(20.0); double d=dou.doubleValue(); System.out.println(d); //反之 int int1=1; Integer int2=new Integer(int1); System.out.println(int2); System.out.println(i+"...."+j); int x= 0; Integer y=x; System.out.println(x+"..."+y); /* *0....0 *0...0 //在基本数据类型中,会出现int-- short--long--float--double之间的转换 //例如: */ int z=10; print(10); //此时调用 print(int i),若将 print(int i)注释掉,则会调用 print(short i)。。。。一次类推 } public static void print(int i) { System.out.println(i); } public static void print(short i) { System.out.println(i); } public static void print(long i) { System.out.println(i); } public static void print(float i) { System.out.println(i); } public static void print(double i) { System.out.println(i); } }
3,可变类型
class Variable { public static void main(String[] args) { Integer[] numsInteger={1,2,3,4,5,6,7}; print(numsInteger); /* 1 2 3 4 5 6 7 This is print[] */ //int[] numsInt={1,2,3,4,5,6,7}; //print(numsInt);//这样写将报错 /* 需要: Integer[] 找到: int[] 原因: 无法通过方法调用转换将实际参数int[]转换为Integer[] */ printVar(1,2,3,4,5,6);//调用可变类型参数方法 printVar(numsInteger); } public static void print(Integer[] num) { for (int i=0;i<num.length ; i++) { System.out.println(num[i]); } System.out.println("This is print[]"); } public static void printVar(Integer... num) //这里使用可变类型,可变类型默认为数组, { for (int i=0;i<num.length ; i++) { System.out.println(num[i]); } System.out.println("This is printVar[]"); }
//public static void printVar(Integer[] num)
//此方法不能与可变参数 public static void printVar(Integer... num) 同时存在,因为可变参数最终被当做数组使用
//实际参数是组数,数组将被打散最终以printVar(1,2,3,4,5,6,7)进行传入
//可变参数只能放在方法参数列表的最后一位:一个方法只能有一个可变参数
// public static void printVar(Integer... num,int a)错误
// public static void printVar(Integer... num,String... str) 错误
}
4,泛型
package cn.itcast.base; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; public class GenericTest { public static void main(String[] args) { /* * 格式:类型<类型[,类型...]> * * 泛型使用必须前后相同 * * 泛型是在编译前进行类型约束,在字节码文件中不存在泛型信息 */ List<String> list = new ArrayList<String>(); list.add("abc"); // list.add(123); Map map = new HashMap(); map.put(123, 123); //没有泛型的map 的遍历 Set s = map.entrySet(); Iterator ite = s.iterator(); while(ite.hasNext()){ Map.Entry entry = (Entry) ite.next(); Integer key = (Integer) entry.getKey(); Integer value = (Integer) entry.getValue(); System.out.println("*** " + key + ":" + value); } Map<String,Integer> map2 = new HashMap<String, Integer>(); map2.put("123", 456); map2.put("abc", 789); //遍历map [key,value][key,value] // map2.keySet() 获得所有的键值 key Set<Map.Entry<String,Integer>> set = map2.entrySet(); //获得每一组 Entry(key,value) //迭代器 Iterator<Entry<String,Integer>> it = set.iterator(); while(it.hasNext()){ Map.Entry<String, Integer> entry = it.next(); String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + ":" + value); } } /* * 不能同时存在 * public void demo(List<String> list){ } public void demo(List<Integer> list){ }*/ }
5,foreach
package cn.itcast.base; import java.util.ArrayList; import java.util.List; public class ForEachTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("abc"); //list.add(123); //遍历list for(int i = 0 ; i < list.size(); i ++){ String obj = list.get(i); System.out.println(obj); } for(String s:list){ System.out.println("##" + s); } //没有泛型 List l = new ArrayList(); l.add("abc"); l.add(123); for(Object o :l){ System.out.println("---" + o); } String[] str = {"abc","edc"}; for(String s:str){ System.out.println("string " + s); } /* foreach * for(类型 变量名 : 集合(Iterable)|数组){} * * * 需要实现Iterable接口的所有的集合。只要能够迭代的所有的集合 */ } }
package cn.itcast.base; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; public class ForEachTestDemo { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("abc"); list.add("abcd"); list.add("asf"); list.add("ceg"); list.add("daf"); list.add("dfs"); //迭代器 Iterator<String> it = list.iterator(); while(it.hasNext()){ String str = it.next(); if(str.contains("a")){ //list.remove(str); //java.util.ConcurrentModificationException it.remove(); } } System.out.println(list); } public void demo3(){ //java.util.Arrays.ArrayList List<String> list = Arrays.asList("abc","bcd", "asf", "ceg", "daf", "dfs"); for(int i = 0 ; i < list.size() ; i ++){ String str = list.get(i); if(str.contains("a")){ //java.lang.UnsupportedOperationException list.remove(i); } } System.out.println(list); } public void demo2(){ //不能删除 List<String> list = new ArrayList<String>(); list.add("abc"); list.add("abcd"); list.add("asf"); list.add("ceg"); list.add("daf"); list.add("dfs"); //java.util.ConcurrentModificationException for(String s:list){ //foreach不能删除 if(s.contains("a")){ list.remove(s); } } System.out.println(list); } public void demo(){ List<String> list = new ArrayList<String>(); list.add("abc"); list.add("abcd"); list.add("asf"); list.add("ceg"); list.add("daf"); list.add("dfs"); list.add("abc"); for(int i = 0 ; i < list.size(); i++){ String str = list.get(i); if(str.contains("a")){ //确定是否包含字符串a //移除 list.remove(i); // list.remove(str); i --; } //System.out.println(str); } System.out.println(list); } }