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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

奋斗蒙 2017-04-26 12:58:00 浏览1597
展开阅读全文
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->preferences。如果要
为 eclispe 再配置一套环境选项,可以再创
建一个 workspace。Package explorer 视图窗口中的 filters 菜单项,可以显示空的父包(此
功能默认是关闭的)。
设置快捷键、工作间。
快捷键使用技巧(经常出现软件之间快捷键冲突):
快捷键的位置:window->preferences->General->keys,设置 alt+/键进行内容提示时,要注意
解除 alt+/键原来的绑定关系,直接输入 alt+/就可以找到它的绑定关系,删除绑定关系时也
可以使用 remove binding 这个按钮,课后必须教会大家在 eclipse 中。
代码模板的设置位置:java->editor->Templates
代码模板(template)的作用
自己可以添加,自定义,例如设置 tryf 方便敲出 try{}finally{};
多想一想:eclipse 工作台中的所有工程继承工作台的配置,其中某个工程也可以覆盖工作台
的配置!这是不是 java 面向对象的思想啊?
设置单个工程的 javac 和 java
选择工程,右键->properties 可以设置 javac,右键->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));
}
}
使用静态导入的:
package reviewDemo76;
import static java.lang.Math.*;
public class Demo12 {
public static void main(String[] args) {
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<=args.lengrth;i++){
Sum+=args[i];
}
return sum;
}
 
4、增强 for 循环
语法:
for ( type 变量名:集合变量名 ) { … }
注意事项:
迭代变量必须在( )中定义!
集合变量可以是数组或实现了 Iterable 接口的集合类
举例:
public static int add(int x,int ...args) {
int sum = x;
for(int arg:args) {
sum += arg;
}
return sum;
}
我的总结:这些都是 java5 出现的新特性!
 
5、基本数据类型的自动拆箱与装箱
——> -128~127 之间的特殊性。为什么要这样设计,好处?
——> 享元模式(Flyweight Pattern):享元模式的特点是,复用我们内存中已存在的对象,
降低系统创建对象实例。
自动装箱:
Integer num1 = 12;
自动拆箱:
System.out.println(num1 + 12);
基本数据类型的对象缓存:
Integer 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){
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
},
GREEN(45){
@Override
public TrafficLamp nextLamp() {
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) {
this.time = time;
}
}
public class EnumDemo4 {
public static void main(String[] args) {
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(12);
col.add(23);
col.add(36);
System.out.println(col);
}
}

网友评论

登录后评论
0/500
评论