九月工作总结

来源:互联网 发布:看二战电影软件 编辑:程序博客网 时间:2024/04/25 23:49
 

一.     

Android应用层开发需要java,谁知自己java是那么的烂,考试还挂了,悲催,以下主要是分析那份试卷的笔记。

Java基础复习

1.     java中,方法可以与class同名2011-09-15

        

2.     被final修饰的形式参数2011-09-15

形式参数可被字段修饰符中的final修饰,表示该传入的参数不能被修改。

3.     父类与子类变量的覆盖问题2011-09-15

BaseJava.java

public class BaseJava {

         public int x;

         public int y;

        

         public BaseJava(){}

        

         public BaseJava(int n,int m){

                   this.x = n;

                   this.y = m;

         }

         public void test()

         {

                   System.out.println("base print x"+ x +" y"+ y);

         }

}

JavaTest1.java

public class JavaTest1 extends BaseJava{

    public int x ;

    public int y;

    public JavaTest1() {

       // TODO Auto-generated constructor stub

    }

    public JavaTest1(int n,int m)

    {

       this.x = n;

       this.y = m;

    }

    public void test()

    {

       super.test();

       System.out.println("sub print x"+ x +" y"+ y);

    }

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       JavaTest1 c1 = new JavaTest1(1,2);

       BaseJava c2 = c1;

       c1.test();

       c2.test();

    }

}

输出:

base print x1 y2

sub print x1 y2

base print x1 y2

sub print x1 y2

    若子类声明的变量与父类的对应变量名字一样,则在实例化子类对象时,这两个同名变量的内存空间不一样,子类在构造时先调用父类构造函数初始化父类的x、y值,再调用本身构造函数初始化子类的x、y值。如本例中的x、y。

而若子类没再声明与父类同名的变量,本例中也即子类没再声明x、y,则子类构造函数初始化的还是父类的x、y。

4.     匿名内部类2011-09-15

所谓的匿名就是该类连名字都没有,匿名内部类不可以有构造器,因为匿名内部类是要扩展或实现父类或接口。匿名内部类可以继承其他类,因为是类就是继承自Object类的。

Q:Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
A:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

5.     Java的汉字占几个字符2011-09-15

Java采用unicode编码,每个字符占16bit。一个汉字与一个英文都是一个字符。

6.     String与StringBuffer的一些区别以及方法2011-09-15

String:长度不可变字串。

StringBuffer:长度可变字串。

String方法:

String.length()

String.charAt()

String.subString()

字串比较

String.equals()

String.equalsIgnoreCase()

String.compareTo()

String.compareToIgnoreCase()

String.toUpperCase()

String.toLowerCase()

7.     类变量与类方法2011-09-15

public class JavaTest2 {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       C.fun();//complie error

    }

 

}

 

class C implements B{

    private int c =2;

    static void fun(){

       b = 2;

       c = 3;//complie error

//c是private,不是类变量,fun为类方法,类方法不能访问//非类变量。

    }

}

 

interface B{

       int b = 1;

}

类方法不能访问非类变量。

8.     对继承自接口的方法不能降低访问权限2011-09-15

public class JavaTest2 {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       new C().funB();

    }

 

}

 

class C implements B{

    private int b =2;

    void funB(){//complie error

           //默认是friendly

       System.out.println("b="+b);

    }

}

 

interface B{

       int b = 1;

       void funB();

}

接口中的方法都是隐式public,而实现该接口的类中,不能对该方法的访问控制进行降级处理。

9.     Final修饰变量的解析2011-09-15

public class JavaTest3 {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       final B b= new B();

       final int n = 10;

      

       n=11000;// complie error

       b.changeB();

       b = new B();//complie error

       b.changeB();

    }

 

}

 

class B{

    private int b;

    public void changeB(){

       b = 1000;//没错误

       System.out.println("B.b = "+b);

    }

}
final修饰的变量,在程序的运行中,不能再改变他的值。这里的“不能改变他的值”意思是:对于简单数据类型的变量,例如这里的n,程序运行中不能改变他的值。对于复杂数据类型的变量,可以改变类里面的变量的值,但是不能改变一整个对象的值,例如新建一个对象给他。

