其实java中的常用关键字并不多,总共加起来也没有多少个,具体见如下这张表:
private,protect,public
在java中,在类,类的属性和累的方法前面加上一个修饰符来对其进行访问权限上的控制。除了使用private,protect,public之外,
还有一种是default情况,即使不加任何权限修饰符.关于这四中情况的权限差别见下表:
注意:default不是修饰符,他表示一种不加任何修饰符的情况。
这里,主要看一看static,instanceof,final关键字的含义和如何应用。
static关键字
static关键字可以修饰方法,属性,*块和内部类。使用static关键字时可以理解这些成员与类相关,通过 “类名.成员”形式访问,没有static修饰的成员可以理解为与对象相关,可以通过“对象.成员”的方式访问。
1.static修饰方法
最典型的是修饰main方法,main()是java应用程序的入口,之所以用static修饰main方法,原因是解析器在调用该方法时,还没来及创建当前类对象。
注意:static定义的方法,不能调用没有static修饰的方法和属性,也不能使用this和super关键字。
2.static修饰属性
当static修饰属性时,调用方法除与修饰方法的调用类似外,还有一个特性,就是这个属性被多个当前类对象共享,一个对象修改类静态属性值时,会影响其他对象。
3.static修饰*块
*块是用{}括起来代码段,*块中的代码在构造方法之前执行,因此可以将一部分初始化代码放在*块中执行。
当*块用static修饰时,*块就成了静态*块,通常用于初始化静态变量。静态*块与类相关,因此只要类被加载,即使没有创建对象,*块也被执行,且只执行一次。示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class Test {
private
static int
i;
static {
i= 0 ;
System.out.println( "*块被执行!" );
i++;
}
public
void show(){
System.out.println( "i的值:" +i);
}
public
static void main(String[] args) {
// TODO Auto-generated method stub
Test t1 = new
Test();
t1.show();
Test t2 = new
Test();
t2.show();
}
} |
结果:
*块被执行!
i的值:1
i的值:1
可见,尽管创建了t1,t2两个对象,*块还是只被执行了一次。
final关键字
final可以修饰类,成员变量和方法。
1. final修饰类时,表示该类不能被继承,例如String,Math等类。如果你不希望自己的类别其他类继承,就用finalo修饰。
2. final修饰成员变量,表示该成员变量是一个常量,在定义时必须赋值。
public class Demo{ public static void main(String []args){ final Person p = new Person("adu"); p.setName("xiaochuan"); System.out.println("the person‘s name is :"+p.getName()); } }
3. final修饰方法,表示该方法不能在子类重写。
如果final修饰的是一个简单类型的的常量,则该变量一旦被初始化后,就不能修改。
如果修饰的是引用型变量,那么该变量的引用不可以改变,但可以通过该引用修改引用对象的属性值。
instanceof关键字
instanceof是一个二元操作数,类似于 ==, > , <等,用于判断一个对象是否为某个类或接口类型。由于java语言的多态性,是的一个子类的实例赋值给其父类的变量,因此可以用instanceof关键字来判断该变量的原有类型,返回true或false.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
/* * 定义父类
*/
public class Animal {
} /* * 定义Animal子类Dog
*/
public
class Dog extends
Animal{
public
void f1(){
System.out.println( "汪 汪" );
}
} /* * 定义Animal子类Sheep
*/
public
class Sheep extends
Animal{
public
void f2(){
System.out.println( "咩咩" );
}
} /* * 定义测试类Test
*
*/
public
class Test {
public
static void main(String[] args) {
/*利用累的多态show方法的参数,提高参数传递的额灵活性*/
public
static void show(Animal a){
if (a instanceof
Dog){
Dog dog = (Dog)a;
dog.f1();
} else
if (a instanceof
Sheep){
Sheep sheep = (Sheep)a;
sheep.f2();
}
}
} |
主要在变量使用多态时,可以使用instanceof来判断,执行不同的操作。