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);