10.    多态的注意2011-09-15

public class JavaTest4 {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       A a =new A();

       a.fun();

       a.fun2();

       B b = a;

       b.fun();

       b.fun2();

//     B b =new B();

//     b.fun();

//     b.fun2();

//     A a = b;// complie error

 

    }

}

class A extends B{

    public void fun(){

       System.out.println("A.fun()");

    }

}

 

class B{

    public void fun(){

       System.out.println("B.fun()");

    }

    public void fun2(){

       System.out.println("B.fun2()");

    }

}

输出:

A.fun()

B.fun2()

A.fun()

B.fun2()

    最后两行输出,体现了多态性。父类对象b指向子类对象a,b可以共有的方法fun,但实际是调用A.fun(),而调用非共有的方法fun2(),则是调用了B.fun()。若是把注释代码打开,会有error,因为不能把子类对象指向父类对象。

    父类对象可以指向子类对象,子类对象不能指向父类对象。

11.           关于变量的比较2011-09-15

public class JavaTest6 {

 

    /**

     * @param args

     */

    private long val;

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       JavaTest6 x = new JavaTest6(10L);

       JavaTest6 y = new JavaTest6(10L);

       JavaTest6 z = y;

       long a = 10L;

       int b = 10;

       System.out.println(x==y);

       System.out.println(y==z);

       System.out.println(a==b);

       System.out.println(a==10.0);

    }

    public JavaTest6(long v){

       val = v;

    }

}

输出:

false

true

true

true

    第一个:两个对象虽然里面成员变量相同,但是这两个对象内存空间不同,因此不相等。

    第二个:z指向y,因此内存空间相同,因此相等。

12.    NullPointerException的解析2011-09-15

public class JavaTest7 {

 

    /**

     * @param args

     */

    private static int[] a;

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       try{

           System.out.print(1);

           a = new int[1];

           a[1]=0;

           System.out.print(2);

       }

       catch (NullPointerException e) {

           // TODO: handle exception

           System.out.print(3);

       }

       catch (Exception e) {

           // TODO: handle exception

           System.out.print(4);

       }

       finally{

           System.out.print(5);

       }

       System.out.print(6);

    }

}

输出:

1456

    对于数组a,已经进行了初始化,因此a指向的地方非空,对于a[1],只是进行越界操作,a[1]指向的地址是a实例化的一个元素(a[0])地址之后的一位,因此也非空。

 

13.    静态块与非静态块2011-09-15

 

public class JavaTest8 {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       new A();

       new B();

    }

}

 

class A extends B{

    static {

       System.out.print(1);

    }

    static {

       System.out.print(2);

    }

    public A() {

       System.out.print(3);

    }

}

 

class B{

    static {

       System.out.print(4);

    }

    static {

       System.out.print(5);

    }

    public B() {

       System.out.print(6);

    }

}

输出:

4512636

 

public class JavaTest8 {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       new A();

       new B();

    }

}

 

class A extends B{

    static {

       System.out.print(1);

    }

    {

       System.out.print(2);

    }

    public A() {

       System.out.print(3);

    }

}

 

class B{

    static {

       System.out.print(4);

    }

    {

       System.out.print(5);

    }

    public B() {

       System.out.print(6);

    }

}

输出:

41562356

<1>非静态块在实例化时被调用。一般用于对实例变量的初始化。对于代码

class B{

    public int a;

    {

       a = 5;

    }

}

等价于

class B{

    public int a = 5;

}

<2>静态块在类初始化时运行。一般用于将静态对象进行初始化。对于代码

class B{

    public static int a ;

    static{

       a = 5;

    }

}

等价于

class B{

    public static int a = 5;

}

<3>静态变量的声明以及初始化是两个不同的操作。而对于静态块,因为静态块在编译时就已经确定了存放的内存空间了,所以静态块对静态变量的初始化动作与静态变量的声明动作,两者的前后顺序可以任意。非静态块也是如此。例如,对于代码

