您的位置:首页 > 编程语言 > Java开发

黑马程序员——高新技术---eclipse使用技巧、静态导入、可变参数、增强for循环、 自动拆装箱、枚举

2014-10-11 11:11 1091 查看
-------android培训java培训、期待与您交流!
----------

一.Eclipse的使用技巧

1.MyeEclipse是eclipse的插件

注1:IDE开发工具都支持使用工程化方式管理一个项目的程序开发过程,一般说一个相对独立的项目就是一个工程,一个项目中涉及的多个java文件,资源文件等用一个工程进行管理。在不使用工程管理的情况下,如果一个项目中包括多个java源文件,编译人员需要精心维护这些源文件之间、以及源文件与其它文件的目录关系,需要逐一编译这些源文件,需要手工启动运行编译后的结果。如果将一个程序的所有源文件用一个工程来组织,开发工具能对所有源文件集中管理,记住每个源文件的位置和相互关系。工程中有那几个源文件、启动类是哪个、启动参数设置等配置信息在工程中都有记录。
一个workspace可以包含多个project,一个workspace保留了eclipse的一套环境选项的配置,例如,所使用的javac和java 命令,等等,细节请查看window->preferrences。如果要为eclipse再配置一套环境选项,可以再创建一个workspace。Package explorer视图窗口中的filter菜单项,可以显示空的父包。
2.workspace与project
一个工作间(workspace)包含多个工程(project),工作间的设置影响到此工作间下的所有工程
>新建和切换工作间
File->Switch Workspace
>导入项目
File->Import->Existing Projects into Workspace
3.Perspective与view
打开与切换透视图(Perspective)
显示视图(view)
注3:一个Perspective代表了若干个View的集合。

4.设置整个workspace的javac与java
>Windows->Prefferences->Java->Compiler->Compiler compliance level
>Windows->Prefferences->Java->Installed JREs
5.设置单个工程的javac与java
>右键->Properties->Run/Debug Settings
>右键->Properties->Java Compiler
>高版本的java能否运行低版本的javac编译的程序?能
>低版本的java能否运行高版本的javac编译的程序?不能
注5:设置单个工程的编译环境(javac)和运行环境(java):选择工程,右键->properties可以设置javac,右键->open run dialog可以设置java。

6.设置快捷键的绑定与代码模板
>Windows->Preferences->General->Keys
注6:快捷键的使用技巧:快捷键的位置:General->Keys,设置alt+/进行内容提示时,要注意接触alt+/键原来的绑定关心,直接输入alt+/就可以找到绑定关系,删除绑定关系时可以用remove binding这个按钮。

7.利用快捷键提高工作效率
>在应用中具体举例详解
注7:代码模板的设置:位置:java->editor->Template
 

二.静态导入

1.import语句可以导入一个类或某个包中的所有类
2.Import static语句导入一个类中的某个静态方法或所有静态方法
使用时直接写方法名即可,不用写类名来调用
3.语法举例:

import static java.lang.Math.max;
import static java.lang.Math.*;
{
..........
Max(3,6);
.........
}

三.可变参数

1.问题:一个方法接受的参数个数不固定,例如:
>add(2,3,5)
>add(1,2,3,5)
2.可变参数的特点:
>只能出现在参数列表的最后
> ‘...’ 位于变量类型和变量名之间,前后有无空格都可以
>调用可变参数的方法时,编译器为该参数隐含创建一个数组,在方法体中以数组的形式访问可变参数
3.语法举例:

