天天看点

黑马程序员 十四、Eclipse 的使用、增强 for 循环、自动拆箱与装箱等

<a target="_blank" href="http://www.javahelp.com.cn/">java帮帮-it资源分享网</a>

1、eclipse 的使用技巧

eclipse 与 myeclipse 的关系(都属于 java 开发的工具):

后者是前者的一个插件,后来为了方便使用,myeclipse 集合了 eclipse,后者是收费的。

可大部分人都是用 eclipse 等常用的免费软件。最好用的因为别人都在用。这就是市场。

eclipse 是 java 的一种 ide 开发工具。

我的总结:请注意一些英文简写的含义,对应的每个单词。平时积累!

什么叫一个工程(project):

我的看法是,一个独立的项目就是一个工程,一个工程包含多个源文件,运行环境,需要的

资源。

ide(integrated drive electronics)开发工具都支持使用工程化方式管理一个项目的程序开发

过程,一般来说一个相对独立的项目就是一个工程,一个项目中涉及的多个 java 文件,资

源文件等用一个工程进行管理。(在这里可以看看以前工作间中的某个工程的结构),在不使

用工程管理的情况下,如果一个项目中包括多个 java 源文件,编程人员需要精心维护这些

源文件之间、以及源文件与其它文件的目录关系,需要逐一编译这些源文件,需要手工启动

运行编译后的结果。如果将一个程序的所有源文件用一个工程来组织,开发工具能对所有源

文件集中管理,记住每个源文件的位置和相互关系。 工程中有哪几个源文件、启动类是哪

个、启动参数设置等配置信息在工程中都记录。

工作间(workspace):

一个工作间包含多个工程,工作间与工作间之间可以独立配置信息

(编译、运行的版本、快捷键之类的)必须注意:不同的 jre 对应的效果可能不一样,例

如 java5 新特性你用之前的版本,就会报错!

一个 workspace 可以包含多个 project,一个 workspace 保留了 eclipse 的一套环境选项的

配置,例如,所使用的 javac 和 java 命令,等等,细节请查看 window-&gt;preferences。如果要

为 eclispe 再配置一套环境选项,可以再创

建一个 workspace。package explorer 视图窗口中的 filters 菜单项,可以显示空的父包(此

功能默认是关闭的)。

设置快捷键、工作间。

快捷键使用技巧(经常出现软件之间快捷键冲突):

快捷键的位置:window-&gt;preferences-&gt;general-&gt;keys,设置 alt+/键进行内容提示时,要注意

解除 alt+/键原来的绑定关系,直接输入 alt+/就可以找到它的绑定关系,删除绑定关系时也

可以使用 remove binding 这个按钮,课后必须教会大家在 eclipse 中。

代码模板的设置位置:java-&gt;editor-&gt;templates

代码模板(template)的作用

自己可以添加,自定义,例如设置 tryf 方便敲出 try{}finally{};

多想一想:eclipse 工作台中的所有工程继承工作台的配置,其中某个工程也可以覆盖工作台

的配置!这是不是 java 面向对象的思想啊?

设置单个工程的 javac 和 java

选择工程,右键-&gt;properties 可以设置 javac,右键-&gt;run asàopen run dialog 可以设置 java。

例子:

先用新的工作间,然后创建新工程,默认的语言即为 5.0。先使用 integer x = 3;调整编译器

的语法版本为 1.4,看到 eclipse 窗口报错了。然后将这个工程的语言设置为 6.0,马上又看

到 bad version .class 运行错误了,这是因为 myeclise 自带的 java 为 1.5 。然后再将整个工作

间的 javac 设置为 6.0(eclipse 自带的是 jdk1.5),然后看新建工程的 javac,也随之改成了 6.0,

运行则又报 bad version .class 错误。将工程的编译语言再单独改为 5.0,运行则没了问题。

整个工作间的语言设置为 6.0 后,再将整个工作间的 java 也设置为自己安装的 java6。

perspective 与 view(透视图与视图)

1)所谓的不同的透视图:不同的小窗口(view)构成的大窗口(perspective),便于进行特

有的操作,通过 window 的 b 按钮选择不同的 view。

2)在 eclipse 中怎么调试?先双击最左边设置断点,然后回到代码区点右键出现 debug,

出现的 debug 视图后选择需要调试的数据进行 watch。

关于工作间配置 javac(编译版本)和 java(运行版本),简单来说就是高版本运行同级或低

版本编译的源文件。向下兼容。

怎么导入工程

找到需要导入的工程,然后粘贴到所需要的工作台,import 导入(看是否需要设置

jre),buildpath 中设置。

2、静态导入(1.5 特性,好处是不用写类名)

import 语句可以导入一个类或某个包中的所有类

import static 语句导入一个类中的某个静态方法或所有静态方法

语法举例:

import static java.lang.math.sin;

import static java.lang.math.*;

原来的:

package reviewdemo76;

