overLoad vs override
jdk1.5新特性:
package baseStrengthen;
import static java.lang.Math.*;
public class StaticImport
{
public static int add( int x ,int ... args)
{
int sum=x;
// for(int y=0; y<args.length; y++)
// {
// sum += args[y];
// }
for(int arg:args)
{
sum += arg;
}
return sum;
}
public static void main(String[] args)
{
theNew();
// System.out.println(add(2,3,4));
// System.out.println(max(3,6));
}
// JDK1.5新特性,自动拆箱和装箱
public static void theNew()
{
Integer i = 3;
System.out.println(i+32);
// -128 到 127 在一个字节范围内 ,就不再创建新的对象了,所以属于
同一个对象,如果不在这个范围内,就不是同一个对象。
// 这也是一个模式,叫做享元模式,flyweight
Integer i1 =127;
Integer i2 = 127;
Integer i3 = 137;
Integer i4 = 137;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
枚举:JDK1.5的一个新特性,比较重要,以前是 C语言里面的东西,
现在又把以前的东西找回来。
把某些数据类型的值固定,只能使用固定的那几个值,除此之外不能使用其他的值。
枚举就相当于是一个类,枚举里面元素,成员,就相当于是对象。
枚举的构造方法必须是私有的,在枚举的后面跟上一个括号()就表示要使用哪个构造方法。
枚举的关键字,enum相当于class.
外部类只有默认的和public修饰,内部类可以有四个修饰符号,public private,protected,默认的。
枚举后面用大括号,表示他的匿名内部子类。
package baseStrengthen;
public class EnumDemo
{
public static void main(String[] args)
{
// WeekDay weekDay = WeekDay.SUN;
System.out.println(weekDay.nextDay());
//
// WeekDay1 weekDay1 = WeekDay1.FRI;
// System.out.println(weekDay1);
// System.out.println(weekDay1.name());
// System.out.println(weekDay1.ordinal());
// System.out.println(WeekDay1.valueOf("SUN").toString());
}
public enum WeekDay1
{
// 元素列表必须是第一行
SUN(2),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay1()//枚举的构造方法必须是私有的。
{
System.out.println("first");
}
private WeekDay1(int day)
{
System.out.println("second");
}
}
public enum TrafficLamp
{
RED
{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN
{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW
{
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp();
}
}
反射机制,
Class是一个大写的类,是一个类的名字叫Class.
Person p1 = new Person();
Person p2 = new Person();
得到字节码的几种方式:
Class cls1 = Date.class//Date类型的字节码;
p1.getClass();
Class.forName("java.lang.String");
有九个预定义的Class对象。
isPrimitive();是否是基本数据类型或者叫是否是原始类型。
isArray();是否是数据类型。
反射:
反射就是把JAVA类中的各种成分映射成相应的JAVA类,反射是用于做框架用的。
Method类,Constructor类。
反射比较占用性能,会导致程序性能严重下降
package baseStrengthen;
public class ReflectTest
{
public static void main(String[] args)throws Exception
{
String str1 = "dalkfj";
Class cls1 = str1.getClass();
Class cls3 = String.class;
Class cls2 = Class.forName("java.lang.String");
System.out.println(cls2==cls1);
System.out.println(cls1==cls3);
System.out.println(str1.getClass().isPrimitive());//是否是基本数据类型
System.out.println(int.class.isPrimitive());//是否是基本数据类型
System.out.println(int.class==Integer.class);
System.out.println(int.class == Integer.TYPE);
}
}
JUnit:JAVA测试工具,用于测试程序的,测试程序建议使用JUnit。
私有的构造函数不可以被外面的访问,但是反射可以做到这一点。