一:泛型:
数组直接定义了存储的类型,防止出现其他类型的元素,集合能不能也像数组一样,直接规定我们集合的存储类型,针对这种情况出现了一种技术:泛型
//泛型可以定义在建立对象上和建立类上
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;
}