1. 方法的可变参数
public static int add(int ... arr) {
int length = arr.length;
int sum = 0;
for(int i =0; i < length; i++) {
sum = sum + arr[i];
}
return sum;
}
在方法中用 … 表示可变参数
可变参数必须放在方法参数的最后一个并且有且只有一个 ;
2. for-each 语句
//foreach语句格式:
for(元素类型type 元素变量value : 遍历对象obj) {
//引用x的java语句;
}
3. 静态导入(import)(了解)
import static 导入一个类的所有静态域(方法与属性),
使用导入类的静态域就像是在本类中定义的一样;
使用静态导入后调用那个包中的方法可不加类名直接调用;
注意:不推荐使用静态导入;
4. 泛型
在定义时类型不确定,只有在具体使用时才能确定类型
4.1 泛型类
class MyClass<T,E> { //泛型类可以接受多个类型
private T t;
private E e;
}
4.2 泛型方法
class MyClass2 {
//可接收泛型T类型的参数
public <T> void method(T t) {
System.out.println(t);
}
}
4.3 通配符
<?>: 由于传入类型无法确定,因此无法设置具体值到相应对象中public static void fun(Myclass<?> myclass) {
//程序无法得知?代表哪种类型,无法设置这个对象里的属性的值,只能查看
//myclass.setT("hahaha"); //将会报错
System.out.println(myclass.getT()); //输出null
}
<?extends> :表示泛型上限,类与方法均可使用
public static void fun(Myclass<? extends Number> myclass)
<?super> :表示泛型下限 ,只能用在方法级别
public void fun(Myclass<? super String> myclass){}
4.4 类型擦除
泛型只存在于编译阶段,进入JVM之前,与泛型相关的信息会被完全擦除。
在JVM中并不存在泛型的概念。泛型类在进行类型擦除时,若未指定泛型的上限,泛型相关信息会被擦除为Object类,否则,擦除为相应的类型上限。
5. 枚举
//实际是一个继承于Enum类的类
enum Color {
//private int a = 5; 这条语句将会报错,这不能写在第一行,第一行必须是要定义的枚举变量;
红, 黄, 蓝;
}
public class Test1 {
public static void main(String[] args) {
System.out.println(Color.红);
System.out.println(Color.红.ordinal()); //输出对应下标
System.out.println(Color.蓝.name());
//产生一个包含所有枚举变量的数组
Color[] arr = Color.values();
for(Color c : arr) {
System.out.print(c+"、");
}
}
}
注意:enum并不是一个新的结构,使用enum定义的枚举实际上默认继承Enum枚举类。因此enum定义的,枚举结构实际上就是一个多例类;
Enum类常用的三个方法:
ordinal():返回枚举对象下标,默认第一个对象为0;
name():返回枚举对象名称,默认与对象名称保持一致;
values():返回所有枚举对象的数组;
应用枚举注意:
在枚举中支持定义其他结构,如构造方法、普通方法和普通属性等;
当枚举类中还包含其他结构时,枚举对象的定义必须放在首行; (否则会编译报错)
枚举不能够再继承类,因为它默认继承了Enum类,但枚举可以实现一个或多个接口;
6. jdk内置的三大注解
注解:@标识符 @Override @Controller @Date
-
准确覆写: @Override
用途:编译器检查当前覆写方法是否满足要求(方法名称是否正确、权限是否合理),以达到及时显示错误;
-
过期声明:@Deprecated
在早期版本的代码(方法),表示该方法在当前版本中已经不推荐使用,但是使用了也不会报错。只是起一个警告提示作用; -
压制警告:@SuppressWarnings
压制警告信息,压制信息不再提示;