class B{

    static {

       a = 10;

    }

    private static int a;

}

等价于

class B{

    private static int a;

    static {

       a = 10;

    }

}

<4>一个类中可以有多个静态块,这多个静态块可以进行合并。非静态块也是如此。对于代码

class B{

    static {

       a = 10;

    }

    static {

       a = 20;

    }

    private static int a;

}

等价于

class B{

    static {

       a = 10;

       a = 20;

    }

    private static int a;

}

14. Finally的执行顺序2011-09-15

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
答:会执行,在return前执行

15.    集合的简要小结2011-09-15

    Iterator

    迭代器 

    方法:

    hasNext():是否存在下一个元素。

    next():取得下一个元素。

    remove():删除当前指向的元素。

 

    Collection

    是所有set、list的父类。

 

    ArrayList

    基本的操作。

 

HashMap

    基本的操作。

二.    一些专题

主要涉及在学习android的一些专题。

1.     Android实例代码学习——Snake 2011-09-15

1)      Handler中,

handleMessage 会在sendMessage、sendMessageAtTime等等将message放入message loop后调用。

         2)activity的onKeyDown响应key down事件。

 

2.     Andorid实例代码学习——BTChat 2011-09-15

1)可以定义一些扩展的layout文件,如下面的custom_title.xml文件,该文件只是定义了title这个屏幕范围内的layout。

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);//取得想要自定义的feature,//这些feature在针对android.view.Window有定义。

        setContentView(R.layout.main);

        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);//在//加载了主要layout后,再加载扩展layout

        // Set up the custom title

        mTitle = (TextView) findViewById(R.id.title_left_text);//同样通过findViewById取得对应控//件,以及进行控件相关操作,诸如setText。

        mTitle.setText(R.string.app_name);

 

custom_title.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:gravity="center_vertical"

  >

  <TextView android:id="@+id/title_left_text"

      android:layout_alignParentLeft="true"

      android:ellipsize="end"

      android:singleLine="true"

      style="?android:attr/windowTitleStyle"

      android:layout_width="wrap_content"

      android:layout_height="match_parent"

      android:layout_weight="1"

    />

    <TextView android:id="@+id/title_right_text"

        android:layout_alignParentRight="true"

        android:ellipsize="end"

        android:singleLine="true"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:textColor="#fff"

        android:layout_weight="1"

    />

</RelativeLayout>

一般来说,用的是相对布局。

2)

BluetoothAdapter:BT设备适配器。负责搜寻蓝牙设备,或是与BluetoothServerSocket配合建立listen等等。

BluetoothDevice:BT设备信息的管理器。

BluetoothServerSocket:server 端用于listen的socket。

BluetoothSocket:server端listen到client端的接入创建的socket,或是client端的socket。一般,client端在connect过程中需要一个BluetoothSocket来负责连接,在连接成功后需要一个BluetoothSocket来负责读写数据。

         3)

edittext. setOnEditorActionListener:监听编辑框输入字符的事件。

3.     Timer的使用2011-09-15

Timer t = new Timer();

TimerTask tt= new TimerTask() {

 

@Override

public void run() {

// TODO Auto-generated method stub

Log.d(TAG, "timer excute end");

}

};

Log.d(TAG, "timer excute start");

t.schedule(tt,2000);//timertask的run会在2000ms后执行

<1>创建timer;

<2>创建timertask,并且overwrite他的run();

<3>timer.schedule启动这个定时器。

<4>可以使用timer.cancel取消这个定时器。

4.     intent中的隐式调用2011-09-15

 

区别于intent的显示调用直接指定了将要调用的activity,隐式调用交由android去决定将要启动哪个activity。

