黑马程序员_eclipse的使用和java1.5新特性以及枚举

时间:2023-01-21 12:13:10

----------- android培训java培训、java学习型技术博客、期待与您交流! ----------

一,Eclipse的使用技巧:

1,什么是eclipse
 Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

2,什么是myeclipse
 MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate

3,eclipse和myeclipse之间的关系
1).Eclipse 是一个IDE(Integrated Developing Environment),而这个IDE是允许安装第三方开发的插件来使自身的功能得到扩展和增强的,而Myeclipse就是其中的一种有名的插件集之一,MyEclipse将开发者常用到的一些有用的插件都集合起来。多数人都是将Eclipse作为Java的集成开发环境使用,虽然Eclipse使用Java开发:但Eclipse不仅仅局限于Java开发,还可用于其它语言的开发,如C/C++; Eclipse是一个框架和一组服务,它通过各种插件来构建开发环境,因此只要提供支持C/C++ 插件便能进行相应语言的开发。
2).MyEclipse为Eclipse提供了一个大量私有和开源的Java工具的集合,这解决了各种开源工具的不一致和缺点。NitroX是一个繁杂而强大的加速Java Web应用开发的工具,还包含了一个强大且能够编译所有JSP和Struts Web应用的工具AppXRay。这些工具解析Java和XML配置文件. MyEclipse的实际价值来自包含的发布包中的大量的工具。如CCS/JS/HTML/XML的编辑器,帮助创建EJB和Struts项目的向导并产生项目的所有主要的组件如action/session bean/form等。还包含编辑Hibernate配置文件和执行SQL语句的工具。

4,名词解释
java ee:Java Platform,Enterprise Edition  是sun公司推出的企业级应用程序版本。这个版本以前称为 J2EE。能够为我们帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java应用程序。

IDE:Integrated Development Environment,,即集成开发环境

JMS:Java Message Service 提供企业消息服务,如可靠的消息队列、发布和订阅通信、以及有关推拉(Push/Pull)技术的各个方面。

JMX:Java Management Extensions,即Java管理扩展,是一个为应用程序、设备、系统等植入。

JNDI:Java Naming and Directory Interface 提供从Java平台到的统一的无缝的连接。这个接口屏蔽了企业网络所使用的各种命名和目录服务。

5,工程管理与快捷键和代码模板
 IDE开发工具都支持使用工程化方式管理一个项目的程序开发过程,一般来说一个相对独立的项目就是一个工程,一个项目中涉及的多个java文件,资源文件等用一个工程进行管理。在不使用工程管理的情况下,如果一个项目中包括多个Java源文件,编程人员需要精心维护这些源文件之间、以及源文件与其它文件的目录关系,需要逐一编译这些源文件,需要手工启动运行编译后的结果。如果将一个程序的所有源文件用一个工程来组织,开发工具能对所有源文件集中管理,记住每个源文件的位置和相互关系。 工程中有哪几个源文件、启动类是哪个、启动参数设置等配置信息在工程中都记录。
 快捷键修改可以在windows中的preferences(首选项)中的通用(general)中的keys里面修改和查找.比如一般输入syso按下alt+/可以自动生成System.out.println(),这样会方便很多,节省很多时间去写代码。设置alt+/键进行内容提示时,要注意解除alt+/键原来的绑定关系,直接输入alt+/就可以找到它的绑定关系,删除绑定关系时也可以使用remove binding这个按钮
 想将一段代码插入一个语句中可以选中这句话右键surroundwith中选中模板,如果没有也可以自己设置模板 比如try {}finally{} 可以在窗口,首选项中java编辑中选择模板添加新模板
 Ctrl + Shirft + /可以注释多条语句

6,工作区间和视图管理
 一个workspace(工作区间)可以包含多个project(工程),一个工作区间的设置可以改变影响下面的每一个工程。一个workspace保留了eclipse的一套环境选项的配置,例如,所使用的javac和java命令,等等,细节请查看window->preferences。如果要为eclispe再配置一套环境选项,可以再创建一个workspace。
 perspective(透视图)和view(视图)的关系:透视图是很多小视图也就是小窗口的一个集合,每一个窗口可以通过在window下的show view里面调出来。


7,单个工程中的javac和java
 有些时候myeclipse中的运行环境是默认的jdk1.5 如果把编译环境改成1.6 编译出来的class文件会报出错误
因为高版本编译出来的文件低版本不能运行

8,在eclipse下怎么查看某个变量的值?
在某个值处先打个断点,然后进入debug透视图,选中变量右键watch观察。、

9,导入已有的工程
首先将需要导入的工程复制到自己的工作区间下,然后在eclipse中选中file下的import,已存在的工程中选中需要导入的那个工程。

