一:泛型:
数组直接定义了存储的类型,防止出现其他类型的元素,集合能不能也像数组一样,直接规定我们集合的存储类型,针对这种情况出现了一种技术:泛型
//泛型可以定义在建立对象上和建立类上 public class Exercise1 { public static void main(String[] args) { //定义在类上,可以解除黄色警报线 //在定义泛型后,在该类在调用一些方法添加数据时,规定了数据类型,减少错误率 //将运行期会出现的类型异常可以在编译期报错,方便修改 //避免了强制类型转换 //在声明对象中必须写,在new对象是可以不写 ArrayList<String> array=new ArrayList<>(); array.add("hello") ; array.add("world") ; array.add("java") ; Iterator<String> it = array.iterator(); while(it.hasNext()) { String s = (String) it.next() ; System.out.println(s); } }
同时,泛型可以建立在类上,
class abc<T>{ private T obj; public T getObj() { return obj ; } public void setObj(T obj) { this.obj = obj ; } } public class Exericise2 { public static void main(String[] args) { abc<String> a=new abc<>(); a.setObj(new String("张三")); String s = a.getObj() ; System.out.println("姓名是:"+s); // a.setObj(new Integer(27)); //无法在string类型下的类的对象下使用integer数据类型 //解决方案:从新建立integer对象 abc<Integer> a1 = new abc<Integer>() ; a1.setObj(new Integer(27)); Integer i = a1.getObj() ; System.out.println("年龄是:"+i); } }
2.静态导入
静态导入:特点:
1)前提是该方法必须是静态的
2)导入到的一个方法的级别
静态导入的格式: import static 包名.类名.方法名;
import static java.util.ArrayList.add; 方法必须是静态方法
导包可以简单分为两种包:类文件(源程序)和方法包 两种格式不同:类文件import XXXX 方法包 import static XXXX 定位到方法地址
import java.util.Scanner; //类文件 import static java.lang.Math.max; 静态方法包 public class ImportStatic { public static void main(String[] args) { //import java.util.Scanner; 导入类文件包, //public final class Scanner implements Iterator<String>, Closeable { //} 原码包 Scanner sc=new Scanner(System.in); System.out.println("输入第一个数字:"); int a=sc.nextInt(); System.out.println("输入第二个数字:"); int b=sc.nextInt(); System.out.println(max(a,b)); } public static int max(int a,int b) { int x=(a-b)>0? a:b; return x; } }
3.可变参数
在定义一个方法时,不确定具体传入多少个数据,就可以引入可变参数来使用
书写格式:数据类型...变量名 (int...a)
可变参数优点:减少同种方法且参数个数不同的方法书写个数,书写简单
但只局限使用于简单的计算,复杂计算因为参数个数的不确定反而增加书写复杂度
public class Exercise1 { public static void main(String[] args) { int a=1; int b=2; int c=3; int d=4; int e=5; System.out.println(sum(a,b,c,d,e)); //15 System.out.println(sum(a,a,a)); //3 System.out.println(sum(a,b)); //3 System.out.println(sum(a)); //1 } public static int sum(int...a) { int x=0; for(int n:a) { x +=n; } return x; }