首页 > 编程语言 > 详细

MyEclipse及Java基础增强

时间:2017-03-10 22:33:56      阅读:215      评论:0      收藏:0      [点我收藏+]

一、MyEclipse的简介和使用

  MyEclipse是Eclipse的插件,并且是收费的。

  安装MyEclipse前需要安装JDK,配置环境变量。

  安装成功后,启动MyEclipse,选择工作空间,工作空间的名称不能出现中文或空格,设置工作空间的编码为UTF-8

  新建javaweb项目,项目不要是中文

  命名规范:

    包名:包名都是小写。

    类名:首字母大写,第二个单词的首字母也大写。

    方法名:首字母小写,第二个单词的首字母要大写。

  编码类和代码,运行。

 运行的两种模式:

    Run as:运行模式

    Debug as:调试模式


二、MyEclipse的调试模式

  程序的调试模式:断点调试模式

    跟踪程序的运行状态。

    方便查看程序的源代码。

    断点调试:

      F5跳入 F6跳过 F7跳出

      Resume(F8跳到下一个断点,如果没有,程序执行完成)

      Drop to frame:回到方法的最顶端。

    移除所有断点,选择Debug模式,第二项,移除所有断点。


三、MyEclipse的常用快捷键

  内容提示:alt+/

  快速修复:ctrl+1

  导包:ctrl+shift+o

  格式化代码块:ctrl+shift+f

  向前向后:alt+方向键

  添加注释:ctrl+/  ctrt+shift+/

  去除注释:ctrl+/ ctrl+shift+\


四、JDK 5.0新特性

  JDK5中新增了很多新的Java特性,利用这些新语法可以帮助开发人员编写出更加高效、清晰,安全的代码。

  泛型

  枚举

  静态导入

  自动装箱/拆箱

  for/in语句

  可变参数

  注解、字符串格式化、Java5线程并发库


五、JDK5.0新特性之--泛型的作用

  泛型的应用在集合上。

  泛型应用在一些通用性较高的代码上。


JDK5.0之前,对象保存到集合中就会失去其特性,取出的时候通常需要程序员手工进行类型的强制转换,这样不可避免就会引起程序的一些安全问题。例如:

package cn.test;

import java.util.ArrayList;
import java.util.List;

public class Test {
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("abc");
		Integer num = (Integer) list.get(0);//运行的时候会出错,但编译的时候不会报错
	}

}

  JDK5中的泛型运行程序员使用泛型技术限制集合的处理类型:

package cn.test;

import java.util.ArrayList;
import java.util.List;

public class Test {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		
	}

}

  【注意】:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛型的Java程序后,生成的class文件中将不再带有泛型的信息,这样可以使得程序的运行效率不受到影响,这个过程称为“擦除”。

  泛型的基本术语,以ArrayList<E>为例:<>称为typeof

    ArrayList<E>中的E称为类型参数变量。

    ArrayList<Integer>中的Integer称为实际类型参数。

    这个ArrayList<Integer>称为参数化类型ParamterizedType。


自定义泛型--泛型方法

   Java程序中的普通方法、构造方法和静态方法中都可以使用泛型。方法使用泛型前,必须对泛型进行声明,语法:<T>,T可以是任意字母,但通常必须大写。<T>通常放在方法的返回值声明之前。例如:

public static <T> void doXX(T t)

  注意:

    方法的逻辑只和类型有关,这类方法可以定义成泛型方法。

    只有对象类型才能作为泛型方法的实际参数,也就是说基本类型是不可以的。

    在泛型中可以同时有多个类型,例如:

public static <K,V> getValue(K key){
    return map.get(key);
}

 

自定义泛型--泛型类

  如果一个类多出都要使用同一个泛型,这个时候可以把泛型定义在类上面,语法的格式如下:

public class GenericDAO<T>{
    private T field;
}


六、jdk5新特性之--枚举

枚举的演变过程--以用户、角色为例

package cn.test;

import org.junit.Test;

public class User {
	private int id;
	private String name;
	private int role1;//0表示boss 1表示hr 2表示worker
	
	@Test
	public void run(){
		User user = new User();
		user.id = 1;
		user.name = "哈哈";
		user.role1 = 0;
	}

}

这样用0 1 2这样的标记量来表示角色可读性是非常差的,如果以前写项目的程序员走了,而且没写注释,那后面接手这项目的程序员就苦逼了。


怎么办?随着时间的发展,有人讲boss,hr,worker封装到角色类中,然后用静态常量表示

package cn.test;

import org.junit.Test;

public class User {
	private int id;
	private String name;
	private int role1;
	
	@Test
	public void run(){
		User user = new User();
		user.id = 1;
		user.name = "哈哈";
		user.role1 = Role1.BOSS;
	}

}
class Role1 {
	public static final int BOSS = 0;
	public static final int HR = 1;
	public static final int WORKER = 2;
}

这样的可读性是可以,但是user.role1可以赋值3 4 5等等,依然不行。这样说明用数字这种标记量来标记角色等是不好的,那怎么办,用对象来标记各种角色。

package cn.test;

import org.junit.Test;

public class User {
	private int id;
	private String name;
	private Role1 role1;
	
	@Test
	public void run(){
		User user = new User();
		user.id = 1;
		user.name = "哈哈";
		user.role1 = Role1.BOSS;
	}

}
class Role1 {
	public static final Role1 BOSS = new Role1();
	public static final Role1 HR = new Role1();
	public static final Role1 WORKDER = new Role1();
}

但是呢,这样方式虽然解决了可读性,但是我可以对角色赋值任意对象。

package cn.test;

import org.junit.Test;

public class User {
	private int id;
	private String name;
	private Role1 role1;
	
	@Test
	public void run(){
		User user = new User();
		user.id = 1;
		user.name = "哈哈";
		user.role1 = new Role1();//可读性比较好,但是可以传入任意对象
	}

}
class Role1 {
	public static final Role1 BOSS = new Role1();
	public static final Role1 HR = new Role1();
	public static final Role1 WORKDER = new Role1();
}

那么,我就限制一下,不能让用户自己实例化角色对象,不就可以了吗?即构造方法私有化。

package cn.test;

import org.junit.Test;

public class User {
	private int id;
	private String name;
	private Role1 role1;
	
	@Test
	public void run(){
		User user = new User();
		user.id = 1;
		user.name = "哈哈";
		user.role1 = Role1.BOSS;//可读性比较好,但是可以传入任意对象
	}

}
class Role1 {
	public static final Role1 BOSS = new Role1();
	public static final Role1 HR = new Role1();
	public static final Role1 WORKDER = new Role1();
	
	private Role1(){
		
	}
}

虽然上面的方式已经可以解决可读性,又限制不让用户自己实例化对象,但是这样书写实在是太烦了,所以Java就提供了枚举,这样大大简化了我们代码的书写。

package cn.test;

import org.junit.Test;

public class User {
	private int id;
	private String name;
	private Role2 role2;
	
	@Test
	public void run(){
		User user = new User();
		user.id = 1;
		user.name = "哈哈";
		user.role2 = Role2.BOSS;
	}

}
enum Role2{
	BOSS,HR,WORKER;
}

这就是枚举的由来。


所以,枚举,就是一些方法在运行的时候,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5之前采用自定义带有枚举功能的类来解决问题,JDK5之后可以直接使用枚举来解决问题。


jdk5新增了enum关键字用来定义一个枚举类。

enum  枚举类型名称{
    枚举对象1名称,
    枚举对象2名称,
    ......,
    枚举对象n名称;
}


枚举类特性:

  枚举类也是一种特殊形式的Java类。

  枚举类中声明的每一个枚举值代表枚举了的一个实例对象。

  与Java中的普通类一样,在声明枚举类的时候,也可以声明属性、方法和构造方法,但枚举类的构造方法必须为私有的

  枚举类也可以实现接口或继承抽象类。

  JDK5中扩展了switch语句,它除了可以接受int、byte、short、char外,还可以接受一个枚举类型。

  若枚举类只有一个枚举值,则可以当做单利设计模式使用啦。


