Java基础--this、final关键字

目录

一、this关键字

1、定义:

2、用法

        注意:

        注意:

二、final关键字

1、final修饰变量

       全局变量和局部变量

举例:

       基本数据类型和引用数据类型

举例:

 2、final修饰方法

3、final修饰类


一、this关键字

1、定义:

        this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针

2、用法

(1)this修饰属性,当前对象中的属性

(2)this修饰方法名,当前对象的方法

(3)this()
       

        注意:

1、只能在构造方法中通过this来调用其他构造方法,普通方法中不能使用。

2、不能通过this递归调用构造方法,即不能在一个构造方法中通过this直接或间接调用该构造方法本身。

3、通过this调用其他构造方法必须放在构造方法的第一行中执行。

4、由于super调用父类的构造函数也必须放在构造方法的第一行中执行,因此,通过this和super调用构造方法不能同时出现一个构造方法中。也不能在一个构造方法中多次调用不同的构造方法。

如果两个构造方法通过this互相调用,就会出现循环。举例:

public class Test {
    public static void main(String[] args){
        Student student1 = new Student();
        student.run("11111");
        
        Student student2 = new Student();
        student.run("22222");
    }
}
public class Student {
    public String name;
    public void run(String aaa){
        this.name = aaa;       //=赋值操作,前为变量后为值
    }
}

        

        注意:

static修饰的代码当中不能出现this关键字,因为类是构建对象的模板,没有对象。而this可以调用static修饰的方法,static修饰的代码被所有对象共享。

public class Student {
    public String name;
    public static void run(String name){
        this.name = name;       //这里出现报错,static中出现this
    }
    public void aaa(){
        this.run("1111");       //this可以调用static修饰的方法
    }
}

 

使用this方法处理变量名的歧义性

        在Java中,不允许在范围(类范围或方法范围)内声明两个或多个具有相同名称的变量。但是,实例变量和参数可能具有相同的名称。

class M {
    // 实例变量
    int age;

    // 参数
    M(int age){
        age = age;
    }
}

        在上面的程序中,实例变量和参数具有相同的名称:age。在这里,由于名称不明确,Java编译器感到困惑。在这种情况下,我们使用this关键字。

 

二、final关键字

        在Java中,final关键字用于表示常量。它可以与变量,方法和类一起使用。下面就从这三个方面进行讲解

1、final修饰变量
       全局变量和局部变量

         对于全局和局部变量来说:成员变量在声明时必须被赋值,局部变量声明时可以不赋值,当局部变量被第一次赋值以后,不能二次赋值

举例:
public class Student {
    
    public final String name;    //这里报错,全局变量必须要赋初始值

    public void inf(){
        public final int age;     //可以不赋值,但第一次赋值后不可更改
    }
}
class Main {
  public static void main(String[] args) {

    //创建一个final变量
    final int AGE = 32;

    //尝试更改final变量
    AGE = 45;
    System.out.println("Age: " + AGE);
  }
}
       基本数据类型和引用数据类型

        对于基本数据类型所定义的变量和引用类型所定义的变量来说:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

举例:
public class A{
    final int[] arr1 = new int[]{1,2,3};
    final int[] arr2 = new int[]{2,3,4};
    int a = 10;
    public void run(){
        a = 11;     //这里报错,final修饰后基本数据类型不能被赋值第二次    
    }
    public void change(){
        arr1 = arr2;    //这里报错,final修饰后引用类型的地址不能改变    
    }
    public void change1(){
        arr1[2]=10;     //这里没有问题,没有改变地址,改变的是地址所在对象的值    
    }
}

 2、final修饰方法

final修饰方法不能被重写


class Person{
    String name;
    int age;
    final void show(){
        System.out.println("person...");
    }
}

class Student extends Person{       //报错,final修饰的方法不能被覆写
    void show(){
    System.out.println("student...");
    }
}

注:类的private方法会隐式地被指定为final方法。 

3、final修饰类

final修饰的类不能被继承

//final修饰的类不可以被继承
final class Person
{
    String name;
    int age;
}
 
class Student extends Person{        //这里报错,子类无法继承被final修饰的父类

}
 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值