七个新特性
1不定长参数
为什么使用
(1)使用原始参数无法做到不定长
(2)使用数组,可以做到不定长,但是有一个问题,如果不传参数是没法调用的。
(3)语法:类型... 形参
(4)不定长参数必须在最后一位
(5)不定长参数也是一种抽象数据类型,不是基本数据类型。
2静态导入
就是将一个类的静态成员使用导包的方式导入到一个类中。
Import static 。。。。
3增强的for循环
for(容器中的类型 变量名:容器){}
好处:1不会出现下标越界
2 不用做非空性验证
4自动拆箱装箱
1基本数据类型和对应的包装类可以直接进行交互性转换
2拆箱:包装类转换成基本数据类型
装箱:基本数据类型转换成包装类型
5泛型
1泛型简单的使用
2泛型的传递性问题
(1) public class Father< T >{
public void f1( T t){
}
}
public class Child< K > extends Father< K>{ }
public class Test{
Main(){
Child < String > c=new Child< String >();//在new 子类的时候指定
c.f1();//此时f1里面要传入String类型的参数
}
}
(2)public class Father< T >{
public void f1( T t){
}
}
public class Child extends Father< String >{ }//在继承父类的时候指定
public class Test{
main(){
Child c=new Child();
c.f1();//此时f1放的就是String类型
}
}
3 List<Object> 是 List<String>的父类吗?//他们之间没有父子类之说
4 Object[] 是 String[] 的父类吗?是
5 泛型通配符 ? 代表任意类型
List< ? > 是 List<String>的父类吗? 是
List< ? > list 不能再往里扔东西了。
List< ? extends Number > list ,这时list中放的类型只要是Number类型就可以了。
public class Test< T extends Number & Serializable> { } 当new Test的时候必须
传一个Number类型的数据并且实现了Serializable 接口
6 泛型方法
public < K > void test( K k ){}
7泛型最后会被擦出的,仅仅在编译期有效
6注解
自己开发一个注解
@Retention(RetentionPolicy.RUNTIME)//代表这个注解只在运行时有效
@Target({ElementType.FIELD,ElementType.METHOD})//括号中放入的是一个数组,代表这个注解是否可以加在属性或者方法上
public @interface NeedCk {
/**
* 如果一个注解里面出现自己定义的属性,在打注解的地方一定要将这些属性给赋上值
* 如果不想赋值的话,可以在定义属性的时候给它一个默认的值,用default来定义
* 如果想让一个注解只放在方法或者属性上,就在自定义的注解的头上打上相应的注解进行处理
*/
public int id();
public String name();
public int age() default 3;//设置默认值为3,如果用到这个注解的地方这个age属性不赋值默
//认是3,赋值之后就会覆盖了
}
7枚举