黑马软件工程师-高新技术(Eclipse使用技巧和JDK1.5新特性)
------- android培训、java培训、期待与您交流! ----------
Eclipse使用技巧:
eclipse是一种IDE(集成开发环境)开发工具,IDE全称:itegrity development environment
Eclipse中javac和java的配置:Window-------Preferences-------Java------Complier(编译时的设置)和Installed JREs(运行时的设置)。
工程建立常用4步骤:
1、新建工作间:File-------Switch Workspace
2、新建工程:File-------New-----Project-----New Project-----Java Project(点下一步)------New Java Project(输入工程名称)-------finish
3、新建class:工程名称下src(点右键)-----New-----Class-----New Java Class(设置包名和类名)------finish
4、快捷键配置:Window-------Preferences------General-----Keys(如内容助理设置:先找到Content Assist,按Removing Binding解除绑定,然后在Name下的Binding处按想要绑定的键,最后按Apply即可,Ok结束)。
Eclipse下调试变量:在需要查看的语句前面的竖直栏上双击即可插入断点(取消再次双击即可),通过插入两个断点来需要查看的范围,点击右键Debug As运行进行查看,然后选中变量点击右键Watch即可查看变量值的变化。
调用视图小窗口:Window------Show View
JDK1.5新特性:
可变参数:即传入的参数个数可以根据需求进行变化;
可变参数的特点:
1、只能出现在参数列表的最后面;
2、...位于变量类型和变量名之间,前后有无空格都可以;
3、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
如下实例:
public class VarableParameter { public static void main(String[] args) {//主函数 System.out.println(add(4,5,2));//可变参数的调用 System.out.println(add(4,5,2,4));//可变参数的调用 } public static int add(int x,int...ags){//可变参数函数 int sum=x; for(int i=0;i<ags.length;i++){ sum+=ags[i]; } return sum; } }自动拆装箱:可以理解为基本数据类型和对象之间的自动转换,如Integer i=10,10会自动装箱提升为一个new Integer(10)的实例对象,在如Integer i=new Integer(10),int t=i+5;new Integer(10)实例对象会自动拆箱成基本数据类型10,从而与5进行相加计算
但还有一点需注意:如Integer a=127;Integer b=127;这里a==b的,因为当数值在byte范围内时,对于新特性,如果该数值已经存在,则不会再开辟新的空间;Integer的自动装箱范围为一个字节-128—127。
说到自动拆装箱就不得不说一种设计模式:
高级for循环,格式:for(数据类型 变量名:被遍历的集合(Collection)或者数组){};对集合进行遍历只能获取集合元素,但是不能对集合进行操作;迭代器除了遍历,还可以进行remove集合中元素的动作,如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作享元模式(flyweight):有很多个小的对象,他们有很多属性相同,把这些相同的属性变成一个对象,则这些相同的属性称之为这个对象的内部状态;把那些不同的属性变成方法的参数,则这些不同的属性称之为这个对象的外部状态。
枚举:枚举将相对于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法;
枚举元素必须位于枚举体中最开始部分,枚举元素的后面要有分号与其他成员隔开,如果把枚举中的成员变量或方法等放在枚举元素的前面,编译器会报告错误。
带构造函数的枚举:
1、构造方法必须定义成私有;
2、如果有多个构造方法,可以在元素的后面加参数进行选择使用,如MON(1)、SUN;MON()和SUN调用的都是空参数构造函数;
枚举如果只有一个成员时,就可以作为一种单例的实现方式。
枚举实例如下:
public class EnumTest { public static void main(String[] args) { WeekDay weekDay2=WeekDay.MON; System.out.println(weekDay2); System.out.println(weekDay2.ordinal()); TrafficLamp traffic=TrafficLamp.GREEN; System.out.println(traffic); System.out.println(traffic.nextLamp()); } public enum WeekDay{//枚举 SUN(1),MON,TUE,THI,FRI,SAT;//枚举元素 private WeekDay(){System.out.println("first");}//枚举无参构造函数 private WeekDay(int day){System.out.println("second");}//枚举有参构造函数 } 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 TrafficLamp nextLamp();//枚举抽象方法 private int time; private TrafficLamp(int time){//枚举有参数构造函数 this.time=time; } } }
泛型:用于限定集合所存在的对象
泛型格式:通过< >来定义要操作的引用数据类型,如ArrayList<String> al=new ArrayList<String>();
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到< >就要定义泛型,其实< >就是用来接收类型的,当使用集合时,将集合中要存储的数据类型作为参数传递到< >中即可。
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成拓展,现在定义泛型来完成扩展。
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有操作的类型就已经固定了;为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。
特殊之处:静态方法不可以访问类上定义的泛型;如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
?通配符,也可以理解为占位符;
泛型的限定:? extends E,可以接收E类型或者E的子类型,上限;? Super E,可以接收E类型或者E的父类型。