<pre name="code" class="java">	public static int add(int x, int... args) {
int sum = x;
for (int i = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}


四.增强for循环

1.语法
>for(type 变量名:集合变量名){......}
2.注意事项:
>迭代变量必须在()中定义
>集合变量可以是数组或实现了Iterable接口的集合类
3.举例:

int[] args=new int[12];
int sum=0;
for (int arg : args) {
sum += arg;
<span style="white-space:pre">	</span>}

五.基本类型自动拆箱装箱

1.自动装箱:
>integer num1=12; //Integer num1=new Integer(12);
2.自动拆箱:
>System.out.printlen(num1+12); //num1.getInteger()
3.基本数据类型的对象缓存:
自动装箱时,数量若是在1字节以内(-128~127)时,会把装箱后的对象放入缓存池中,下次再创建时先从缓存池中查找有无相应值得对象,有则取用,无则创建。此为,享元模式(flyweight),如果有很多小的对象,它们有很多相同的东西,就把他变成一个对象,不同的东西变成外部属性,作为方法的参数传入。相同的东西成为内部状态,不同的东西称为外部状态。
    Integer num1=12;
    Integer num2=12;
    则num1==num2

    Integer num3=129;
    Integer num4=129;
    则num3!=num4
 
    Integer num5=Integer.valueOf(12);
    Integer num6=Integer.valueOf(12);
    则num5==num6

六.枚举

1.为什么要有枚举
>问题:要定义星期几或性别变量,该怎么定义?
假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0.
>枚举就是让某个类型的变量取值只能为若干个固定值中的一个,否则,编译器会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段一无法达到这一目标。
2.用普通类如何实现枚举功能,定义一个weekday的类来模拟枚举功能.
>私有的构造方法
>每个元素分别用一个公有的静态成员变量表示
>可以有若干公有方法或抽象方法,例如,要提供nextDay方法必须是抽象的
普通方法实现:

<pre name="code" class="java">public class WeekDay {
private WeekDay() {
}
public final static WeekDay SUN = new WeekDay();
public final static WeekDay MON = new WeekDay();
public WeekDay nextDay() {
if (this == SUN) {
return MON;
} else if (this == MON) {
return SUN;
}
return null;
}
public String toString(){
return this==SUN? "SUN":"MON";
}
}


抽象方法实现:
public abstract class WeekDay {
private WeekDay() {
}
public final static WeekDay SUN = new WeekDay() {
public WeekDay nextDay() {
return MON;
}
};
public final static WeekDay MON = new WeekDay() {
public WeekDay nextDay() {
return SUN;
}
};
public abstract WeekDay nextDay();
}

采用抽象方法定义nextDay()就将大量的if else语句转移成一个个独立的类。如果想在一个类中编写完各个枚举类和测试调用类,那么可以将枚举定义成调用类的内部类
3.枚举的基本应用
>举例:定义一个WeekDay枚举
>扩展:枚举类的values,valueOf,name,toString,ordinal等方法
>总结:枚举是一种特殊的类,其中每个元素都是该类的实例对象,
例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName
4.枚举类使用
1>

public enum WeekDay {
SUN, MOIN, TUE, WED, THI, FRI, SAT; // 分号可有可无
}

对象方法:
自动实现了toString()方法:weekday2.toString();
                       name方法:weekday2.name();
     排行序号ordinal()方法:weekday.ordinal();
静态方法:
字符串变枚举对象valueOf():WeekDay.valueOf(“SUN”)
   获取枚举类的所有对象的数组:WeekDay.values()
2> 

public enum WeekDay {
SUN(1), MON(), TUE, WED, THI, FRI, SAT;
private WeekDay() {
System.out.println("first");
}
private WeekDay(int i) {
System.out.println("second");
}
}

SUN(1)会调用第二个构造函数,其它的都调用第一个构造函数
3> 带抽象方法的枚举
public enum TrafficLamp{
RED {
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
},GREEN {
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},YELLOW {
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
public abstract TrafficLamp nextLamp();
}

   -------------------------------------------------------------------------------------

public enum TrafficLamp {
RED(30) {
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
},
GREEN(45) {
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(5) {
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time) {
this.time = time;
}
}


5.枚举就相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法
6.枚举元素必须位于枚举体中的最开始部分,枚举列表的后面要有分号与其他成员变量分割。把枚举中的成员方法或变量等放在枚举元素的前面,编译器会报告错误。
7.带构造方法的枚举
>构造方法必须定义成私有的
>如果有多个构造方法,通过枚举元素后圆括号中的参数来选择构造方法
>枚举元素MON和MON()的效果一样,都是调用默认的构造方法
8.带方法的枚举
>定义枚举TrafficLamp
>实现普通的next方法:每个元素是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义
>增加上表示时间的构造方法
9.枚举只有一个成员时,就可以作为单例的实现方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