隐式调用需要有一个筛选器intentFilter,在    AndroidManifest.xml中定义,如下:

       <activity android:name=".ImplicitActivity"

           android:label="Implicit Activity">

           <intent-filter>

              <action android:name="com.cellon.test.action"/>

              <category android:name="android.intent.category.DEFAULT"/>

              <data  android:scheme="content"

                   android:mimeType="application/vnd.test"/>

              <data android:host="com.cellon.train.test" />

              <data

              android:scheme="wap"

              android:mimeType="train/vnd.test"/>

           </intent-filter>

       </activity>

       在想要启动activity的java文件中,使用如下代码启动:

Intent intent = new Intent("com.cellon.test.action");//构造时同时定义了

//启动的action

intent.addCategory(Intent.CATEGORY_DEFAULT);//启动的category

intent.setDataAndType(Uri.parse("wap://com.cellon.train.test/1"),"application/vnd.test");//启动的data,包括host、scheme、mimeType等

startActivity(intent);

    以下为匹配规则:

    <1>当且仅当启动的intent的action、category、data与intentFilter的对应项均匹配时,该activity才会启动。本例中,ImplicitActivity的筛选器的对应项与启动的intent的对应项匹配,ImplicitActivity会被启动。

    <2>对于data项,里面可以包含多项,诸如host、mimetype、scheme等,对于同一项,如mimetype,也可以定义了多少项,就表示有多少种mimetype可以导致匹配。本例中,scheme有两种情况,"content","wap";host有两种情况,"com.cellon.train.test"。

    <3>对于筛选器中的action,只能定义一个action。Intent请求的action与<intent-filter>的任何一条匹配即可通过。

对于category,可以定义多个category。只有Intent请求中所有的Category与组件中某一个<intent-filter>的完全匹配时才能算通过,并且<intent-filter>中多余的Category不会影响匹配成功。

 

5.     Service生命周期2011-09-15

startService()后,即使调用了startService()的进程结束了,Service仍然存在,直到stopService()被调用,或者Service自杀(stopService()),进程才真正结束。

 bindService()后,Service将和调用了bindService()的进程同生共死,当调用bindService()的进程结束,Service也随之结束;当然,期间也可以调用unbindService()方法来结束Service。

  当startService()和bindService()这两种方法被同时使用时,也就是说A进程调用了startService(),B进程调用了bindService(),只有当A进程stopService(),进程unbindService()之后,这個Service才会结束。

6.       ListActivity使用2011-09-15

         最小程序子集

    private String stringList[] = {

           "Start","Setting","About","Exit"

    };

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       // TODO Auto-generated method stub

       super.onCreate(savedInstanceState);

       try {

           //创建list恰配器

           ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.main_listview,R.id.listitem,stringList);

           //将list恰配器与list关联

           this.setListAdapter(adapter);  

       } catch (Exception e) {

           // TODO: handle exception

           Log.d(TAG, "Exception");

       }

    }

    <1>本类extends ListActivity。

    <2>不用setContentView设置布局,则默认使用android指定的listview布局。

    <3>注意创建ArrayAdapter时需要传入每个listitem显示的textview的id以及该textview定义的layout文件。

    <4>override onListItemClick。

7.     在某个xml中可以引用另一xml的layout布局2011-09-15

<include layout="@layout/desk_clock_time_date"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_below="@id/nextAlarm"

            />

8.     Intent隐式启动activity的补充注意2011-09-15

         <1>使用intent隐式启动activity,action与category必须都指定。

         <2>xml中intentfilter的category的定义只能用字串形式的"android.intent.category.DEFAULT"等等,不能用Intent.CATEGORY_DEFAULT等等非字串形式的。

         <3>xml中intentfilter的category的定义,必须保证有一个是"android.intent.category.DEFAULT"。

 

9.     ListActivity中的item不单只是textview 2011-09-15

         SimpleAdapter这个恰配器可以满足list中item的多样化。注意,这里的getList中,每次list.add的map都要重新实例化。

 

public class ZPSettingActivity extends ListActivity{

    private String TAG = "ZPSettingActivity";

    private String[] strList = {

           "a","b","c","d","e"

    };

    private ArrayList<Map<String, Object>> list = new ArrayList<Map<String,Object>>();

    private Map<String, Object> map;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       // TODO Auto-generated method stub

