java反編譯switch還原
㈠ 應該怎樣學習java順序是什麼
不知道Java 學習順序的話,我提供你一條學習線路圖!
按照視頻學習的過程中,學習方法也是很重要的!一定要記得勤記筆記,整理程思維導圖,方便後續復習方便。
第一部分:JavaSE:Java語言最基本的一套庫
學習JavaEE或JavaME之前,JavaSE是必學的。
* Java開發環境搭建
* Java基礎語法
* 面向對象
* 數組
* 異常
* 集合
* 線程
* IO流
* 反射機制
* 註解Annotation
* 網路編程
* 只要學習編程,資料庫是一定要學習的,是一門公共的學科。
* java、C、python、C#等程序員都需要學習資料庫。
* 資料庫產品很多: MySQL、Oracle、SqlServer、DB2......
* 我們動力節點資料庫課程包括:MySQL + Oracle
* Oracle:銀行、政府使用oracle的較多。
* MySQL:互聯網公司、一般企業使用MySQL較多。
* Oracle我們是提供視頻的。課堂上不講。
* 我們課堂上講MySQL。
* Java語言鏈接資料庫:JDBC
第三部分:WEB前端
* 系統結構:B/S【Browser/Server】 C/S【Client/Server】
* WEB是網站的意思。WEB前端是:網站當中的頁面。
* WEB前端程序是運行在瀏覽器當中的。
* HTML5 + CSS3 + JavaScript(JS)
* WEB前端也有很多框架:
- jQuery
- Bootstrap
- Vue
- NodeJS
- AugularJS
- RectJS
- LayUI
- EasyUI
.....
第四部分:JavaWEB
* Servlet
* JSP
* AJAX(是JavaScript的一部分語法,專門做頁面局部刷新)
第五部分:JavaWEB項目
* 做一個B/S結構的項目,將WEB前端和JavaWEB內容做一個整合練習。
* 其實到這里為止,所有的系統都可以做了。但是用的技術很Low。沒有用框架。
㈡ java的一個簡單記事本程序設計
是記事本的樣式嗎?就要這些要求嗎?
下面這些代碼的功能挺全的,可以參考一下,不用的可以刪掉。
import java.io.*;
import java.util.Calendar;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class NoteBook extends JFrame implements ActionListener,ItemListener,WindowListener,MouseListener
{ Container c = this.getContentPane();
JMenuBar jmb = new JMenuBar();
JColorChooser jcl = new JColorChooser();
JToolBar jToolBar = new JToolBar();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();
JButton jButton4 = new JButton();
JMenu jm1 = new JMenu("文件(F)");
JMenu jm2 = new JMenu("編輯(E)");
JMenu jm4 = new JMenu("格式(O)");
JMenu jm5 = new JMenu("查看(V)");
JMenu jm3 = new JMenu("幫助(H)");
JMenuItem jmi1 = new JMenuItem("新建(N)");
JMenuItem jmi2 = new JMenuItem("打開(O)");
JMenuItem jmi3 = new JMenuItem("保存(S)");
JMenuItem jmi4 = new JMenuItem("退出(X)");
JMenu jmd4=new JMenu("顏色");
JMenu jmd0=new JMenu("字體");
JMenuItem aa=new JMenuItem("復制(C)");
JMenuItem bb=new JMenuItem("剪切(X)");
JMenuItem cc=new JMenuItem("粘貼(V)");
JCheckBoxMenuItem jcuti1 = new JCheckBoxMenuItem("粗體");
JCheckBoxMenuItem jxieti1 = new JCheckBoxMenuItem("斜體");
JMenuItem jmp1 = new JMenuItem("日期和時間");
JMenuItem jmp2 = new JMenuItem("背景顏色(H)");
JMenuItem jmi5 = new JMenuItem("刪除內容(S)");
JMenuItem jmi7=new JMenuItem("關於自己");
JTextArea jta = new JTextArea(23,15);
JScrollPane jsp = new JScrollPane(jta);
JMenuItem jmdb1=new JMenuItem("黃色");//定義各種顏色
JMenuItem jmdb2=new JMenuItem("紅色");
JMenuItem jmdb3=new JMenuItem("綠色");
JMenuItem jmdb4=new JMenuItem("藍色");
JMenuItem jmdb5=new JMenuItem("黑色");
NoteBook()
{ this.addWindowListener(this);
setBounds(200,200,200,200);
c.add(jmb,BorderLayout.NORTH);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setTitle("記事本");
jmb.add(jm1);//文件
jm1.setMnemonic('f');
jm1.addActionListener(this);
jmb.add(jm2);//編輯
jm2.setMnemonic('e');
jmb.add(jm4);//格式
jm4.setMnemonic('o');
jm4.addActionListener(this);
jmb.add(jm5);
jm5.setMnemonic('v'); //查看
jmb.add(jm3);//幫助
jm3.setMnemonic('h');
jmb.setLocation(0,0);
jm1.add(jmi1);
jmi1.addActionListener(this);//新建
jmi1.setAccelerator(KeyStroke.getKeyStroke('N',Event.CTRL_MASK,false));
jm1.addSeparator();
jm1.add(jmi2);
jmi2.setAccelerator(KeyStroke.getKeyStroke('O',Event.CTRL_MASK,false));
jmi2.addActionListener(this);//打開
jm1.addSeparator();
jm1.add(jmi3);
jmi3.setAccelerator(KeyStroke.getKeyStroke('S',Event.CTRL_MASK,false));
jmi3.addActionListener(this);//保存
jm1.addSeparator();
jm1.add(jmi4);
jmi1.setMnemonic('n');
jmi2.setMnemonic('o');
jmi3.setMnemonic('s');
jmi4.setMnemonic('x');
jmi4.addActionListener(this);//退出
jm5.add(jmi5); //刪除
jm5.addSeparator();
jmi5.addActionListener(this);
jm4.addSeparator();
jm4.add(jmd4);
jm4.add(jmd0);
jmd4.add(jmdb1);
jmd4.add(jmdb2);
jmd4.add(jmdb3);
jmd4.add(jmdb4);
jmd4.add(jmdb5);
jmd4.addActionListener(this); //添加監視器
jmdb1.addActionListener(this);
jmdb2.addActionListener(this);
jmdb3.addActionListener(this);
jmdb4.addActionListener(this);
jmdb5.addActionListener(this);
jm5.add(jmp1);
jm5.addSeparator();
jm5.add(jmp2);
jmp1.addActionListener(this);//日期時間
jmp2.addActionListener(this);//背景顏色
jm2.add(aa);
jm2.addSeparator();
jm2.add(bb);
jm2.addSeparator();
jm2.add(cc);
jm2.addSeparator();
jmd0.add(jcuti1);
jmd0.addSeparator();
jmd0.add(jxieti1);
aa.setMnemonic('C');
aa.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
bb.setMnemonic('x');
bb.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
cc.setMnemonic('V');
cc.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
aa.addActionListener(this);//復制
bb.addActionListener(this);//剪切
cc.addActionListener(this);//粘貼
jmd4.addActionListener(this);
jcuti1.addItemListener(this);//粗體
jxieti1.addItemListener(this);//斜體
jm3.add(jmi7);
jmi7.addActionListener(this);//關於自己
c.add(jToolBar,BorderLayout.CENTER); //工具條
jButton2.setIcon(new ImageIcon("image\\new.JPG"));//新建
jToolBar.add(jButton2);
jButton2.setToolTipText("新建");
jButton2.addActionListener(this);
jButton1.setIcon(new ImageIcon("image\\open.JPG"));//打開
jButton1.setToolTipText("打開");
jToolBar.add(jButton1);
jButton1.addActionListener(this);
jButton3.setIcon(new ImageIcon("image\\save.JPG"));//保存
jToolBar.add(jButton3);
jButton3.setToolTipText("保存");
jButton3.addActionListener(this);
jButton4.setIcon(new ImageIcon("image\\qq.JPG"));
jButton4.addActionListener(this); //退出
jToolBar.add(jButton4);
jButton4.setToolTipText("退出");
c.add(jsp,BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(500,500);
this.setVisible(true);
jmdb1.addActionListener(new ActionListener() //黃色
{ public void actionPerformed(ActionEvent e)
{ jta.setForeground(Color.yellow);
} } );
jmdb2.addActionListener(new ActionListener() //紅色
{ public void actionPerformed(ActionEvent e)
{ jta.setForeground(Color.red);
} } );
jmdb3.addActionListener(new ActionListener() //綠色
{ public void actionPerformed(ActionEvent e)
{ jta.setForeground(Color.green);
} } );
jmdb4.addActionListener(new ActionListener() //藍色
{
public void actionPerformed(ActionEvent e)
{
jta.setForeground(Color.blue);
} } );
jmdb5.addActionListener(new ActionListener() //黑色
{
public void actionPerformed(ActionEvent e)
{
jta.setForeground(Color.black);
} } );
}
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==jmi1)//新建
{jta.setText("");
this.setTitle("無標題 - 記事本");
}
if(e.getSource()==jmi2)//打開
{File f1;
JFileChooser jfc1 = new JFileChooser();
int num1 = jfc1.showOpenDialog(this);
if(num1==JFileChooser.APPROVE_OPTION)
{ try {
f1 = jfc1.getSelectedFile();
this.setTitle(f1.getName());
FileReader fr = new FileReader(f1);
BufferedReader br = new BufferedReader(fr);
String str;
while((str = br.readLine())!=null)
{jta.setText(str);}
fr.close();
br.close(); }
catch(FileNotFoundException e1)
{e1.printStackTrace();}
catch(IOException e2){e2.printStackTrace();}
}}
if(e.getSource()==jmi3)//保存
{File f2 = null;
JFileChooser jfc2 = new JFileChooser();
int num2 = jfc2.showSaveDialog(this);
if(num2==JFileChooser.APPROVE_OPTION){
f2=jfc2.getSelectedFile();
this.setTitle(f2.getName());
try{
FileWriter fw = new FileWriter(f2);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(jta.getText());
bw.close();
fw.close();
}catch(IOException e2){
e2.printStackTrace();
}}}
if(e.getSource()==jmi4)//退出
{
int a = JOptionPane.showConfirmDialog(this,"文件已被改變,是否要保存?","提示",JOptionPane.YES_NO_CANCEL_OPTION);
if(a==1){
this.dispose();
}else if(a==0){
File f2 = null;
JFileChooser jfc2 = new JFileChooser();
int num2 = jfc2.showSaveDialog(this);
if(num2==JFileChooser.APPROVE_OPTION){
f2=jfc2.getSelectedFile();
this.setTitle(f2.getName());
try{
FileWriter fw = new FileWriter(f2);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(jta.getText());
bw.close();
fw.close();
}catch(IOException e2){
e2.printStackTrace();
}
this.dispose();
}}}
if(e.getSource()==jmp1)//日期時間
{
Calendar c1 =Calendar.getInstance();
int y = c1.get(Calendar.YEAR);
int m = c1.get(Calendar.MONTH);
int d = c1.get(Calendar.DATE);
int h = c1.get(Calendar.HOUR);
int m1 = c1.get(Calendar.MINUTE);
int m2 = m+1;
jta.setText(y+"年"+m2+"月"+d+"日"+h+":"+m1);
}
if(e.getSource()==jmp2)//背景色
{ Color ccc = JColorChooser.showDialog(this,"color",Color.BLACK);
jta.setSelectedTextColor(ccc);
jta.setBackground(ccc);
}
if(e.getSource()==jButton1)//打開
{File f1;
JFileChooser jfc1 = new JFileChooser();
int num1 = jfc1.showOpenDialog(this);
if(num1==JFileChooser.APPROVE_OPTION)
{
try
{
f1 = jfc1.getSelectedFile();
this.setTitle(f1.getName());
FileReader fr = new FileReader(f1);
BufferedReader br = new BufferedReader(fr);
String str;
while((str = br.readLine())!=null)
{jta.setText(str);}
fr.close();
br.close(); }
catch(FileNotFoundException e1)
{e1.printStackTrace();}
catch(IOException e2){e2.printStackTrace();}
} }
if(e.getSource()==jButton2)
{jta.setText("");
this.setTitle("文本編輯器");
}
if(e.getSource()==jmi5){
jta.replaceRange("",jta.getSelectionStart(),jta.getSelectionEnd()); //刪除
}
if(e.getSource()==jButton3)
{File f2 = null;
JFileChooser jfc2 = new JFileChooser();
int num2 = jfc2.showSaveDialog(this);
if(num2==JFileChooser.APPROVE_OPTION){
f2=jfc2.getSelectedFile();
this.setTitle(f2.getName());
try{
FileWriter fw = new FileWriter(f2);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(jta.getText());
bw.close();
fw.close();
}catch(IOException e2){
e2.printStackTrace();
}}}
if(e.getSource()==aa) //復制
{jta.();}
else if(e.getSource()==bb)//剪切
{ jta.cut(); }
else if(e.getSource()==cc)//粘貼
{jta.paste();}
if(e.getSource()==jButton4)
{int a = JOptionPane.showConfirmDialog(this,"文件已被改變,是否要保存?","提示",JOptionPane.YES_NO_CANCEL_OPTION);
if(a==1){
this.dispose();
}else if(a==0){
File f2 = null;
JFileChooser jfc2 = new JFileChooser();
int num2 = jfc2.showSaveDialog(this);
if(num2==JFileChooser.APPROVE_OPTION){
f2=jfc2.getSelectedFile();
this.setTitle(f2.getName());
try{
FileWriter fw = new FileWriter(f2);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(jta.getText());
bw.close();
fw.close();
}catch(IOException e2){
e2.printStackTrace();
}
this.dispose();
}}}
//if(e.getSource()==jmi7)//關於我
//{About1 a=new About1();//實現跳轉
// a.setVisible(true);
//}
}
public void itemStateChanged(ItemEvent e) //字體
{Font c=new Font("Serif",Font.PLAIN,14);
if(e.getItemSelectable()==jcuti1)
{if(jcuti1.getState()==true)
{ Font f=new Font("Serif",Font.BOLD,20); //粗體
jta.setFont(f);}
else{jta.setFont(c);}
}
else if(e.getItemSelectable()==jxieti1)
{if(jxieti1.getState()==true)
{ Font b=new Font("Serif",Font.ITALIC,20);//斜體
jta.setFont(b);}
else{jta.setFont(c);
} } }
public static void main(String[] args)//入口
{ new NoteBook(); }
public void windowOpened(WindowEvent arg0) {}
public void windowClosing(WindowEvent arg0) {
int a = JOptionPane.showConfirmDialog(this,"文件已被改變,是否要保存?","提示",JOptionPane.YES_NO_CANCEL_OPTION);
if(a==1){
this.dispose();
}else if(a==0){
File f2 = null;
JFileChooser jfc2 = new JFileChooser();
int num2 = jfc2.showSaveDialog(this);
if(num2==JFileChooser.APPROVE_OPTION){
f2=jfc2.getSelectedFile();
this.setTitle(f2.getName());
try{
FileWriter fw = new FileWriter(f2);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(jta.getText());
bw.close();
fw.close();
}catch(IOException e2){
e2.printStackTrace();
}
}
if(a==2){}
}
}
public void windowClosed(WindowEvent arg0) {}
public void windowIconified(WindowEvent arg0) {}
public void windowDeiconified(WindowEvent arg0) {}
public void windowActivated(WindowEvent arg0) {}
public void windowDeactivated(WindowEvent arg0) {}
public void mouseClicked(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {}
public void mouseReleased(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
}
㈢ eclipse 怎麼看xmlbuddy安裝
這里只介紹XMLBuddy,它主要提供是有關DTD方面的驗證、代碼助手等功能;還有一種是XMLBuddy
Pro,它相對於XMLBuddy來說,擴展了許多功能,比如對Schema、XSLT、RELAXNG
的支持,但它需要Money。對於XML的一般編寫,XMLBuddy已經夠用了,而且它是免費的,很容易得到,所以這里就著重談談它了。
一、下載與安裝
1.下載
XMLBuddy的主頁地址是:http://www.xmlbuddy.com/
下載要注意是XMLBuddy,不是XMLBuddyPro。這里給出一個下載地址,是XMLBuddy2.0.38版本的:
http://xmlbuddy.com/2.0/78945789020508924908525/8902390238490587584751/xmlbuddy_2.0.38.zip
http://dl.download.csdn.net/down6/20081206/.zip?response-content-disposition=attachment%3Bfilename%2A%3D%22utf8%27%27com.objfac.xmlbuddy-V2.0.9.zip%22&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1469007502&Signature=JKgXBc%2B26iq1KGztUDYOYWwMaIE%3D
注意:這個版本匹配的是eclipse3.0.1-3.1M5。
為了講解方便,我使用的eclipse的版本是3.0.1,並且安裝了中文語言包,沒有安裝其它插件。如圖:
2.安裝
安裝XMLBuddy2.0.38,先解壓這個下載的文件,然後將com.objfac.xmleditor_2.0.38這個目錄復制到eclipse安裝目錄下的plugins目錄中即可;或者採用links方式安裝也可以。
再次啟動eclipse,應該可以發現XMLBuddy已經安裝了。
3.定製
如果要定製XMLBuddy,可以通過窗口->首選項->XMLBuddy來修改:
Eclipse的插件大全
以下是我整理的自己開發過程中的常用Eclipse插件,按字母排序:
(1)AmaterasUML
介紹:Eclipse的UML插件,支持UML活動圖,class圖,sequence圖,usecase圖等;支持與Javaclass/interface之間的相互導入導出。
官方網站:http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=AmaterasUML
插件下載URL:http://sourceforge.jp/projects/amateras/downloads/56447/AmaterasUML_1.3.4.zip/(目前最新版本)
註:安裝時需要GEF插件的支持。
(2)BravoJSP
介紹:BravoJSP編輯器是一款WYSIWYG(所見即所得的)JSP/html頁面編輯器。Code
Editor(代碼編輯器)與EclipseWeb
Tools的JSP編輯器相同,所以支持代碼建議,代碼模板和其它相同的功能。可視化部分:支持CSS樣式、圖片、JSP表達式/標簽庫/標簽文件、外部included的文件。改變HTML/CSS/JSP代碼可以立即看到效果。提供DOM查找/替換對話框。JSTL的變數查看功能。
官方網站:http://bravo.comxa.com/index.php
Eclipse在線安裝URL:http://bravo.comxa.com/update
(3)Checkstyle
介紹:CheckStyle是SourceForge下的一個項目,提供了一個幫助JAVA開發人員遵守某些編碼規范的工具。它能夠自動化代碼規范檢查過程,從而使得開發人員從這項重要,但是枯燥的任務中解脫出來。CheckStyle檢驗的主要內容有:Javadoc注釋、命名約定、標題、import語句、體積大小、空白、修飾符、塊、代碼問題、類設計以及混合檢查(包括一些有用的比如非必須的System.out和printstackTrace)等。
官方網站:http://checkstyle.sourceforge.net/
Eclipse在線安裝URL:http://eclipse-cs.sourceforge.net/update/
(4)EasyExplorer
介紹:如果你經常需要在Eclipse里打開相關資源文件所在的文件夾,比較麻煩,要右鍵,屬性,在Location一欄中把所在的文件夾拷貝一下,然後再去資源管理器里輸入這個路徑,回車,然後打開它,比較麻煩。Easy
Explorer是一個Eclipse的小插件,它能直接打開選中文件所在的目錄,很方便好用.
官方網站:http://sourceforge.net/projects/easystruts/
(5)EasySQL
介紹:EasySQL:EclipseSQL插件。包含SQL編輯器和執行器,表格編輯器,數據導出工具。EasySQL設計成易於與其它插件相集成。如果在你的項目中需要資料庫
操作功能,可以考慮該插件。
官方網站:http://easysql.sourceforge.net/
插件下載URL:http://sourceforge.net/projects/easysql/files/latest/download?source=files
(6)EclEmma
介紹:提到EclEmma首先就要說到著名的Java覆蓋測試工具
Emma。從某種程度上說,EclEmma可以看作是Emma的一個圖形界面。EclEmma的出現彌補了Emma用戶一個大的遺憾----
缺乏圖形界面以及對集成開發環境的支持。將Eclipse和Emma這兩個在各自領域最為優秀的工具結合起來,這就是EclEmma
為我們提供的。
官方網站:http://www.eclemma.org/
Eclipse在線安裝URL:http://update.eclemma.org/
(7)EclipseSWTDesignerPlugin
介紹:EclipseSWTDesignerPlugin是一個用於快速構建J2SE的桌面化GUI開發的Eclipse插件。
官方網站:http://sourceforge.net/projects/eclipsedesigner/
插件下載URL:http://sourceforge.net/projects/eclipsedesigner/files/latest/download
(8)FindBugs
介紹:Findbugs是一個靜態分析工具,它檢查類或者JAR
文件,將位元組碼與一組缺陷模式進行對比以發現可能的問題。了靜態分析工具,就可以在不實際運行程序的情況對軟體進行分析。它可以幫助改進代碼的質量。它是尋找代碼缺陷的,很多我們寫的不好的地方,可以優化的地方,它都能檢查出來。例如:未關閉的資料庫連接,缺少必要的null
check,多餘的null
check,多餘的if後置條件,相同的條件分支,重復的代碼塊,錯誤的使用了"==",不同數據類型的比較,建議使用StringBuffer代替字元串連加等等。
官方網站:http://findbugs.sourceforge.net/
Eclipse在線安裝URL:http://findbugs.cs.umd.e/eclipse
(9)FreeMarkerIDE
介紹:FreeMarker
IDE是一個FreeMarker(模板引擎)感知編輯器,支持:語法高亮顯示(SyntaxHilighting)、內容輔助(Content
Assist)、大綱視圖(Outline
View)。其主頁上提供了如何使用該插件進行開發的Flash視頻。FreeMarker還有另外一個插件FreeMarkerEclipse
Plugin。
官方網站:http://freemarker-ide.sourceforge.net/
插件下載URL:http://sourceforge.net/projects/freemarker-ide/files/
(10)Spket
介紹:SpketIDE是功能強大的JavaScript
和XML開發工具包。這個強大的編輯器可以進行JavaScript、XUL/XBL以及Yahoo!
Widget開發。其中JavaScript編輯器具有代碼完成(code
completion)、語法標記以及內容概覽等功能,協助開發人員創建高效的JavaScript代碼。
官方網站:http://www.spket.com
Eclipse在線安裝URL:http://www.agpad.com/update
(11)JadClipse
介紹:JadClipse是一個Eclipse插件,無縫地集成了Jad(快速Java反編譯器)與Eclipse。通常,當打開一個類文件,類文件查看器將顯示一個簡短的API類的輪廓。如果你安裝這個插件,JadClipse類文件查看器將替換類文件查看器並顯示了類的反編譯源代碼。這個任務可以通過在後台使用Jad反編譯相應的類文件來完成。可以支持正常的Java語法高亮以及大綱視圖。
官方網站:http://sourceforge.net/projects/jadclipse/
Eclipse在線安裝URL:http://feeling.sourceforge.net/update
(12)JavascriptDebugToolkit
介紹:JSDT(JavascriptDebug
Toolkit)是一個用於javascript調試的Eclipse
插件,用於調試javascript。JSDT可以跨瀏覽器調試,支持在IE,Firefox,Safari,Chrome等主流瀏覽器中調試javascript。JSDT支持設置斷點,單步調試等調試工具的基本特性。
官方網站:http://code.google.com/p/jsdt/
Eclipse在線安裝URL:http://jsdt.googlecode.com/svn/trunk/org.ayound.js.debug.update
(13)MybatisEditor
介紹:MyBatisEditor是一個Eclipse的插件,用來編輯MyBatis的配置文件。
官方網站:http://code.google.com/a/eclipselabs.org/p/mybatiseditor/
Eclipse在線安裝URL:http://mybatiseditor.eclipselabs.org.codespot.com/git/org.eclipselabs.mybatiseditor.updatesite
(14)MAT
介紹:EclipseMemoryAnalyzer(MAT)是著名的跨平台集成開發環境Eclipse
Galileo版本的33個組成項目中之一,它是一個功能豐富的JAVA堆轉儲文件分析工具,可以幫助你發現內存漏洞和減少內存消耗。對於大型
JAVA
應用程序來說,再精細的測試也難以堵住所有的漏洞,即便我們在測試階段進行了大量卓有成效的工作,很多問題還是會在生產環境下暴露出來,並且很難在測試環境中進行重現。JVM
能夠記錄下問題發生時系統的部分運行狀態,並將其存儲在堆轉儲
(HeapDump)文件中,從而為我們分析和診斷問題提供了重要的依據。
官方網站:http://www.eclipse.org/mat/
Eclipse在線安裝URL:http://download.eclipse.org/mat/1.2/update-site/
(15)m2eclipse
介紹:這是一個在Eclipse環境中集成的Maven插件。
官方網站:http://www.sonatype.org/m2eclipse/
Eclipse在線安裝URL:
http://m2eclipse.sonatype.org/sites/m2e
(16)PatternBox
介紹:PatternBox是一個Java設計模式編輯器。它提供一個基於模板的代碼生成器。這個基於XML的模板機制使得你能夠定義自己的代碼模板。PatternBox當前能夠為16種GoF設計模式生成代碼。
官方網站:http://www.patternbox.com/
插件下載URL:http://www.patternbox.com/eclipse-plugin.html
(17)PMD
介紹:PMD是一種開源分析Java代碼錯誤的工具。與其他分析工具不同的是,PMD通過靜態分析獲知代碼錯誤。也就是說,在不運行Java程序的情況下報告錯誤。PMD附帶了許多可以直接使用的規則,利用這些規則可以找出Java源程序的許多問題。此外,用戶還可以自己定義規則,檢查Java代碼是否符合某些特定的編碼規范。PMD是一款採用BSD協議發布的Java程序代碼檢查工具。該工具可以做到檢查Java代碼中是否含有未使用的變數、是否含有空的抓取塊、是否含有不必要的對象等。該軟體功能強大,掃描效率高,是Java程序員debug的好幫手。
官方網站:http://pmd.sourceforge.net/
Eclipse在線安裝URL:http://pmd.sf.net/eclipse
(18)PropertiesEditor
介紹:PropertiesEditor編輯java的屬性文件,並可以自動存檔為Unicode格式。
官方網站:http://propedit.sourceforge.jp/index_en.html
Eclipse在線安裝URL:http://propedit.sourceforge.jp/eclipse/updates/
(19)RegexUtil
介紹:正則表達式測試插件。它能夠高亮顯示正則表達式語法、括弧匹配、錯誤檢測。能夠提醒正則表達式的功能詳細描述等。
官方網站:http://myregexp.com/eclipsePlugin.html
Eclipse在線安裝URL:http://regex-util.sourceforge.net/update/
(20)Smelly
介紹:Smelly這個插件能夠自動探測Java代碼中的BadSmells。Smelly在軟體開發中非常有用,它當前能夠探測以下這些BadSmells:
1.DataClass(純數據類):Class只有fields或get/set屬性,沒有任何行為。
2.LargeClass(龐大的類):單一類做過多的事情。
3.LongMethod(過長的Method):過長的代碼會使得Method難以理解和維護,應該將該Method分解成多個獨立功能的Method。
4.HighCommentDensity(過多的注釋):注釋過多意味著該段代碼難於理解。
5.LongParametersList(過長的參數列表):一個Method中傳入過長的參數列表,使得參數列難以理解。修改參數列時將會使得參數前後不一致。
6.SwitchStatements(Switch語句):同樣的Switch語句出現在不同的方法或不同的Class中,這樣當需要增加新的CASE分支或者修改CASE分支內語句時,就必須找到所有的地方,然後進行修改。
官方網站:http://smelly.sourceforge.net/english.html
插件下載URL:http://smelly.sourceforge.net/download2.html
(21)SpringIDE
介紹:SpringIDE是一系列Eclipse插件,目的開發基於Spring的應用。Spring
IDE增強了普通EclipseIDE自帶工具構建基於Spring的應用程序的能力。它使你的Eclipse
IDE能夠感知Spring,並給各種不同類型的Spring相關構件(Spring配置文件,Spring註解等)添加代碼完成,驗證,內容輔助,快速修復等功能。它也包含了對重構、Spring自動裝配、Spring
AOP和AspectJ、SpringBatch、Spring集成、Spring
Security以及SpringWebFlow的支持,並集成了EclipseMylyn。它同時還包含了Spring
UAA(用戶代理分析),幫助我們收集一些使用數據的一個可選組件。這是完全匿名的,並且有助於我們更好地理解如何使用工具,如何在未來改進它。它還附帶了SpringSource面板這個可選組件,可以給你帶來有關SpringSource相關項目的最新信息以及一個易於使用的擴展安裝來為Eclipse集成像VMware
vFabricTCServer或CloudFoundry這樣的額外的工具附加組件。
官方網站:https://github.com/SpringSource/spring-ide
Eclipse在線安裝URL:http://dist.springsource.com/release/TOOLS/update/e4.2(forEclipseJuno4.2)
http://dist.springsource.com/release/TOOLS/update/e3.7(forEclipseIndigo3.7)
http://dist.springsource.com/release/TOOLS/update/e3.6(forEclipseHelios3.6)
(22)StrutsIDE
介紹:Struts開發輔助工具。提供struts-config.xml的圖形編輯界面;提供Action,ActionForm,JSP等的創建向導。
官方網站:http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=StrutsIDE
插件下載URL:http://sourceforge.jp/projects/amateras/downloads/48176/tk.eclipse.plugin.struts_2.0.7.jar/
(23)Subclipse
介紹:Subclipse是一個為EclipseIDE添加Subversion支持的項目。支持幾乎所有版本的Eclipse。
官方網站:http://subclipse.stage.tigris.org/
Eclipse在線安裝URL:http://subclipse.tigris.org/update_1.8.x
(24)XMLBuddy
介紹:一個XML的Eclipse插件,支持XML,DTD,XMLSchema,XSLT等。XMLBuddy分了2個版本,一個是免費的,XMLBuddyPro是收費的。
http://dl.download.csdn.NET/down6/20081206/.zip?response-content-disposition=attachment%3Bfilename%2A%3D%22utf8%27%27com.objfac.xmlbuddy-V2.0.9.zip%22&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1469007502&Signature=JKgXBc%2B26iq1KGztUDYOYWwMaIE%3D
㈣ 安卓手機怎麼設置音量鍵解鎖
安卓手機設置音量鍵解鎖步驟如下:
1、以MIUI系統為例,打開MIUI系統設置應用主頁面,點擊「鎖屏、密碼和指紋」設置項;
㈤ Android軟體安全與逆向分析的書名
本書由淺入深、循序漸進地講解了Android 系統的軟體安全、逆向分析與加密解密技術。包括Android軟體逆向分析和系統安全方面的必備知識及概念、如何靜態分析Android 軟體、如何動態調試Android 軟體、Android 軟體的破解與反破解技術的探討,以及對典型Android 病毒的全面剖析。
本書適合所有Android 應用開發者、Android 系統開發工程師、Android 系統安全工作者閱讀學習。 豐生強(網名非蟲)
Android軟體安全專家。看雪論壇Android安全版版主;安卓巴士開發交流版版主。
對Android軟體與系統安全有狂熱的愛好和獨到的見解,對Android系統的全部源代碼進行過深入地研究和分析。逆向分析實戰經驗豐富。
在國內信息安全雜志上發表過多篇有價值的軟體安全文章,目前就職於國內某Android開發企業,常年混跡於看雪論壇(ID非蟲)。
作者郵箱:[email protected]
願與國內安全愛好者共同交流與探討安全技術。 第1章 Android程序分析環境搭建11.1 Windows分析環境搭建11.1.1 安裝JDK11.1.2 安裝Android SDK31.1.3 安裝Android NDK51.1.4 Eclipse集成開發環境61.1.5 安裝CDT、ADT插件61.1.6 創建Android Virtual Device81.1.7 使用到的工具91.2 Linux分析環境搭建91.2.1 本書的Linux環境91.2.2 安裝JDK91.2.3 在Ubuntu上安裝Android SDK101.2.4 在Ubuntu上安裝Android NDK111.2.5 在Ubuntu上安裝Eclipse集成開發環境121.2.6 在Ubuntu上安裝CDT、ADT插件131.2.7 創建Android Virtual Device131.2.8 使用到的工具151.3 本章小結15第2章 如何分析Android程序162.1 編寫第一個Android程序162.1.1 使用Eclipse創建Android工程162.1.2 編譯生成APK文件192.2 破解第一個程序202.2.1 如何動手?202.2.2 反編譯APK文件202.2.3 分析APK文件212.2.4 修改Smali文件代碼262.2.5 重新編譯APK文件並簽名262.2.6 安裝測試272.3 本章小結28第3章 進入Android Dalvik虛擬機293.1 Dalvik虛擬機的特點——掌握Android程序的運行原理293.1.1 Dalvik虛擬機概述293.1.2 Dalvik虛擬機與Java虛擬機的區別293.1.3 Dalvik虛擬機是如何執行程序的343.1.4 關於Dalvik虛擬機JIT(即時編譯)363.2 Dalvik匯編語言基礎為分析Android程序做准備373.2.1 Dalvik指令格式373.2.2 DEX文件反匯編工具393.2.3 了解Dalvik寄存器403.2.4 兩種不同的寄存器表示方法——v命名法與p命名法423.2.5 Dalvik位元組碼的類型、方法與欄位表示方法433.3 Dalvik指令集443.3.1 指令特點453.3.2 空操作指令453.3.3 數據操作指令463.3.4 返回指令463.3.5 數據定義指令463.3.6 鎖指令473.3.7 實例操作指令473.3.8 數組操作指令483.3.9 異常指令483.3.10 跳轉指令483.3.11 比較指令493.3.12 欄位操作指令503.3.13 方法調用指令503.3.14 數據轉換指令513.3.15 數據運算指令513.4 Dalvik指令集練習——寫一個Dalvik版的Hello World523.4.1 編寫smali文件523.4.2 編譯smali文件543.4.3 測試運行543.5 本章小結55第4章 Android可執行文件564.1 Android程序的生成步驟564.2 Android程序的安裝流程594.3 dex文件格式664.3.1 dex文件中的數據結構664.3.2 dex文件整體結構684.3.3 dex文件結構分析714.4 odex文件格式804.4.1 如何生成odex文件804.4.2 odex文件整體結構814.4.3 odex文件結構分析834.5 dex文件的驗證與優化工具dexopt的工作過程884.6 Android應用程序另類破解方法914.7 本章小結93第5章 靜態分析Android程序945.1 什麼是靜態分析945.2 快速定位Android程序的關鍵代碼945.2.1 反編譯apk程序945.2.2 程序的主Activity955.2.3 需重點關注的Application類955.2.4 如何定位關鍵代碼——六種方法965.3 smali文件格式975.4 Android程序中的類1005.4.1 內部類1005.4.2 監聽器1025.4.3 註解類1055.4.4 自動生成的類1085.5 閱讀反編譯的smali代碼1105.5.1 循環語句1105.5.2 switch分支語句1155.5.3 try/catch語句1215.6 使用IDA Pro靜態分析Android程序1275.6.1 IDA Pro對Android的支持1275.6.2 如何操作1285.6.3 定位關鍵代碼——使用IDA Pro進行破解的實例1325.7 惡意軟體分析工具包——Androguard1355.7.1 Androguard的安裝與配置1355.7.2 Androguard的使用方法1375.7.3 使用Androguard配合Gephi進行靜態分析1445.7.4 使用androlyze.py進行靜態分析1485.8 其他靜態分析工具1525.9 閱讀反編譯的Java代碼1525.9.1 使用dex2jar生成jar文件1525.9.2 使用jd-gui查看jar文件的源碼1535.10 集成分析環境——santoku1545.11 本章小結156第6章 基於Android的ARM匯編語言基礎——逆向原生!1576.1 Android與ARM處理器1576.1.1 ARM處理器架構概述1576.1.2 ARM處理器家族1586.1.3 Android支持的處理器架構1596.2 原生程序與ARM匯編語言——逆向你的原生Hello ARM1606.2.1 原生程序逆向初步1606.2.2 原生程序的生成過程1626.2.3 必須了解的ARM知識1646.3 ARM匯編語言程序結構1666.3.1 完整的ARM匯編程序1666.3.2 處理器架構定義1676.3.3 段定義1686.3.4 注釋與標號1696.3.5 匯編器指令1696.3.6 子程序與參數傳遞1706.4 ARM處理器定址方式1706.4.1 立即定址1706.4.2 寄存器定址1716.4.3 寄存器移位定址1716.4.4 寄存器間接定址1716.4.5 基址定址1716.4.6 多寄存器定址1716.4.7 堆棧定址1726.4.8 塊拷貝定址1726.4.9 相對定址1726.5 ARM與Thumb指令集1736.5.1 指令格式1736.5.2 跳轉指令1746.5.3 存儲器訪問指令1756.5.4 數據處理指令1776.5.5 其他指令1846.6 用於多媒體編程與浮點計算的NEON與VFP指令集1856.7 本章小結186第7章 Android NDK程序逆向分析1877.1 Android中的原生程序1877.1.1 編寫一個例子程序1877.1.2 如何編譯原生程序1887.2 原生程序的啟動流程分析1947.2.1 原生程序的入口函數1947.2.2 main函數究竟何時被執行1987.3 原生文件格式1997.4 原生C程序逆向分析2007.4.1 原生程序的分析方法2007.4.2 for循環語句反匯編代碼的特點2047.4.3 if...else分支語句反匯編代碼的特點2087.4.4 while循環語句反匯編代碼的特點2117.4.5 switch分支語句反匯編代碼的特點2157.4.6 原生程序的編譯時優化2187.5 原生C++程序逆向分析2227.5.1 C++類的逆向2227.5.2 Android NDK對C++特性的支持2257.5.3 靜態鏈接STL與動態鏈接STL的代碼區別2277.6 Android NDK JNI API逆向分析2327.6.1 Android NDK提供了哪些函數2327.6.2 如何靜態分析Android NDK程序2337.7 本章小結235第8章 動態調試Android程序2368.1 Android動態調試支持2368.2 DDMS的使用2378.2.1 如何啟動DDMS2378.2.2 使用LogCat查看調試信息2388.3 定位關鍵代碼2408.3.1 代碼注入法——讓程序自己吐出注冊碼2408.3.2 棧跟蹤法2448.3.3 Method Profiling2478.4 使用AndBug調試Android程序2508.4.1 安裝AndBug2518.4.2 使用AndBug2518.5 使用IDA Pro調試Android原生程序2548.5.1 調試Android原生程序2558.5.2 調試Android原生動態鏈接庫2568.6 使用gdb調試Android原生程序2608.6.1 編譯gdb與gdbserver2608.6.2 如何調試2628.7 本章小結264第9章 Android軟體的破解技術2659.1 試用版軟體2659.1.1 試用版軟體的種類2659.1.2 實例破解——針對授權KEY方式的破解2659.2 序列號保護2719.3 網路驗證2729.3.1 網路驗證保護思路2729.3.2 實例破解——針對網路驗證方式的破解2739.4 In-app Billing(應用內付費)2779.4.1 In-app Billing原理2779.4.2 In-app Billing破解方法2809.5 Google Play License保護2819.5.1 Google Play License保護機制2819.5.2 實例破解——針對Google Play License方式的破解2839.6 重啟驗證2849.6.1 重啟驗證保護思路2859.6.2 實例破解——針對重啟驗證方式的破解2859.7 如何破解其他類型的Android程序2969.7.1 Mono for Android開發的程序及其破解方法2969.7.2 Qt for Android開發的程序及其破解方法3019.8 本章小結309第10章 Android程序的反破解技術31010.1 對抗反編譯31010.1.1 如何對抗反編譯工具31010.1.2 對抗dex2jar31110.2 對抗靜態分析31210.2.1 代碼混淆技術31210.2.2 NDK保護31510.2.3 外殼保護31610.3 對抗動態調試31610.3.1 檢測調試器31610.3.2 檢測模擬器31710.4 防止重編譯31810.4.1 檢查簽名31810.4.2 校驗保護31910.5 本章小結320第11章 Android系統攻擊與防範32111.1 Android系統安全概述32111.2 手機ROOT帶來的危害32111.2.1 為什麼要ROOT手機32111.2.2 手機ROOT後帶來的安全隱患32211.2.3 Android手機ROOT原理32211.3 Android許可權攻擊32911.3.1 Android許可權檢查機制32911.3.2 串謀許可權攻擊33311.3.3 許可權攻擊檢測33611.4 Android組件安全33911.4.1 Activity安全及Activity劫持演示34011.4.2 Broadcast Receiver 安全34311.4.3 Service安全34511.4.4 Content Provider安全34611.5 數據安全34711.5.1 外部存儲安全34711.5.2 內部存儲安全34811.5.3 數據通信安全35011.6 ROM安全35111.6.1 ROM的種類35211.6.2 ROM的定製過程35211.6.3 定製ROM的安全隱患35911.6.4 如何防範36011.7 本章小結361第12章 DroidKongFu變種病毒實例分析36212.1 DroidKongFu病毒介紹36212.2 配置病毒分析環境36312.3 病毒執行狀態分析36412.3.1 使用APIMonitor初步分析36512.3.2 使用DroidBox動態分析36912.3.3 其他動態分析工具37312.4 病毒代碼逆向分析37612.4.1 Java層啟動代碼分析37612.4.2 Native層啟動代碼分析38112.4.3 Native層病毒核心分析39312.5 DroidKongFu病毒框架總結40412.6 病毒防治40612.7 本章小結406