java中关于this、static、final、super关键词的使用

目录

一、this

1.介绍

2.格式

3.实际使用

4.例子

二、static

1.介绍

2.名称

3.实际使用

4.例子

 三、final

1.介绍

2.使用地方

3.例子

四、super

1.介绍

2.格式

3.例子


一、this

1.介绍

在类定义的方法中有时需要引用正在使用该方法的对象时,可以使用关键词this表示该对象。

2.格式

this.变量名
this.方法名(参数列表)

3.实际使用

  (1).在同一方法体内,定义两个重名的局部变量是不合法的。但局部变量,包括方法接受的输入参数,都可以与类的成员变量同名。这时就可以用this关键词直接引用对象,来区分局部变量和全局变量

  (2).用于构造方法中。通过this可以调用类中的成员方法,并且this可以实现构造方法调用其他同名的构造方法。

4.例子

  (1).区分局部变量和全局变量

public class javaTest{
    String a;
    char b;
    int c;

    public void setTest1(String aa,char bb,int cc){
        this.a=aa;    //this可以删除,因为全局变量名与局部变量名不同
        this.b=bb;
        this.c=cc;
    }
    public void setTest2(String aa,char bb,int cc){
        a=aa;    //与setTest1进行对比
        b=bb;
        c=cc;
    }
    public void setTest3(String a,char b,int c){
        this.a=a;    //this不可以删除,因为全局变量名与局部变量名相同
        this.b=b;
        this.c=c;
    }
    public static void main(String args[]){
        javaTest s=new javaTest();
        s.setTest1("hello",'x',10);
        System.out.println("执行setTest1方法后 a="+s.a+" b="+s.b+" c="+s.c);

        s.setTest2("hello",'Y',10);
        System.out.println("执行setTest2方法后 a="+s.a+" b="+s.b+" c="+s.c);

        s.setTest3("hello",'Z',10);
        System.out.println("执行setTest3方法后 a="+s.a+" b="+s.b+" c="+s.c);
    }
}

   输出结果:

  (2).构造方法

package Study;

public class javaTest{
    String a;
    int b;

    public javaTest(){
        a="张三";
        b=14;
    }
    public javaTest(String a,int b){
        this();   //通过this调用无参构造方法,即调用上面的方法
        System.out.println("a="+this.a+" b="+this.b);
    }
    public javaTest(int b){
        this.b=b;
        System.out.println("b="+this.b);
    }
    public static void main(String args[]){
        javaTest s=new javaTest("李四",30);  //调用第二个构造方法
        javaTest x=new javaTest(30);   //调用的第三个构造方法
    }
}

输出结果

二、static

1.介绍

在一般情况下,访问类的成员必须通过实例化该类进行访问。但有时候希望定义一个完全独立于该类的任何对象,这时只需要在类成员的声明前加个static即可。

2.名称

加了关键词static的成员具有静态属性

static+成员变量=静态成员变量(类变量)

static+成员方法=静态成员方法(类方法)

3.实际使用

static不用来修饰类,只是修饰类的成员,它在该类所有实例之间是共享的。

对于public类型的static成员,可以在类外直接用类名调用而不需要初始化

4.类方法的两原则

(1).类方法不能访问所属类的非静态变量和方法,只能访问方法体内的局部变量、参数和静态变量

(2).类方法中不能出现this和super关键字。

4.例子

程序1

public class javaTest{
    static String name="王五";    //静态成员变量
    public static String setName(String n){   //静态成员方法
        name=n;
        return name;
    }
}

程序2(通过程序2调用程序1)

public class javaTest2 {
    String testNmae="张三";
    public static void main(String args[]){
        javaTest2 s=new javaTest2();
        System.out.println("未调用前testName的值:"+s.testNmae);
        s.testNmae=javaTest.name;      //类变量的调用(这时类外不需要初始化)
        System.out.println("调用类变量后的testName的值:"+s.testNmae);
        s.testNmae=javaTest.setName("李四");   //类方法的调用
        System.out.println("调用类方法后的testName的值:"+s.testNmae);
    }
}

输出结果

 三、final

1.介绍

当final修饰基本数据类型时,该变量就成为了常量,值无法改变;当final修饰引用数据类型时,该变量的值不能改变,即值中存储的对象内存地址值不变,该变量不能再去指向别的对象,但对象内的成员可以改变

2.使用地方

可以用来修饰变量、方法和类

3.例子

程序1

public class javaTest{
    static String name="王五";    //静态成员变量
    public static String setName(String n){   //静态成员方法
        name=n;
        return name;
    }
}

程序2

public class javaTest1{
    final static int number=100;

    public static void main(String args[]){
        //下列语句删除注释后发生编译错误,final修饰的变量number无法再次赋值
        //javaTest1.number=200;

        final javaTest s1=new javaTest();      //实例化程序1
        javaTest1 s2=new javaTest1();

        //下列语句删除注释后发生编译错误,final修饰的变量s1无法再次赋值 
        //s1=s2;
    }
}

四、super

1.介绍

super关键词表示对某个类的父类的引用。一般而言,super有两种通用形式:

(1).用来访问被子类的成员隐藏的父类成员

(2).可以调用父类的构造函数

如子类和父类有同名的成员变量或方法,可以使用super关键词来引用父类的成员。

2.格式

super.成员变量名
super.成员方法名

3.例子

程序1

public class javaTest{
    String name;
    char sex;
    int age;

    public String getName(){
        return name;
    }
    public char getSex(){
        return sex;
    }
    public int getAge(){
        return age;
    }
}

程序2

public class javaTest2 extends javaTest {
    String studentID;
    String major;
    String name;   //定义一个与父类成员同名的变量name
    //定义一个和父类成员同名的成员方法getName()
    public String getName(){
        return "王五";
    }
    public String getName2(){
        super.name="张三";   //获得父类被隐藏的成员变量name
        return super.getName();  //调用父类被隐藏的成员方法getName()
    }
    public String getMajor(){
        return major;
    }
    public String getStudentID(){
        return studentID;
    }
}

程序3

public class javaTest3 {
    public static void main(String[] args){
        javaTest2 s1=new javaTest2();
        s1.name="赵六";
        System.out.println("学生姓名是:"+s1.name);
        System.out.println("学生姓名是:"+s1.getName());
        System.out.println("学生姓名是:"+s1.getName2());
    }
}

程序2继续程序1,然后程序3来调用程序1,2中的成员变量和方法

输出结果

 

猜你喜欢

转载自blog.csdn.net/weixin_47406082/article/details/123654259