       super.onCreate(savedInstanceState);

       Log.d(TAG, "onCreate");

       setContentView(R.layout.setting);

      

       getList();

       this.setListAdapter(new SimpleAdapter(this,

              list,

              R.layout.setting_listview,

              new String[]{"item"},

              new int[]{R.id.setting_lv_tv_name}));

    }

   

    private void getList(){

       for(int i = 0;i < 5;i++){

           map = new HashMap<String, Object>();

           map.put("item", strList[i]);

           list.add(map);

       }

    }  

}

    以下xml显示每个item由一个textview、两个button、一个checkbox组成。

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="horizontal"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content">

  <TextView

  android:id="@+id/setting_lv_tv_name"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  ></TextView>

  <Button

  android:id="@+id/setting_lv_btn_edt"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:text="@+id/gobal_edit"

  ></Button>

  <Button

  android:id="@+id/setting_lv_btn_del"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:text="@+id/gobal_delete"

  ></Button>

  <CheckBox

  android:id="@+id/setting_lv_chk"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  ></CheckBox>

</LinearLayout>

三.    杂项

1.     一些有用的函数记录2011-09-15

         View.requestFocus():获取view的焦点。

         View. getWindowVisibility():返回该view是否可见。

edittext. setOnEditorActionListener:监听编辑框输入字符的事件。

 

2.     MyEclipse 快捷键大全2011-09-15

文章分类:综合技术 

Eclipse本身很快的,但是加上了myeclipse后,就狂占内存,而且速度狂慢,那如何让Eclipse拖着myeclipse狂飚呢?这里提供一个: 

 

技巧:取消自动validation 

validation有一堆,什么xml、jsp、jsf、js等等,我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下,速度立马提升好几个档次! 

取消方法: windows-->perferences-->myeclipse-->validation 除开Manual下面的复选框全部选中之外,其他全部不选手工验证方法: 

  在要验证的文件上,单击鼠标右键-->myeclipse-->run validation 

程序代码自动排版:Ctrl+Shift+F,会自动把代码进行格式化的排版,非常方便 

快速执行程序:Ctrl + F11第一次执行时,它会询问您执行模式,设置好后,以后只要按这个热键,它就会快速执行. 

Ctrl+Shift+/ 加上段注释/**/ 

Ctrl+Shift+\ 取消段注释/**/ 

Ctrl+/ 加上行注释或取消行注释 

自动汇入所需要的类别:Ctrl+Shift+M Ctrl+Shift+O 好象使用Ctrl+Shift+O 也可以 

重要技巧(机器配置低就别用了,呵呵) 

Eclipse中默认是输入"."后出现自动提示,用于类成员的自动提示,可是有时候我们希望它能在我们输入类的首字母后就出现自动提示,可以节省大量的输入时间(虽然按alt + /会出现提示,但还是要多按一次按键,太麻烦了). 

从Window -> preferences -> Java -> Editor -> Content assist -> Auto-Activation下,我们可以在"."号后面加入我们需要自动提示的首字幕,比如"ahiz". 

然后我们回到Eclipse的开发环境,输入"a",提示就出现了. 

但是我们可以发现,这个Auto-Activation下的输入框里最多只能输入5个字母,也许是Eclipse的开发人员担心我们输入的太多会影响性能,但计算机的性能不用白不用,所以我们要打破这个限制. 

其实上面都是铺垫,制造一下气氛,以显得我们下面要做的事情很牛似的,其实不然,一切都很简单.嘿嘿 

在"."后面随便输入几个字符,比如"abij",然后回到开发环境,File -> export -> general -> preferences -> 选一个地方保存你的首选项,比如C:\a.epf 

用任何文本编辑器打开a.epf,查找字符串“abij”,找到以后,替换成“abcdefghijklmnopqrstuvwxyz”,总之就是你想怎样就怎样!!然后回到Eclipse,File -> import -> general -> preferences -> 导入刚才的a.epf文件.此时你会发现输入任何字幕都可以得到自动提示了.爽!!! 

