Java For Android常用知识总结1

instanceof

作用

用来校验对象的类型

实例

遍历界面布局中所有的子view,然后判断各个view的类型是Button还是TextView或者其它。

for (int i = 0; i < rootLayout.getChildCount(); i++) {
    View view = rootLayout.getChildAt(i);
    if (view instanceof Button) {
    //
    } else if (view instanceof TextView) {
    //
    }
}

Reflection反射

作用

调用那些未公开的方法,Android中某些类方法有”@hide”标记,无法直接调用, 但是我们应用中需要用到,这时候借助反射机制就很方便。

实例

在com.example.reflect包下新建MyReflectClass类:

public class MyReflectClass {

    public void show() {
        Log.d("xc show", MyReflectClass.class.getName() );
    }

    public String returnString() {
        return "a b c d";
    }

    private int calculateSquare(int n) {
        return n * n;
    }
}

然后在我们的类中(比如MainActivity)

    private void testReflect() {
        String className = "com.example.reflect.MyReflectClass";
        try {
            // 得到类
            Class myClass = Class.forName(className);

            // 得到构造函数
            Constructor[] constructors = myClass.getDeclaredConstructors();
            for (Constructor c : constructors) {
                Log.d("xc: constructor", c.getName());
            }

            // 得到所有此类中声明的成员变量(不包括继承的)
            Field[] fields = myClass.getDeclaredFields();
            for (Field f : fields) {
                Log.d("xc: field", f.getName());
            }

            // 得到所有此类中生命的方法(不包括继承的)
            Method[] methods = myClass.getDeclaredMethods();
            for (Method m : methods) {
                Log.d("xc: method", m.getName());
            }

            //调用第一个无参数和返回方法
            Method method1 = myClass.getDeclaredMethod("show");
            method1.invoke(myClass.newInstance());

            //调用第二个有返回方法
            Method method2 = myClass.getDeclaredMethod("returnString");
            Log.d("xc: method2", (String)method2.invoke(myClass.newInstance()));

            //调用第三个有参数有返回的私有方法
            Method method3 = myClass.getDeclaredMethod("calculateSquare", int.class);
            //设置允许访问后才会调用执行成功
            method3.setAccessible(true);
            int method3Result = (int)method3.invoke(myClass.newInstance(), 100);
            Log.d("xc : method3", Integer.toString(method3Result));


        } catch (Exception e) {

        }

    }

inner class内部类

作用

方便开发,简化代码

实例

匿名内部类

可用于控件事件的监听,如下:

view.setOnClickListener(new View.OnClickListener(){

     @Override
     public void onClick(View v) {

     }
});

同时用于多线程,比如新建线程,如下:

new Thread() {
    @Override
    public void run() {
    //
    }
}.start();

静态内部类

常用的AlertDialog.Builder,Builder是AlertDialog类中的静态类。

public class AlertDialog extends Dialog implements DialogInterface {
    ...........
    public static class Builder {
        private final AlertController.AlertParams P;
        private int mTheme;
        ......
    }    

    ......
}

我们很方便就可以创建Dialog,如下

AlertDialog.Builder builder = new AlertDialog.Builder(this);

你可能感兴趣的:(Java For Android常用知识总结1)