1.1.static 含义:静态的,被 static修饰的方法和属性只属于类不属于类的任何对象。
1.2.static 用法:
1.2.1.static 可以修饰【内部类】、方法和成员变量。
1.2.2.static【不可以修饰外部类】、【不可以修饰局部变量】(因为 static本身就是定义为类级别的,所以局部级别的变量是不可以用 static修饰的)。
2.1 final 含义:【只能赋值一次】的。
2.2.final 用法:
2.2.1.final 修饰属性,表示属性【只能赋值一次】,(1)基本类型:值不能被修改;(2)引用类型:引用不可以被修改。
2.2.2.final 修饰方法,表示方法不可以重写,但是可以被子类访问(如果方法不是 private 类型话)。
2.2.2.final 修饰类,表示类不可以被继承。
3.联合使用 static final
3.1.适用范围:
3.1.2.两者范围的交集,所以只能修饰:成员变量、方法、内部类。
3.2.含义:也是二者交集:
3.2.1.方法:属于类的方法且不可以被重写。
3.2.2.成员变量:属于类的变量且只能赋值一次。
3.2.3.内部类:属于外部类,且不能被继承
首先,澄清最关键的一点——匿名内部类虽然叫做匿名内部类,但是他的本质是一个匿名内部类的对象,是的,它的本质是对象(因为匿名内部类是new出来的,new出来的东西是个对象啊)!其次,匿名内部类在外部类的里面由上面可知,匿名内部类在外部类中的一个对象,其地位等同于一个成员变量更具体的讲,请看下面代码:
class Outer
{
Integer a=new Integer(123);//这是一个整型对象,一个外部类中的Integer类型的成员变量
new XXX(){/*内容我就不写了*/};//这是一个匿名内部类,本质是一个对象,它其实也是一个成员变量
}
我们来比较一下,
首先,一个类中只有三个部分:构造方法、成员方法、成员变量
上面的两个玩意肯定不是构造方法吧
也不是成员方法吧,匿名内部类不是一个方法啊,它虽然有{}但是它也不是一个方法,人家是用“;”结尾的
你现在看看
Integer a=new Integer(123);和 new XXX(){};这两个挺像吧
你再看看
new Integer(123)【注意没有前面的"Integer a ="】;和 new XXX(){};这两个是不是更像!
Integer a = new Integer(123);就是一个成员变量,匿名内部类和他类似吧
注意区别,人家Integer a=new Integer(123);是有名字的,叫做a
人家可以加static,加了静态后的东西是可以通过 类名.变量名(也叫字段 field)的形式调用
上面的Integer加静态后变成了 static Integer a = new Integer(123);
后面你就可以用 Outer.a 调用了
匿名内部类行吗?假设它可以,来,咱调用一次类名咱有,Outer,匿名内部类(对象)的名字呢?你别忘了你是匿名的,调用不了。所以,这就解释了匿名内部类为什么不能加静态
总结一下,
1,匿名内部类本质是定义在外部类中的一个对象,地位等同于外部类中的成员变量
2,它和一般的成员变量是不同的,它因为是匿名对象,没有名字,准确的讲,没有变量名
3,对于一般的成员变量,如果加了静态,就意味着可以在其他地方,不建立外部类的对象,通过 外部类名.成员变量名 的方式进行直接调用
4,匿名内部类(对象)不行,因为它没有成员变量名超级总结一下,匿名内部类不能加静态,归根到底就是因为:它是一个匿名成员变量。
android:required
android:required="true":表示需要设备具有某个功能。
如果设备没有该功能,则程序不工作。
android:required="false":表示希望设备,最好具有某个功能
设备即使没有该功能,程序也应该可以正常工作
为了程序工作的更好,最好具有该功能。
如果不指定,默认为true: