myEclipse的使用技巧
关eclipse可以通过任务栏里的javaw
Eclipse是一种IDE开发工具,开发工具都支持使用工程化方式管理一个项目的程序开发过程,一般来说一个相对独立的项目就是一个工程,一个项目中涉及多个java文件,资源管理等用一个工程进行管理
Javaee jde jms jmx jndi
IDE—integrity development environment
File里可以切换工作间,每个工作间的配置信息不一样
在preference里的key来改快捷键
Perspective透视图and view
Perspective-debug java Myeclipse
View 每一个小的窗口,组成透视图
配置java和javac
Preference里Complier 和Installed JREs
编译和运行的版本要一致
高版本的java能运行低版本的java编译的程序
低版本的java不能运行高版本的javac编译的程序
Eclipse工作台中的所有工程继承工作台的配置,其中某个工程也可以覆盖工作台的配置!这是不是java面向对象的思想呢
模版快捷键
Editor→Template→new
静态导入
Import语句可以导入一个类或某个包中的所有类
Import static 语句导入一个类中的某个静态方法或所有的静态方法
Eg:import static java.lang.Math.max;
这样就可以直接用了
可变参数
一个方法接受的参数个数不固定
可变参数的特点:
args只能出现在参数裂变的最后;
…位于变量类型和变量名之间,前后无空格都可以;
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体重以数组的形式访问可变参数
public static int add(int x,int…args){
int sum=x;
for(int i=0;i<args.length;i++){
sum+=args[i];
}
}
增强for循环
public static int add(int x,int…args){
int sum=x;
for(int arg:args)
sum+arg;
}
自动装箱与拆箱
Eg
自动装箱
Integer num1=12;
自动拆箱
System.out.println(num1+12);
基本数据类型的对象缓存:
Integer num1=12;
Integer num2=12;
System.out.println(num1==num2);//true
Integer num3=128;
Integer num4=128;
System.out.println(num3==num4);//false
享元模式 (flyweight):如果数字在一个字节范围里,就是-128到127
这个数字的封装对象就会被缓存起来,因为数字小运用的频率较高,每出现一次就把他封装成一个对象比较占内存。另外一个例子,当我们在输入字符的时候,如果说每一个字母是一个小对象的话,是非常浪费内存的。我们可以采取只有26个对象,每一个对象都有一个字母属性,我们可以设计一个位置属性,把他设计成为一个方法的参数即外部属性,这样每次输入字母的时候就调用这个display的方法,可以供用一个char。另外一个例子就是windows的文件夹图标,每个图标都差不多,但是就是位置和标题不怎么一样,我们就可以这么设计
总之,如果有很多很小的对象,他们有相同的属性,就可以把他变成一个对象,不同的属性可以通过方法的参数传入
Integer num5=Integer.valueOf(12);
Integer num6=Integer.valueOf(12);
System.out.println(num5==num6);//true;
枚举
为什么要有枚举
问题:要定义星期几或性别变量,该怎么定义?假设1-7分别表示星期一到星期日,但有人可能写成int weekday=0;
枚举就是要让某个类型的变量取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序写非法值,普通变量的方式在开发阶段无法实现这一目标。错误越早提醒越好
用普通类如何实现枚举功能,定义一个weekday的类来模拟枚举功能。
私有的构造方法
每个元素分别用一个公用的静态成员变量表示
可以有若干共有方法的或抽象方法,例如,要提供nextDay方法必须是抽象的
public abstract class WeedDay{
private WeekDay(){}//其他的类不能new 此类
public final static WeedDay SUN=new WeekDay(){//抽象方法的内部类
public WeekDay nextDay(){
return MON;}
};
public final static WeedDay MON=new WeekDay(){
public WeekDay nextDay(){
return TUE;}
};
public abstract WeekDay nextDay();//采用抽象方法定义nextDay将大量if.else语句转移成一个个独立的类。
/*public WeekDay nextDay(){
if(this==SUN){
return MON;
}
else{return SUN;}
}*/
Public String toString(){
Return this==SUN?”SUN”:”MON”;
}
}
public class EnumTest{
public static void main(String[] args){
WeekDay weekDay=WeekDay.MON;
}}
枚举的基本应用
扩展:枚举类的values, valueOf, name, toString, ordinal等方法
总结:枚举是一种特殊的类,其中的每个元素都是该类的一个对象,例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName().
Public class EnumTest{
public static void main(String[] args)
{
System.out.println(WeeKDay.valueOf(“SUN”));//把字符转换为字符串
System.out.println(WeeKDay.values().length);//数组
}
public enum WeekDay{
SUN,MON,TUE,WED,THI,FRI,SAT;//SUN(1)调用第二个构造器,如果只是括号调用第一个构造器,数据列表必须是第一个
private WeekDay(){}//其他类不能new此类
private WeekDay(int day){}
}
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 TrafficLamp(int time){this.time=time;}
}
}
要创建单例可以用枚举,枚举只有一个成员时,就可以作为一种单例的实现方式