1.static 静态修饰符
1.被static修饰的变量是静态成员变量,可以类名访问,也可以对象访问
2.被static修饰的方法是静态方法,可以类名访问也以对象访问
3.同一个类中静态方法不能访问实例元素,this不能出现。
例如:
package GuanJianZi;
public class StaticGJZ {
//被static修饰的变量是静态成员变量
public static int id=1001;
//实例方法
public int age=18;
//被static修饰的方法是静态方法
public static void name(){
System.out.println("张三");
}
public static void name2(){
//同一个类中静态方法不能访问实例元素,this不能出现在静态方法中
//System.out.println("年龄=="+age);//错误
//System.out.println("年龄=="+this.id);//错误
}
}
package GuanJianZi;
public class TestMain {
public static void main(String[] args) {
StaticGJZ sgjz=new StaticGJZ();
//静态变量/静态方法可以类名访问,也可以对象访问
System.out.println(StaticGJZ.id);
System.out.println(sgjz.id);
StaticGJZ.name();
sgjz.name();
}
}
2.this当前类对象
1.出现在哪个类中就表示哪个类的对象
2.在当前类中的构造方法/实例方法中访问当前类中的变量和方法,可以省略
3.在当前类中的构造方法/实例方法中访问被隐藏的成员时不能省略
例如:
package GuanJianZi;
public class ThisGJZ {
//this 当前类对象,在当前类中的 构造方法/实例方法中访问当前类的变量和方法,可以省略
int id=1001;
static String name="张三";
public ThisGJZ(){
System.out.println("构造方法");
}
public void shili(){
System.out.println("实例方法");
}
public static void jingtai(){
System.out.println("静态方法");
}
public ThisGJZ(String name){
this.shili();
this.jingtai();
System.out.println("id=="+this.id);
System.out.println("name=="+this.name);
}
}
测试类
package GuanJianZi;
public class TestMain {
public static void main(String[] args) {
ThisGJZ tgjz=new ThisGJZ("zhansgan");
}
}
3.super父类的对象
1.出现在子类中的构造方法第一句时,super()父类无参数构造方法/super(参数)父类有参数构造方法。
2.出现在子类中的实例方法时,表示访问父类的变量/方法
3.访问隐藏的父类变量,super.变量名称,此时这个super表示父类的对象,一般指访问没有重写之前的父类方法,super.方法名称([参数]),此时这个super表示父类对象
例如:
package GuanJianZi;
public class SuperFuLei {
public SuperFuLei(){
System.out.println("父类无参数构造方法");
}
public SuperFuLei(String name){
System.out.println("父类有参数构造方法");
}
//父类变量
int id=1001;
static String name="zhangsan";
public void shili(){
System.out.println("父类实例方法");
}
}
package GuanJianZi;
public class SuperZiLei extends SuperFuLei{
public SuperZiLei(){
//super();//父类无参数构造方法
super("李四");//父类有参数构造方法
}
public void shili(){
System.out.println("重写父类方法");
}
public void zilei(){
//出现在子类实例方法时,表示访问父类的变量/方法
//super--表示父类的对象
//访问变量
System.out.println(super.id);
System.out.println(super.name);
//访问方法----一般指访问没有重写之前的父类方法
super.shili();
}
}
测试类
package GuanJianZi;
public class TestMain {
public static void main(String[] args) {
SuperZiLei szl=new SuperZiLei();
szl.zilei();
}
}
4.final 终极修饰符
1.被final修饰的类,不能被继承,没有子类
package GuanJianZi;
public final class FuLei {
}
package GuanJianZi;
public class ZiLei extends FuLei{
}
错误:The type ZiLei cannot subclass the final class FuLei
2. 被final修饰的变量,就是常量,不能被重新赋值
package GuanJianZi;
public class TestMain {
public static void main(String[] args) {
final String name="zhangsan";//局部变量
System.out.println("name=="+name);
//name="lisi";//错误:被final修饰的变量,就是常量,不能被重新赋值
System.out.println("name=="+name);
}
}
3.被final修饰的方法,不能被重写。
例如:
package GuanJianZi;
public class FuLei {
public final void shili(){
System.out.println("父类实例方法");
}
}
package GuanJianZi;
public class ZiLei extends FuLei{
public void shili(){
System.out.println("重写父类方法");
}
}
错误: