Myeclipse于eclipse的区别:
eclipse是开发java的一款专业ide,它本身就是由java程序所开发,myeclipse本身是eclipse的插件(用于开发javaee的平台),后来myeclipse把eclipse集成进去了,所以本人自己理解Myeclipse是一个加强版的Eclipse。
java(JDK1.5新特性:静态导入)
好处:静态导入后,可以在不写类名的情况下,直接调用自己所导入类里面已经定义好了的类方法。提高的代码编写的效率,
代码演示:
//非静态导入的代码:
public class TestStatic{
public static void main(String[] args){
System.out.println(Integer.toHexString(42));
}
}
//静态导入之后的代码:
import static java.lang.System.out;
public class TestStaticImport {
public static void main(String[] args){
out.println(Integer.toHexString(42));
}
}
java (JDK1.5新特性:可变参数和增强for循环)
适用于参数个数不确定,类型确定的情况。
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组。
注意:可变参数必须写在参数列表的最后面。
可变参数结合增强for代码演示:
public class VarableParameter
{
public static void main(String[] args)
{
System.out.println(add(1,2,3,5,6,8,9,10));
<span style="white-space:pre"> </span>System.out.println(add(4,5,8,10));
}
<span style="white-space:pre"> </span>//当参数类表的最后,变量类型和和变量名出现了...这个就是一个可变参数,
<span style="white-space:pre"> </span>//它能接收不确定个数的参数,但是确定变量类型
public static int add(int x,int...args)
{
int sum = x;
//调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,
//在方法体中以数组的形式访问可变参数,那么我们就用到了遍历数组来进行操作。
//因此就用到了增强for
for(int arg : args)
{
sum+= arg;
}
return sum;
}
}
Java(JDK1.5新特性:基本数据自动拆装箱及享元设计模式)
例如:
Integer iObj = 3;//这个在1.5之前是非法操作,编译不通过的,
然而1.5开始:基本类和基本数据类型可以无需转换直接参与计算
那么在程序中,两个Integer对象的值都为3,但是它们比较的结果为true,但是数值一旦超过-128~127这个范围时,比较结果为false。
这时就涉及到了java的享元设计模式了(flyweight)
因为小的数字重复使用的频率比大的数据高,如果一出现就封装成对象,那么最后对象越来越多,占用的内存会显得很臃肿,而把这些重复属性的对象(数值在一个字节之内-128~127之间时)进行封装成一个对象,它就在内存中只占用一个对象的空间,而把它们不同的属性变成方法的参数传递进来进行操作,实现共享。
代码演示:
public classAutoBox
{
public static void main(String[] args)
{
//自动装箱
IntegeriObj = 3;
//自动拆箱
System.out.println(iObj + 12);
Integeri1 = 13;
Integeri2 = 13;
System.out.println(i1 == i2);
//两个对象对比的结果是true
//如果超出数值在一个字节之内-128~127之间时就会为false
}
}
java(JDK1.5新特性:枚举)
作用: 枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标
Java中的枚举并不是简单常量的集合,而是一个对象,其本质依然是类,所以Java中的枚举除了提供一系列相关值以外,还提供了一些额外功能,甚至还可以根据需要自行添加一些功能
代码演示:
public classEnumTest {
public static void main(String[] args){
//WeekDay1 weekDay = WeekDay1.MON;
//System.out.println(weekDay.nextDay());
WeekDayweekDay2 = WeekDay.FRI;
System.out.println(weekDay2);//默认就是获取对象的名称
System.out.println(weekDay2.name());//也可以指定用name方法,获取对象的名称
System.out.println(weekDay2.ordinal());//这个变量对应引用类型的排序位置,从0开始排的
System.out.println(WeekDay.valueOf("SAT"));//根据字符串封装为对象
System.out.println(WeekDay.values().length);//得到枚举类中的所有的枚举元素长度,并用增强for循环遍历
}
//enum可以理解成为是特殊的class,
//它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。
public enum WeekDay{
//元素列表必须位于枚举类的最前面
SUN,MON,TUE,WED,THI,FRI,SAT;
//枚举的构造方法必须是私有private的
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("sencond");}
}
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLampnextLamp();
private int time;
private TrafficLamp(int time){this.time=time;}
}
}
反射的基石-àClass类(此特性从JDK1.2就开始出现了。)
java程序中的各个java类属于同一类事物,那么这类事物就称之为Class类。
详细的的说Class类就是描述内存中的字节码文件的,该类的对象就是内存中加载的字节码文件。
获取Class类常见的几种方式
ClassforName(“String”); //通过字符串的形式获取Class对象。
类名.class; //直接通过类名获取Class对象。
new Object().getClass(); //通过对象调用getClass方法获取Class对象。
反射的作用是把类中的各种成分,映射到相应的类,
获取Constructor类对象(代表某一个类中的构造函数)
代码演示:
//获取这个类的所有构造方法。
Constructor[] constructors = Class.forName(“java.lang.String”).getConstructors();
//获取某一个构造方法:
Constructor constructor = String.class.getConstructor(StringBuffer.class);
获取Field类对象(代表获取一个类中的某一个成员变量)
代码演示:
//假设有一个ReflectPoint类,里面有x和y变量类型为int类型,而且都具备了get
//方法,获取其中一个变量并打印
ReflectPoint point = new ReflectPoint(4,9);
Field fieldX = point.getClass().getField(“x”);
System.out.println(fieldX.get(point));
获取Method类对象(代表获取一个类中的某个成员方法)
代码演示
//获取这个类的一个成员方法
//定义一个字符串变量,并且设值。
String x = “abc”;
Method methodCharAt =String.class.getMethod(“charAt”,int.class);
System.out.println(methodCharAt.invoke(a,1));
数组的反射
数组的Class对象:具有相同的元素类型和相同的维度代表是相同的Class实例对象。
数组的Class对象调用getSuperClass可以返回一个父类对应的Class类型对象。
基本类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用,非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。
反射的价值
Java中工具类是被用户所调用,而框架是调用用户提供的类。要实现框架这种功能,就必须要解决:无法知道用户类的名称,不能创建用户类的对象这些问题,那么就需要通过反射的方式来解决。