JavaSE - 关键字

一、this关键字

1.this表示调用本类属性

只要在类中访问类的属性,一定要加上this关键字。

// this.name 和 this.age 明确表示不会就近取用,而是找类中属性
class Person{
    private String name;
    private int age;
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    public void getPersonInfo(){
        System.out.println("姓名为" + name + "," + "年龄为" + age);
    }
}
public class Test1{
    public static void main(String[] args){
        Person per1 = new Person("张三", 20);
        per1.getPersonInfo();
    }
}

输出结果为:
姓名为张三,年龄为20

2.this表示调用本类方法

(1)调用普通方法 this.方法名( 参数 )

当有类的继承关系时,表示本类方法一定要加上 this 关键字

(2)调用构造方法 this( 参数 )

  • this 调用构造方法必须放在构造方法首行
  • this 调用构造方法不允许成环

3.this表示当前对象

this 表示当前调用该方法的对象(per1里存的就是地址)

 

二、static 关键字

1.static修饰变量 - 类属性(静态属性)

  • static属性称为类属性,保存在全局数据区中(方法区 - 所有对象共享区域),通过类名调用,与对象实例化无关。
  • 一旦其中一个对象为static属性赋值,则其余对象也共享该值。描述共享属性使用static修饰属性
  • static一般用public修饰
  • 调用:类名称 . 属性名

2.static修饰方法 - 类方法(静态方法)

  • 通过类名调用,与对象实例化无关。常见于工具类方法
  • static 不能用于方法中,即局部变量不能用static修饰
  • static 和 private 均不能用于外部类,但可以修饰内部类

 

三、super关键字

1.super用于方法

(1)用于构造方法

表示调用父类的构造方法,super( 参数列表 )

  • 当子类调用父类的无参构造时,super( ) 可写可不写,表示调用父类的无参构造
  • 当子类调用父类的有参构造时,super( 参数列表 ) 必须要写,告诉编译器调用的是哪个有参构造

子类构造方法中调用父类构造方法,必须是第一行语句。所以 this( ) 和 super( ) 不能同时使用。

(2)用于普通方法

super . 方法名( 参数列表 )

用于在子类中明确调用父类被覆写的方法

2.super用于属性(了解)

super . 属性名 - 表示调用父类被覆写的属性(即权限不是 private 的属性)

因为属性一般都被封装,没有被覆写的概念,一般都是通过 getter 和 setter 取得和设置属性内容。

3.this 与 super 的区别

区别thissuper
概念上访问本类中的属性和方法由子类访问父类中的属性和方法
查找范围先查找本类,如果本类没有就调用父类的不查找子类,直接调用父类的
特殊表示当前对象

 

 

 

 

 

 

四、final关键字 - 终结器

1.final修饰类(String类以及8大基本数据类型的包装类)

当一个类被final修饰,表示该类不能拥有子类(即该类不允许被extends继承)

一旦一个类被final修饰,该类的所有方法都会默认加上final(成员变量不会加上final)

2.final修饰方法

当一个方法被final修饰,明确表示该方法不允许被覆写

当一个方法被private修饰后,相当于加了一个final关键字

3.final修饰属性 - 常量

(1)final修饰普通数据类型的成员变量(主要用途)

被final修饰的成员变量必须在声明时初始化,并且初始化后值无法被修改

没有在声明时初始化,可以在构造方法或构造块中初始化。

  • final 变量 = 常量(值不能改,每个对象都有自己的final变量,在对象产生时初始化,存放在堆中)
  • static final 变量 = 全局常量(所有对象共享此变量,并且在类加载时初始化,效率较高,通过类名调用,存放在全局区)

全局常量命名规范:多个单词全大写,单词间 _ 分隔

// 两种初始化全局常量的方法如下:
class Test{
    public final int = 5;
    public static final int B = 10; //全局常量
    public static final int C;
    static{
        C = 16;
    }
}

(2)final修饰引用数据类型的变量值不能改,类型也不能改

// 如下,a的值可以改,但t的值不可以改
class Test{
    public int a = 5;
}
public class Work{
    public static void main(String[] args){
        final Test t = new Test();
        t.a = 10;
        System.out.println(t.a);
    }
}

输出结果为:
10

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值