10,配置JDK
可以在工程的右键中选中buildpath里面的libraries库中移除已有的 然后增加自己需要的JDK版本。

 

二,java1.5的新特性
1,静态导入
import语句可以导入一个类或某个包中的所有类
import static语句导入一个类中的某个静态方法或所有静态方法
语法举例:
import static java.lang.Math.sin;
import static java.lang.Math.*;
列如:求两个数的最大值和两个数相减的绝对值,可以分别导入这两个静态方法也可以直接导入Math类下的所有静态方法。

//import static java.lang.Math.max;
import static java.lang.Math.*;
public class StaticImport {

	public static void main(String[] args){
		int x=1;
		System.out.println(x);
		//求两个数的最大值
		System.out.println(max(3, 6));
		//求两个数相减的绝对值
		System.out.println(abs(3 - 6));
	}
}


 

注意:如果将javac改成了1.4或更低版本,那么静态导入等jdk1.5的特性都将会报告错误。

2,可变参数
用... args来表示
一个方法接受的参数个数是不固定的,比如:
System.out.println(countScore(2,3,5));
System.out.println(countScore(1,2,3,5)); 
java1.5通过引入可变参数,使得一个方法可以接受的参数是不固定的。
可变参数的特点:
1)只能出现在参数列表的最后;
2)...位于变量类型和变量名之间,前后有无空格都可以;
3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

举例代码:

public static void main(String[] args) {
		
		System.out.println(add(1,2,3,5));
		System.out.println(add(2,3,5));		
	}
	
	public static int add(int x,int ...args) {
		int sum = x;
		for(int i=0;i<args.length;i++) {
			sum += args[i];
		}
		return sum;
	}


3,增强for循环
语法:
 for ( type 变量名:集合变量名 )  { … }
注意事项:
迭代变量必须在( )中定义!
集合变量可以是数组或实现了Iterable接口的集合类
举例:

public static int add(int x,int ...args) {
		int sum = x;
		for(int arg:args) {
			sum += arg;
		}
		return sum;
	}


 

4,基本数据类型的自动拆箱与装箱

自动装箱:自动把一个基本数据类型封装成一个Integer对象赋给iObj这个引用变量
Integer iobj = 12;
自动拆箱:Integer这个对象不支持加法运算 必须转换成基本数据类型才能继续进行加法运算 这就叫拆箱
System.out.println(num1 + 12);

Integer i1=137;
Integer i2=137;//Integer的范围是在-128~127之间
System.out.println(i1==i2);
所以i1和i2的值不相等。

引入一种设计模式:
享元模式:flyweigt
 有很多个小的对象,有很多属性相同,把他们变成一个对象,不同的属性把他们变成方法的一个参数
称之为外部状态。那些相同的属性把它称之为内部状态

三,枚举

1,为什么要有枚举
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让阶段无法实现这一目标。编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发

2,用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
私有的构造方法
每个元素分别用一个公有的静态成员变量表示
可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。

代码演示:

public abstract class  WeekDay1 {
	//私有化对象 不允许其他人创建
	private WeekDay1(){}
	
	public static final WeekDay1 SUN =new WeekDay1(){

		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}
		
	};
	public static final WeekDay1 MON =new WeekDay1(){

		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}
		
	};
	
	public abstract WeekDay1 nextDay();
	
	/*public WeekDay nextDay(){ 
		if(this == SUN){
			return MON;
		}else {
			return SUN;
		}
	}*/
	public String toString(){
		return this ==SUN?"SUN" :"MON";
	}
}


 

3,枚举的基本应用
枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()。 

代码演示:

WeekDay weekDay2 =WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());//获取名字
System.out.println(weekDay2.ordinal());//返回枚举常量的序数
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);//打印WeekDay中的元素个数


 

4,枚举的高级应用
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
带构造方法的枚举
构造方法必须定义成私有的
如果有多个构造方法,该如何选择哪个构造方法?
枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
如果是带有参数的元素则应该选择带有参数的构造方法。

代码演示:

public enum WeekDay{
		SUN(1),MON(),TUE,WED,THI,FRI,SAT;
		private WeekDay(){System.out.println("first");}//必须列于元素列表之后
		private WeekDay(int day){System.out.println("second");}
	}


 

带方法的枚举
定义枚举TrafficLamp
实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
增加上表示时间的构造方法

列如:

//交通灯演示
	public enum TrafficLamp{
		RED(30){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return GREEN;
			}
			
		},GREEN(45){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return YELLOW;
			}
			
		},YELLOW(5){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return RED;
			}
			
		};
		//定义一个抽象的方法
		public abstract TrafficLamp nextLamp();
		private int time;
		private TrafficLamp(int time){this.time=time;}
	}

}


 


 

----------- android培训java培训、java学习型技术博客、期待与您交流! ----------