枚举类案例

不带参数的枚举类型

enum Color{
	RED,GREEN,BLUE;
}

带参数构造方法的枚举类型

enum Color{
	RED("红"),GREEN("绿"),BLUE("蓝");
	private String name;
	private Color(String name){
		this.name = name;
	}
	
}

带有方法的枚举类型

enum Color{
	RED("红"),GREEN("绿"),BLUE("蓝");
	private String name;
	private Color(String name){
		this.name = name;
	}
	public  String getName(){
		return this.name;
	}
	
}

带有抽象方法的枚举类型

enum Color{
	RED("红") {
		@Override
		public void show() {
			System.out.println("这是红色");
			
		}
	},GREEN("绿") {
		@Override
		public void show() {
			System.out.println("这是绿色");
			
		}
	},BLUE("蓝") {
		@Override
		public void show() {
			System.out.println("这是蓝色");
			
		}
	};
	private String name;
	private Color(String name){
		this.name = name;
	}
	public  String getName(){
		return this.name;
	}
	public abstract void show();
}

 java中声明的枚举类,均是java.lang.Enum类的子类,它继承了Enum类的所有方法。

    常用方法:

  • 返回此枚举常量的名称

public final String name()
  • 返回此枚举常量的顺序

返回此枚举常量的顺序
  • 返回指定枚举类型具有指定名称的枚举常数

public static <T extends Enum<T>> T valueOf(Class<T> enumType,String name)

自定义的枚举类,在编译阶段会自动生成下面的方法

  •   转换枚举对象

public T valueOf(String name)转换枚举对象
  • 获得所有的枚举对象数组

public T values()
package cn.test;
enum Color{
	RED,GREEN,BLUE;
}
public class Test {
	public static void main(String[] args) {
		Color[] colors = Color.values();
		for (Color color : colors) {
			System.out.println(""+color.name());
			System.out.println(""+color.ordinal());
		}
	}
}


六、JDK5新特性之一静态导入(没什么卵用)

  JDK5.0增加的静态导入语法用于导入类的某个静态属性或方法。

  使用静态导入可以简化程序对类静态属性和方法的调用。

  语法:

import static 包名.类名.静态属性[静态方法];

  例如:

import static java.lang.System.out;
import static java.util.Arrays.sort;
import static java.lang.Math.*;


七、JDK5新特性之一自动装箱/自动拆箱

  JDK5.0的语法允许开发人员把一个基本数据类型变量直接赋给对应的包装类对象。或者赋值给Object类型的变量,这个过程称之为自动装箱。

  自动装箱与自动拆箱与之相反,即把包装类对象直接赋值给一个对应的基本数据类型变量。                                      

八、JDK5新特性之一foreach语句

  引入增强for循环的原因:抛弃Iterator。

  foreach语句的适用范围:

    遍历数组。

    遍历实现Iterator接口的集合类。

  语法格式:

for(变量类型 变量:需迭代的数组或集合){
}


九、JDK5新特性之一可变参数

  从JDK5开始,Java允许为方法定义长度可变的参数

public void foo(int...args){}

  注意事项:

    调用可变参数的方法时,编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法体重以数组的形式访问可变参数。

    可变参数只能处于参数列表的最后,所以一个方法最多只能有一个长度可变的参数。

    只能定义在方法中,不能用来定义变量。

package cn.test;
class H{
	public static  int add(int...a){
		int sum = 0;
		for (int i : a) {
			sum += i ;
		}
		return sum;
	}
}
public class Test {
	public static void main(String[] args) {
		System.out.println(H.add(2,3,4,4));
	}
}




本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1905300

MyEclipse及Java基础增强

原文:http://11841428.blog.51cto.com/11831428/1905300

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!