class="p0">常用关键字
?
一、访问修饰符
访问修饰符可以修饰类?方法?属性等。。。java中的访问修饰符共4种:分别是:public(公有的)、protected(受保护的)、默认的、private(私有的)。
4中访问修饰符的可见范围不同:
被public修饰的类、方法、属性等,在同一个项目下的所有包中的所有类都可以使用;
被protected修饰的类、方法、属性等,在同一个包内可以被任意调用,同时也可以在子类中被调用。
默认的,在同一个包内可以被任意调用,但与protected修饰符不同,默认的不可以在子类中被调用。
被private修饰的方法、属性等,意义为“私有的”,只能在同一个类中被调用。
在使用时,直接加在被修饰的类、方法或属性名前即可,如:
?
public Student() { this(null, 0); }
?
?
二、this、super、final
?
this:
?
1、在调用属性或者方法时,可代指本类中的对象。格式为:this.属性名或方法名;
?
2、在构造方法中调用本类的某一个构造方法(参数数量和顺序必须对应)格式:this(参数);
举例如下:
?
?
public class Student { //一个“学生”类 //定义属性 public String name; private int num; //创建一个构造方法,在该构造方法中调用本类的另一个构造方法时,运用到this关键字。 public Student() { this(null, 0); //调用的是含两个参数的构造方法。 } //含一个name参数的构造方法 public Student(String name) { this(name, 0); } //含两个name和num参数的构造方法,无参的构造方法调用的既是该构造方法。 public Student(String name, int num) { //在这里this表示本类的对象,this.name即表示该对象的name属性。 this.name = name; this.num = num; } public void test() { System.out.println("父类的方法!!"); } }
?
?
super:
?
1、在子类中有时需要调用父类的方法,需要用到super。此时super代指父类的一个对象。格式:super.方法名;
?
2、在子类的构造方法中调用父类的构造方法。必须使用super关键字,同样,参数的数量和顺序必须对应。格式:super(参数);
举例如下:
?
?
public class UNStudent extends Student{ //创建一个“大学生”子类继承“学生”父类 //创建一个构造方法 public UNStudent(){ super(null); //在该子类的构造方法中,使用super关键字 //调用父类的带有一个String类型参数的构造方法。 } public void change(){ //使用this关键字调用本类(子类)中的test方法。 this.test(); //使用super关键字调用父类中的test方法。该super代指父类的一个对象 super.test(); } //重写时不能减小方法的可见范围 public void test() { System.out.println("子类的方法!!"); } }
?
?
final:
?
final的中文意思为最后的,最终的;决定性的;不可更改的。类似于C语言中的const关键字,它限定一个变量不允许被改变。
?
final可以修饰类,所修饰的类可理解为“最后的类”,不能被继承。final类与普通类的使用几乎没有差别,只是它失去了被继承的特性。使用时要慎重。
?
也可修饰属性,所修饰的属性可理解为“不可更改的属性”,为常量。当在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化其值便不可变,其初始化可以在两个地方,一是在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,不能同时既在定义时给了值,又在构造函数中给另外的值。
还可修饰方法,所修饰的方法可理解为“最终的方法”,不可被重写。将方法声明为final,就说明这个方法提供的功能已经满足要求,不需要进行扩展,并且也不允许任何从此类继承的类来重写这个方法,但是继承仍然可以继承这个方法,可以直接调用该方法。
?
三、static(静态的)
static除了可以修饰类,方法和属性外,还可以直接修饰代码块。如:
?
?
static{ System.out.println("A"); }
?
?
?
1、static修饰属性时,属性为静态属性,又称为“类属性”,可以不创建类的对象而直接调用,也表示该类所有的对象共享的一个属性,因此,当某一个对象的static属性值被改变后这个类所有对象的static属性值都会被改变。
?
举例如下:将上述代码中父类的name属性定义为static
在主函数中调用时:
?
?
?
Student stu1 = new Student(); stu1.name = "孙茜";//等价于Student.name = "孙茜" UNStudent stu2 = new UNStudent(); stu2.name = "张晓玥";//等价于Student.name = "张晓玥"
?
当再次输出stu1的name时,显示的仍为“张晓玥”,因为当某一个对象的static属性值被改变后这个类所有对象的static属性值都会被改变。
?
2、static修饰方法,在调用时只跟类名有关。但在static方法中,则只能直接调用static属性,非static属性,就必须通过创建对象来调用。
?
??? 3、static修饰代码块,在主函数执行之前就会执行的代码。静态代码块在被装载进虚拟机的时候就被执行,一般的静态代码块被用来初始化静态属性。?
?
?
?
?
?
?
<!--EndFragment-->
?