静态导入: import static java.lang.Math.*;
//import static java.lang.Math.max;
导入Math包下 所有的静态方法。这样程序里的静态方法就可以直接使用
import static java.lang.Math.*;
public class StaticImport {
public static void main(String[] args) {
System.out.println(max(5, 2));;
System.out.println(abs(4 - 7));;
}
}
可变参数:
一个方法接受的参数个数不固定例如:
System,out.print(add(2,4));
System,out.print(add(2,3,7));
可变参数的特点:
1 只能出现在参数列表的最后
2 位于变量类型和变量名之间
3 调用可变参数时 ,编译器为该可变参数隐含创建一个数组,
在方法体中 以数组的形式访问可变参数。
public static int add(int x,int... args)
{ int sum=x;
for(int i=0;i<args.length;i++)
{
sum+=args[i];
}
return sum;
}
public static void main(Striang[] args)
{
System.out.println(add(1,5,8));
System.out.println(add(1,4));
}
overlode和 override的区别:
overlode重载,是一个类中定义的多个同名函数,他们有不同的参数类型或参数个数
override重写,子类继承父类后 重写父类的某个方法。如果一个方法打算在子类中被重写,那么就不要在父类中 做具体实现 而是声明为抽象方法。否则很容易违背里氏代换原则及无法实现面向对象设计的最根本目的开闭原则。
overlode和override体现并实现了java的多态性。
增强的for循环
for(type 变量名:集合变量名){...}
注意事项:
1 迭代变量必须在()中定义
2 集合变量可以是数组或实现了Iterable接口的集合类
例子:
public static int add(int x,int... args)
{ int sum=x;
for(int arg:args)
{
sum +=arg;
}
return sum;
}
public static void main(Striang[] args)
{
System.out.println(add(1,5,8));
System.out.println(add(1,4));
}
基本数据类型的自动拆箱和装箱及享元模式
自动装箱 Integer num1=12; 将基本数据类型自动转化为对应的包装类,并赋值给对象
自动拆箱 System.out.print(num1-4); 将包装类的对象自动转化为基本数据类型。
享元模式:很多很小的对象,它们有很多相同的属性,那么把它们变成一个对象,那些不同的属性作为方法的参数传递,称为外部状态,相同的属性称为内部状态
(对基本数据类型进行装箱,如果在1个字节内(Integer 是 在-128 ~ 127之间),编译器会将数据缓存起来,如果再次调用这个数据可以直接使用。因为一些比较小的数据使用频率很高并且不怎么改变,多次创建,浪费内存空间。)
基本数据类型的对象缓存:
Integer num1=12;
Integer num2=12;
System.out.print(num1==num2); //true
Integer num3=130;
Integer num4=130;
System.out.print(num3==num4); //false
Integer num5=Integer.valueOf(12);
Ingeger num6=Integer.valueOf(12);
System.out.print(num5==num6); //true