转换:File--->Switch WorkPlace--->要转换的工作间
新建:File--->Switch WorkPlace--->Other.....
方式一:File---->new----> Java Project
方式二:Package Explorer空白区右键--->new----> Java Project
方式一:选中Project或Project下的src文件夹右键--->new---->Packege
方式二:File---->new--->Package--Source Folder选择工程--->包命名
注意:命名包,一般选择公司的网址反转后+.具体有意义的名字,这样做的目的是为了尽量让包下新建的类,在整个Internet上的命名空间中唯一。
路径:Window--->Preferences--->General--->Keys(Content Assist)
View:每个具体的小窗口(Eclipse中有2000多个)
Perspective:为完成某一功能而聚集在一起的多个View的集合
可在Window菜单下选择Open Perspective和Show View
设置整个工作间:Window--->Preferences--->Java--->Compiler(设置javac)和Installed JRE(设置java)
设置单个工程:选择Project名右键---->Properties--->Java Compiler 和Run/Debug Settings
注意:高版本的java可以运行低版本的javac编译的程序,但低版本的java不能运行高版本的javac编译的程序。 工作台的配置和单个项目的配置是继承的关系:单个项目如果没有配置会继承工作台的配置。单个项目如果配置了在会覆盖工作台的配置。
步骤:在要调试的代码行的最前边双击加断点,然后代码区右键--->debug as --->在调试透视图中,选中要查看的变量,右键选择watch。调试完成后,通过右上角的按钮切换到所需的透视图。
设置路径:Window--->Preferences--->Java--->Editor----Templates
使用模板:选中要使用模板的代码行,右键选择Surround With——>选择要使用的模板
选中类名或在代码区,右键后可选择Source和Refactor条目。可实现重命名、抽取方法、重写父类方法、产生构造函数等功能。
a---把该工程文件copy到工作台目录下。
b--- File-->Import--->Existing Projects into WorkSpace--->选择已经copy过了的工程
注意:如果该工程原来的库与现在的不同,则需要通过右键的Build Path条目,先删除导入时默认添加的库,然后选择自己的库 。
import语句:可以导入一个类或某个包中的所有类(不包括子包中的类)
import static 语句:导入一个类中的某个静态方法或所有静态方法。
import static java.lang.Math.*;
public class StaticImport
{
public static void main(String [] args)
{
int x = 12 ;
try
{
x++;
}
finally
{
System.out.println(x++);
}
System.out.println(x);
System.out.println(max(4,5));
System.out.println(abs(5-16));
}
}
当类重名时,需要指定具体的包名;当方法重名时,需要指定该方法所属的对象或类。
若设置的编译器版本低,但代码中用到了新版本的特性,MyEclipse会提示错误,此时只需修改为新版本的编译器即可。
①只能出现在参数列表的最后一位;
②...位于变量类型和变量之间,前后有无空格均可。
③调用参数方法时,编译器为该可变参数隐含创建一个数组(其实,可变参数就是一种数组的简写形式),在方法体中以数组形式访问可变参数。
class VariableParameter
{
public static void main(String[] args)
{
System.out.println(getSum(23, 28, 455));
System.out.println(getSum(34, 46, 8, 44));
}
public static int getSum(int x,int ...args)
{
int sum = x;
for(int arg:args)
{
sum += arg;
}
return sum;
}
}
增强for循环:enhanced for-each
语法:for(VariableModifiers type 变量名:集合变量名){……}
注意事项:type前可加修饰符,如加final,以方便内部类访问等;迭代变量必须在()中定义;集合变量名可以是数组或事项了Iterable接口的集合类.
基本数据类型的装箱与拆箱:Boxing and Unboxing Conversion
基本数据类型:
byte;short;int;long;char;float;double;boolean;
对应的包装类:Byte;Short;Integer;Long;Character;Float;Double;Boolean;
装箱:把基本数据类型转换成对应的包装类。
拆箱:把包装类转成对应的基本数据类型。
在装箱和拆箱过程中有一个新特性,如下边代码所示:
class AutoBox
{
public static void main(String[] args)
{
Integer iobj = 13;//基本数据类型的装箱
System.out.println(iobj+12);//基本数据类型的拆箱
//基本数据类型装箱拆箱的一个特性------(享元模式)
//当Integer封装的数据在一个字节之间(-128~127),则只建立一个对象,成为享元
Integer i1= 127;
Integer i2 =127;
System.out.println(i1 == i2);//ture
//当Integer封装的数据超出一个字节,则每个都新建一个对象。
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4);//false
Integer i5 =Integer.valueOf(3);
Integer i6 =Integer.valueOf(3);
System.out.println(i5 == i6);//true
}
}
上边的这种设计模式即为享元模式(flyweight):
如果有很多很小的对象,它们有很多属性相同,那就可以把他们变成一个对象,把不同的东西变成外部属性,作为方法的参数传入,称之为外部状态,把相同的属性称为内部状态。
枚举:Enum
1.为什么要有枚举?
问题:要定义星期几或者性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0。
枚举就是要让某个类型的变量的值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式无法在开发阶段实现这一目标。它跟泛型一样,都是把运行期的错误,提前到编译期来控制,提高了安全性。
注意:可以创建一个enum类,把它看做一个普通的类。除了它不能继承其他类了。(java是单继承,它已经继承了Enum).
2.用普通类 如何实现枚举功能?定义一个WeekDay的类来模拟枚举功能。步骤如下:
a.私有构造方法。
b.每个元素分别用一个公有的静态成员变量来表示。
c.可以有若干公有方法或抽象方法。例如,要提供nextDay()方法必须是抽象的。
abstract class WeekDay
{
private WeekDay(){}
public final static WeekDay SUN = new WeekDay()
{
//采用抽象方法就是将if else语句转移一个个独立的类
public WeekDay nextDay()
{
return MON;
}
};
public final static WeekDay MON = new WeekDay(){
public WeekDay nextDay()
{
return TUES;
}
};
public final static WeekDay TUES = new WeekDay(){
public WeekDay nextDay()
{
return WES;
}
};
public final static WeekDay WES = new WeekDay(){
public WeekDay nextDay()
{
return THUR;
}
};
public final static WeekDay THUR = new WeekDay(){
public WeekDay nextDay()
{
return FRI;
}
};
public final static WeekDay FRI = new WeekDay(){
public WeekDay nextDay()
{
return SAT;
}
};
public final static WeekDay SAT = new WeekDay(){
public WeekDay nextDay()
{
return SUN;
}
};
public abstract WeekDay nextDay();
public String toString()
{
if(this == MON){
return "MON";
}else if(this == TUES){
return "TUES";
}else if(this == WES){
return "WES";
}else if(this == THUR){
return "THUR";
}else if(this == FRI){
return "FRI";
}else if(this == SAT){
return "SAT";
}else{
return "SUN";
}
}
}
枚举的基本应用
①定义一个Weekday的枚举
②枚举类的values,valueOf,name,toString,ordinal等方法
③枚举是一种特殊的类,其中的每一个元素都是该类的一个实例对象,可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()方法。
enum WeekDay
{
//枚举创建时,调用构造方法
SUN(4),MON(),TUES,WES,THUR,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int x){System.out.println("second");}
}
带有构造方法和方法的枚举举例:
enum TrafficLamp
{
RED(30)
{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(45)
{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW(15)
{
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time =time;}
}
枚举,预先给对象定义好一些值,在给对象赋值时,如果不是指定的值,就报错,不能通过编译。 枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法,
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后边要有分号与其他成员分隔。
把枚举中的成员方法或变量等放在枚举元素的前边,编译器会报错。
带构造方法的枚举的特点:
①构造方法必须定义成私有的;
②枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
当枚举只有一个成员时,就可以作为一个单例的实现方式。
enum TrafficLamp
{
YELLOW;
public static TrafficLamp getInstance()
{
return YELLOW;
}
}