最后:自动提示弹出的时间最好改成100毫秒以下,这样会比较爽一点,不然你都完事了,自动提示才弹出来:),不过也要看机器性能. 

 

myeclipse自动提示背景颜色设置(再也不那么淡) 

window--preference--java--editor- completion proposals Background 颜色推荐85,90,205 

 

Eclipse 常用快捷键 

先来10个常用方便的快捷键。。 

Ctrl + Shift + T: 打开类型:显示"打开类型"对话框来在编辑器中打开类型。"打开类型"选择对话框显示工作空间中存在的所有类型如类、接口等。 

 

Ctrl + Shift + R: 打开资源:打开"打开资源"对话框以打开工作空间中的任何资源。在Package Explorer中不必浏览文件便可快速打开任意一个文件。使用这个快捷键可以打开一个对话框,在里面输入你想查找的文件或者通配符既可。 

 

Ctrl + O: 快速大纲:打开当前所选类型的轻量级大纲图。在一个文件中直接打开一个成员变量(如字段、方法),尤其是有许多类似的方法名的时候这个快捷键将变得非常有用。 

 

Ctrl + L: 输入行数: 转至行:打开一个对话框,允许您输入编辑器应该跳至的行号。仅适用于编辑器。输入行号,可以快速跳转到源文件中的第N行, 

 

Ctrl + Q: 上一个编辑位置:显示上一个编辑操作的发生位置,返回到最近的修改位置。即使你查看不同的文件时,你也可以使用该快捷键来找到你最近对文件的修改位置。尤其是在文件比较大时,显得更为有用。 

 

Ctrl + T: 快速类型层次结构:打开当前选择的类型的轻量级层次结构查看器,可以实现快速转到一个supertype或者subtype. 

 

Ctrl + E: 快速跳转到另外一个编辑器。注意Ctrl + F6也可以实现这个功能,在使用的时候可以注意一下他们的异同。 

 

Ctrl + ./Ctrl +,: 在一个文件中快速定位到一个问题(如错误、警告等) 

 

Alt +← and Alt + →: 来回跳转至你所查阅的文件 

 

F3: 快速转到一个类型声明。同时也可以按住ctrl健并点击该超链接变量或者类或者你想查看的任何声明都可以。 

 

 

Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。 

  1. 【ALT+/】 

  此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。 

  2. 【Ctrl+O】 

  显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用。 

  3. 【Ctrl+/】 

  快速添加注释,能为光标所在行或所选定行快速添加注释或取消注释,在调试的时候可能总会需要注释一些东西或取消注释,现在好了,不需要每行进行重复的注释。 

  4. 【Ctrl+D】 

  删除当前行,这也是笔者的最爱之一,不用为删除一行而按那么多次的删除键。 

  5. 【Ctrl+M】 

  窗口最大化和还原,用户在窗口中进行操作时,总会觉得当前窗口小(尤其在编写代码时),现在好了,试试【Ctrl+M】快捷键。 

  查看和定位快捷键 

  在程序中,迅速定位代码的位置,快速找到Bug的所在,是非常不容易的事,Eclipse提供了强大的查找功能,可以利用如下的快捷键帮助完成查找定位的工作。 

  1. 【Ctrl+K】、【Ctrl++Shift+K】 

  快速向下和向上查找选定的内容,从此不再需要用鼠标单击查找对话框了。 

  2. 【Ctrl+Shift+T】 

  查找工作空间(Workspace)构建路径中的可找到Java类文件,不要为找不到类而痛苦,而且可以使用“*”、“?”等通配符。 

  3. 【Ctrl+Shift+R】 

  和【Ctrl+Shift+T】对应,查找工作空间(Workspace)中的所有文件(包括Java文件),也可以使用通配符。 

  4. 【Ctrl+Shift+G】 

  查找类、方法和属性的引用。这是一个非常实用的快捷键,例如要修改引用某个方法的代码,可以通过【Ctrl+Shift+G】快捷键迅速定位所有引用此方法的位置。 

  5. 【Ctrl+Shift+O】 

