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