MyEclipse及Java基礎增強

一、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的語法允許開發人員把一個基本數據類型變量直接賦給對應的包裝類對象?;蛘吒持蹈鳲bject類型的變量,這個過程稱之為自動裝箱。

  自動裝箱與自動拆箱與之相反,即把包裝類對象直接賦值給一個對應的基本數據類型變量。                                      

八、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));
	}
}


來源:itnose

上一篇: Java8并發教程:Threads和Executors

下一篇: Java編程中哪些事情最困擾你?

分享到: 更多
平刷王时时彩计划软件 全天重庆彩计划万位 今天双色球开奖结果 广东11选5计划软件 北京pk10赛车稳赚技巧 pk10模式长期稳赚简单 二八杠棋牌游戏 有个买彩票稳赚的方法 斗牛棋牌游戏 北京pk赛车龙虎技巧论坛 篮球直播 福内蒙古时时开奖结果走势图 二人扑克牌可以玩什么 内蒙古时时五码走势图 打鱼输的倾家荡产 五分彩怎么倍投技巧