快速生成import,当从网上拷贝一段程序后,不知道如何import进所调用的类,试试【Ctrl+Shift+O】快捷键,一定会有惊喜。 

  6. 【Ctrl+Shift+F】 

  格式化代码,书写格式规范的代码是每一个程序员的必修之课,当看见某段代码极不顺眼时,选定后按【Ctrl+Shift+F】快捷键可以格式化这段代码,如果不选定代码则默认格式化当前文件(Java文件)。 

  7. 【ALT+Shift+W】 

  查找当前文件所在项目中的路径,可以快速定位浏览器视图的位置,如果想查找某个文件所在的包时,此快捷键非常有用(特别在比较大的项目中)。 

  8. 【Ctrl+L】 

  定位到当前编辑器的某一行,对非Java文件也有效。 

  9. 【Alt+←】、【Alt+→】 

  后退历史记录和前进历史记录,在跟踪代码时非常有用,用户可能查找了几个有关联的地方,但可能记不清楚了,可以通过这两个快捷键定位查找的顺序。 

  10. 【F3】 

快速定位光标位置的某个类、方法和属性。 

  11. 【F4】 

  显示类的继承关系,并打开类继承视图。 

  调试快捷键 

  Eclipse中有如下一些和运行调试相关的快捷键。 

  1. 【Ctrl+Shift+B】:在当前行设置断点或取消设置的断点。 

  2. 【F11】:调试最后一次执行的程序。 

  3. 【Ctrl+F11】:运行最后一次执行的程序。 

  4. 【F5】:跟踪到方法中,当程序执行到某方法时,可以按【F5】键跟踪到方法中。 

  5. 【F6】:单步执行程序。 

  6. 【F7】:执行完方法,返回到调用此方法的后一条语句。 

  7. 【F8】:继续执行,到下一个断点或程序结束。 

  常用编辑器快捷键 

  通常文本编辑器都提供了一些和编辑相关的快捷键,在Eclipse中也可以通过这些快捷键进行文本编辑。 

  1. 【Ctrl+C】:复制。 

  2. 【Ctrl+X】:剪切。 

  3. 【Ctrl+V】:粘贴。 

  4. 【Ctrl+S】:保存文件。 

  5. 【Ctrl+Z】:撤销。 

  6. 【Ctrl+Y】:重复。 

  7. 【Ctrl+F】:查找。 

  其他快捷键 

  Eclipse中还有很多快捷键,无法一一列举,用户可以通过帮助文档找到它们的使用方式,另外还有几个常用的快捷键如下。 

  1. 【Ctrl+F6】:切换到下一个编辑器。 

  2. 【Ctrl+Shift+F6】:切换到上一个编辑器。 

  3. 【Ctrl+F7】:切换到下一个视图。 

  4. 【Ctrl+Shift+F7】:切换到上一个视图。 

  5. 【Ctrl+F8】:切换到下一个透视图。 

  6. 【Ctrl+Shift+F8】:切换到上一个透视图。 

  Eclipse中快捷键比较多,可以通过帮助文档找到所有快捷键的使用,但要掌握所有快捷键的使用是不可能的,也没有必要,如果花点时间熟悉本节列举的快捷键,必将会事半功倍 

 

1. edit->content Assist - > add Alt+/ 代码关联 

2. Window -> Next Editor -> add Ctrl+Tab 切换窗口 

