學習內容:java
eclipse快捷鍵整理vim
Ctrl+1 快速修復(最經典的快捷鍵,就不用多說了,能夠解決不少問題,好比import類、try catch包圍等)
Ctrl+Shift+F 格式化當前代碼
Ctrl+Shift+M 添加類的import導入
Ctrl+Shift+O 組織類的import導入(既有Ctrl+Shift+M的做用,又能夠幫你去除沒用的導入,頗有用)
Ctrl+Y 重作(與撤銷Ctrl+Z相反)
Alt+/ 內容輔助(幫你省了多少次鍵盤敲打,太經常使用了)
Ctrl+D 刪除當前行或者多行
Alt+↓ 當前行和下面一行交互位置(特別實用,能夠省去先剪切,再粘貼了)
Alt+↑ 當前行和上面一行交互位置(同上)
Ctrl+Alt+↓ 複製當前行到下一行(複製增長)
Ctrl+Alt+↑ 複製當前行到上一行(複製增長)
Shift+Enter 在當前行的下一行插入空行(這時鼠標能夠在當前行的任一位置,不必定是最後)
Ctrl+/ 註釋當前行,再按則取消註釋windows
Alt+Shift+↑ 選擇封裝元素
Alt+Shift+← 選擇上一個元素
Alt+Shift+→ 選擇下一個元素
Shift+← 從光標處開始往左選擇字符
Shift+→ 從光標處開始往右選擇字符
Ctrl+Shift+← 選中光標左邊的單詞
Ctrl+Shift+→ 選中光標又邊的單詞瀏覽器
Ctrl+← 光標移到左邊單詞的開頭,至關於vim的b
Ctrl+→ 光標移到右邊單詞的末尾,至關於vim的eeclipse
Ctrl+K 參照選中的Word快速定位到下一個(若是沒有選中word,則搜索上一次使用搜索的word)
Ctrl+Shift+K 參照選中的Word快速定位到上一個
Ctrl+J 正向增量查找(按下Ctrl+J後,你所輸入的每一個字母編輯器都提供快速匹配定位到某個單詞,若是沒有,則在狀態欄中顯示沒有找到了,查一個單詞時,特別實用,要退出這個模式,按escape建)
Ctrl+Shift+J 反向增量查找(和上條相同,只不過是從後往前查)
Ctrl+Shift+U 列出全部包含字符串的行
Ctrl+H 打開搜索對話框
Ctrl+G 工做區中的聲明
Ctrl+Shift+G 工做區中的引用編輯器
Ctrl+Shift+T 搜索類(包括工程和關聯的第三jar包)
Ctrl+Shift+R 搜索工程中的文件
Ctrl+E 快速顯示當前Editer的下拉列表(若是當前頁面沒有顯示的用黑體表示)
F4 打開類型層次結構
F3 跳轉到聲明處
Alt+← 前一個編輯的頁面
Alt+→ 下一個編輯的頁面(固然是針對上面那條來講了)
Ctrl+PageUp/PageDown 在編輯器中,切換已經打開的文件ide
F5 單步跳入
F6 單步跳過
F7 單步返回
F8 繼續
Ctrl+Shift+D 顯示變量的值
Ctrl+Shift+B 在當前行設置或者去掉斷點
Ctrl+R 運行至行(超好用,能夠節省好多的斷點)函數
(通常重構的快捷鍵都是Alt+Shift開頭的了)
Alt+Shift+R 重命名方法名、屬性或者變量名 (是我本身最愛用的一個了,尤爲是變量和類的Rename,比手工方法能節省不少勞動力)
Alt+Shift+M 把一段函數內的代碼抽取成方法 (這是重構裏面最經常使用的方法之一了,尤爲是對一大堆泥團代碼有用)
Alt+Shift+C 修改函數結構(比較實用,有N個函數調用了這個方法,修改一次搞定)
Alt+Shift+L 抽取本地變量( 能夠直接把一些魔法數字和字符串抽取成一個變量,尤爲是多處調用的時候)
Alt+Shift+F 把Class中的local變量變爲field變量 (比較實用的功能)
Alt+Shift+I 合併變量(可能這樣說有點不妥Inline)
Alt+Shift+V 移動函數和變量(不怎麼經常使用)
Alt+Shift+Z 重構的後悔藥(Undo)工具
Alt+Enter 顯示當前選擇資源的屬性,windows下的查看文件的屬性就是這個快捷鍵,一般用來查看文件在windows中的實際路徑
Ctrl+↑ 文本編輯器 上滾行
Ctrl+↓ 文本編輯器 下滾行
Ctrl+M 最大化當前的Edit或View (再按則反之)
Ctrl+O 快速顯示 OutLine(不開Outline窗口的同窗,這個快捷鍵是必不可少的)
Ctrl+T 快速顯示當前類的繼承結構
Ctrl+W 關閉當前Editer(windows下關閉打開的對話框也是這個,還有qq、旺旺、瀏覽器等都是)
Ctrl+L 文本編輯器 轉至行
F2 顯示工具提示描述性能
基本類型及其包裝類能夠相互自動裝箱拆箱
---------------------------------------------------------------
做業1:生產者與消費者
import java.util.List; public class Bee extends Thread { private String name; private List<Integer> list; private final int MAX_SIZE = 30; public Bee(String name, List<Integer> list) { super(); this.name = name; this.list = list; } @Override public void run() { while (true) { synchronized (list) { try { if (list.size() > MAX_SIZE) { list.wait(); } if (list.size() <= 10) { list.add(1); Thread.sleep(1000); System.out.println(name+"生產了1斤蜂蜜,共"+list.size()+"斤"); list.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } yield(); } } }
import java.util.List; public class Bear extends Thread { private String name; private List<Integer> list; public Bear(String name, List<Integer> list) { super(); this.name = name; this.list = list; } @Override public void run() { while (true) { synchronized (list) { try { if (list.size() < 10) { list.wait(); } else { Thread.sleep(10000); for (int i = 0; i < 10; i++) { list.remove(0); } System.out.println(name + "消費了10斤,剩餘" + list.size() + "斤"); list.notify(); } } catch (Exception e) { } } yield(); } } }
public class ThreadDemo { public static void main(String[] args) { List<Integer> list=new ArrayList<>(); new Bear("X1", list).start(); new Bee("1", list).start(); new Bee("2", list).start(); new Bee("3", list).start(); new Bee("4", list).start(); new Bee("5", list).start(); new Bee("6", list).start(); new Bee("7", list).start(); new Bee("8", list).start(); new Bee("9", list).start(); new Bee("10", list).start(); new Bear("X2", list).start(); } }
做業2:取字符串最大子串
public class StringDemo { public static void main(String[] args) { String s1="efgh"; String s2="bdsdcaaa"; System.out.println(getMaxSub(s1, s2)); } public static String getMaxSub(String s1, String s2) { if (s1 == null || s2 == null) { return null; } if (s1.length() == 0 || s2.length() == 0) { return ""; } if (s1.length() >= s2.length()) { s1 = (s1 + s2).replaceAll("^" + s1, ""); s2 = (s1 + s2).replaceAll(s2 + "$", ""); } String sub = null; for (int i = 0; i < s1.length(); i++) { sub = s1.substring(i); if (s2.contains(sub)) { return sub; } } return null; } }
做業3:單線程中使用StringBuffer和StringBuilder性能是同樣的