public class demo12 {

public static void main(string[] args) {

system.out.println(math.max(12, 15));

}

使用静态导入的:

system.out.println(max(12, 15));

3、可变参数

是为了解决一个简单的方法在参数不同时多个重载的问题,用带可变参数的一个函数就能解

决。

可变参数的特点:

1)只能出现在参数列表的最后;

2) ... 位于变量类型和变量名之间,前后有无空格都可以;

3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组

的形式访问可变参数。

public int add(int x, int... args){//也可以直接(int..args)就是说传不传都可以

int sum = x;

for(int i = 0; i&lt;=args.lengrth;i++){

sum+=args[i];

return sum;

4、增强 for 循环

语法:

for ( type 变量名:集合变量名 ) { … }

注意事项:

迭代变量必须在( )中定义!

集合变量可以是数组或实现了 iterable 接口的集合类

举例:

public static int add(int x,int ...args) {

for(int arg:args) {

sum += arg;

我的总结:这些都是 java5 出现的新特性!

5、基本数据类型的自动拆箱与装箱

——&gt; -128~127 之间的特殊性。为什么要这样设计,好处?

——&gt; 享元模式(flyweight pattern):享元模式的特点是,复用我们内存中已存在的对象,

降低系统创建对象实例。

自动装箱:

integer num1 = 12;

自动拆箱:

system.out.println(num1 + 12);

基本数据类型的对象缓存:

integer num2 = 12;

system.out.println(num1 == num2);

integer num3 = 129;

integer num4 = 129;

system.out.println(num3 == num4);//false

integer num5 = integer.valueof(12);

integer num6 = integer.valueof(12);

system.out.println(num5 == num6);//false

我的总结:对于享元模式,将最常用的封装以便于我们可以复用!

6、枚举

为什么要有枚举?

问题:要定义星期几或性别的变量,该怎么定义?假设用 1-7 分别表示星期一到星期

日,但有人可能会写成 int weekday = 0;或即使使用常量方式也无法阻止意外。

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。

枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段

无法实现这一目标。

用普通类如何实现枚举功能,定义一个 weekday 的类来模拟枚举功能。

1、私有的构造方法。

2、每个元素分别用一个公有的静态成员变量表示。

可以有若干公有方法或抽象方法。采用抽象方法定义 nextday 就将大量的 if.else 语句

转移成了一个个独立的类

eg:package july78javaenhance;

//很好的一道题目。

enum trafficlamp{

/**

* 对于这道题目而言,使用的其实是匿名对象内部类!

* 枚举最简单的创建对象方法:red,yellow,green

* 对于普通的类而言,创建对象:person p = new person();

*

*/

red(30){

@override

public trafficlamp nextlamp() {

return yellow;

},

yellow(40){

return green;

green(45){

return red;

};

public abstract trafficlamp nextlamp();

private int time;

private trafficlamp(int time){

this.time = time;

public int gettime() {

return time;

public void settime(int time) {

public class enumdemo4 {

system.out.println(trafficlamp.red.nextlamp());

system.out.println(trafficlamp.red.nextlamp().gettime());

7、反射实现框架功能

框架与框架要解决的核心问题

我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使

用我的框架,把门窗插入进我提供的框架中。框架与工具类有区别,工具类被用户的类调用,

而框架则是调用用户提供的类。

框架要解决的核心问题

我在写框架(房子)时,你这个用户可能还在上小学,还不会写程序呢?我写的框架程

序怎样能调用到你以后写的类(门窗)呢?

因为在写才程序时无法知道要被调用的类名,所以,在程序中无法直接 new 某个类的

实例对象了,而要用反射方式来做。

综合案例

先直接用 new 语句创建 arraylist 和 hashset 的实例对象,演示用 eclipse 自动生成

reflectpoint 类的 equals 和 hashcode 方法,比较两个集合的运行结果差异。

然后改为采用配置文件加反射的方式创建 arraylist 和 hashset 的实例对象,比较观察运行

结果差异。

引入了 elipse 对资源文件的管理方式的讲解。

eg:

package july78javaenhance;

//利用资源文件加上反射操作!

import java.io.fileinputstream;

import java.io.inputstream;

import java.util.collection;

import java.util.properties;

public class reflectpropertiesdemo8 {

public static void main(string[] args) throws exception {

//写出来的三个全部是可以的,但是相对又不一样!

// 可 以 的 绝 对 路 径 inputstream ips = new

fileinputstream("src/july78javaenhance/mypro.properties");// 将 这 个

文件加载进来!

// 可 以 的 inputstream ips =

reflectpropertiesdemo8.class.getresourceasstream("mypro.propertie

s");

inputstream ips =

reflectpropertiesdemo8.class.getclassloader().getresourceasstream

("july78javaenhance/mypro.properties");

properties pro = new properties();

pro.load(ips);

ips.close();

string classname = pro.getproperty("classname");

collection col = (collection)

class.forname(classname).newinstance();

//collection col = new treeset();//这样的做法也可以但是现在不想通

过在等号右边具体的新建名称来做!

col.add(12);

col.add(13);

col.add(23);

col.add(36);

system.out.println(col);

继续阅读