3. Run/Debug Toggle Line Breakpoint -> add Ctrl+` 在调试的时候 增删断点 

4. Source-> Surround with try/catch Block -> Ctrl+Shift+v 增加try catch 框框 

5. Source -> Generate Getters and Setters -> Ctrl+Shift+. 增加get set 方法 

 

-----------有用的快捷键----------- 

Alt+/ 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替) 

Ctrl+1:光标停在某变量上,按Ctrl+1键,可以提供快速重构方案。选中若干行,按Ctrl+1键可将此段代码放入for、while、if、do或try等代码块中。 

双击左括号(小括号、中括号、大括号),将选择括号内的所有内容。 

Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性 

-----------Ctrl系列----------- 

Ctrl+K:将光标停留在变量上,按Ctrl+K键可以查找到下一个同样的变量 

Ctrl+Shift+K:和Ctrl+K查找的方向相反 

Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示) 

Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作) 

Ctrl+Q 定位到最后编辑的地方 

Ctrl+L 定位在某行 (对于程序超过100的人就有福音了) 

Ctrl+M 最大化当前的Edit或View (再按则反之) 

Ctrl+/ 注释当前行,再按则取消注释 

Ctrl+T 快速显示当前类的继承结构 

Ctrl+Shift-T: 打开类型(Open type)。如果你不是有意磨洋工,还是忘记通过源码树(source tree)打开的方式吧。 

Ctrl+O:在代码中打开类似大纲视图的小窗口 

Ctrl+鼠标停留:可以显示类和方法的源码 

Ctrl+H:打开搜索窗口 

Ctrl+/(小键盘) 折叠当前类中的所有代码 

Ctrl+×(小键盘) 展开当前类中的所有代码 

-----------Ctrl+Shift 系列----------- 

Ctrl+Shift+F 格式化当前代码 

Ctrl+Shift+X 把当前选中的文本全部变味小写 

Ctrl+Shift+Y 把当前选中的文本全部变为小写 

Ctrl+Shift+O:快速地导入import 

Ctrl+Shift+R:打开资源 open Resource 

-----------F快捷键 系列----------- 

F3:打开声明该引用的文件 

F4:打开类型层次结构 

F5:单步跳入 

F6:单步跳过 

F7:单步跳出 

F8:继续,如果后面没有断点,程序将运行完 

-----------行编辑用----------- 

Ctrl+D: 删除当前行 

Ctrl+Alt+↓ 复制当前行到下一行(复制增加) 

Ctrl+Alt+↑ 复制当前行到上一行(复制增加) 

Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) 

Alt+↑ 当前行和上面一行交互位置(同上) 

Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) 

Ctrl+Shift+Enter 在当前行插入空行(原理同上条) 

-----------不常用的----------- 

Alt+← 前一个编辑的页面 

Alt+→ 下一个编辑的页面(当然是针对上面那条来说了) 

Ctrl+Shift+S:保存全部 

Ctrl+W 关闭当前Editer 

Ctrl+Shift+F4 关闭所有打开的Editer 

Ctrl+Shift+G: 在workspace中搜索引用 

Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之) 

-----------不明白----------- 

Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了) 

Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查) 

四.    FAQ

1.     模拟器不能识别2011-09-15

         问题描述:

在启动模拟器时,出现不能识别vm(你的模拟器名字)的问题。

         解决方案:

一般是AVD路径的问题。

1) 查看下C:\Documents and Settings\zeping.zhou\.android\avd下存在该vm吗?

2) 可以试着添加环境变量ANDROID_SDK_HOME,路径是C:\Documents and Settings\zeping.zhou\.android\avd。重启eclipse。

 

2.     不能创建模拟器2011-09-15

         问题描述:

不能创建模拟器。

         解决方案:

1) 试着删除ANDROID_SDK_HOME这个环境变量。

2) 试着重装eclipse,以及重新覆盖avd文件到eclipse目录下。

3.     invalid command-line parameter 2011-09-15

         问题描述:

启动模拟器时出现“invalid command-line parameter”。

解决方案:

1,确认android sdk不是存放在带有空格的路径名(诸如program files)或是中文名路径上。

4.     Android模拟器运行很慢2011-09-15

         问题描述:

         Android模拟器运行很慢。

解决方案:

1)增加模拟器内存大小.http://blog.sina.com.cn/s/blog_5f30b9410100pd1k.html在模拟器保存的位置,例如:C:\Documents and Settings\android\.android\avd\android3.avd 找到.congfig.ini.设置 hw.ramSize=256 ;为一个更大的值。

 

2)具体位置为:设置 - 显示 - 关闭“自动旋转屏幕”的选项

3) 打开了模拟器后,就不要关闭,修改完代码直接run as或是debug as即可。