Java初阶之this和static属性

目录

前言

一、类和对象

二、this关键字

1.修饰属性

2.修饰方法

3.表示当前对象的引用

四、static关键字

总结


前言

在Java初阶之类和构造方法中的学习中,我通过总结以及查阅资料,对以下问题有了更深一层的理解。

  1. 类的作用是什么?(它存储的到底是什么)
  2. 类中内存区域划分为哪几部分?
  3. this关键字用来修饰和表示什么?
  4. this关键字修饰的方法有哪几种?
  5. static关键字用来修饰什么属性?

如果你在Java初阶之类和构造方法中,也想对这些问题有一个更深的理解,请阅读这篇文章,或许会对你有所启发。

一、类和对象

上篇我们说到了类和对象,这篇我们对类和对象再进行巩固加延伸,类是用class关键字定义的,它的作用主要是用来引用数据类型的,其实类中存储的就是一块堆内存的地址,我们将类中内存区域划分为两部分,栈和堆,栈中存储着方法的临时变量,也就是形参和局部变量,堆中存储着关键字new出来的对象,new出了的对象可是实实在在存在的实体,下面我们来声明一个Student。

代码展示:

class Student{
    public String name;
    public int age;
    public void fun(){}
}

在代码中所展示的这个类是抽象概念,没有实体,类本来就是一个蓝图,模板,规定了该类的所有对象都应该具备的属性,即方法。当使用类来产生具体的对象时,才会开辟内存空间。通常我们会使用关键字new用来产生一个具体的对象,此时这个对象才是实实在在的实体,用下述代码来表现关键字new的作用。

代码展示:

public class Student{
    private String name;
    private int age;
    
    public static void main(String[] args) {
        Student stu=new Student();
        stu.name="紫萱";
        stu.age=20;
        stu.fun();
    }
    private void fun() {
    }
}

在Student stu =new Student()这串代码所示,其中,我们将stu称为Student对象的引用,它的作用是保持了一块堆内存的地址,而new出来的Student就是Studet类的构造方法,它是产生对象时自动调用的。那么我们如何得知到底产生几个对象,其实方法很简单,就看new了几次,简单点说,就是看new出现了几次,每当出现关键字new,就意味着产生了新对象,在堆中开辟了新的空间,我们提到引用时,就不得不提到如何得知一个引用修改的变量对其他引用是否可见,其实是看这个引用和其他引用是否指向同一块地址,简而言之,就是看要比较的引用指向的对象是不是同一个。

二、this关键字

1.修饰属性

this关键字用来修饰属性,表示调用类中的成员变量,一般代码中,调用代码时,编译器要从该位置开始查找最接近对象的属性在哪,这种查找方式使用的就是程序的就近匹配原则,编译器会从调用代码处的最近位置查找有无匹配的变量或者方法,若找到直接使用最近的变量或方法,用下述代码展示Java的就近匹配原则。

代码展示:

public class Student{
    public String name;
    public int age;
    public String sex;
    public Student(String name,int age){
        name=name;
        age=age;
    }    
}

对于Java编译器而言,当执行name=name时,就会查找最接近的name属性在哪,找到就直接调用,构造方法的形参和类中的成员变量都叫name。但是形参name距离调用处最近,会优先被编译器找到并使用。形参其实是自己调用自己,和类中成员变量name没关系!

但是若用this调用属性时,就可以直接从类中寻找同名的成员变量,this属性名称的作用就是直接从类中寻找成员变量,下述代码展示的便是this调用属性。

代码展示:

public class Student{
    public String name;
    public int age;
    public String sex;
    public Student(String name,int age){
//打破就近匹配原则,直接从类中寻找叫name的成员变量
        this.name=name;
        this.age=age;
    }    
}

2.修饰方法

(1)this修饰普通的成员方法

代码展示:

public class Student{
    public String name;
    public int age;
    public String sex;
    public Student(String name,int age,String sex){
        this.name=name;
        this.age=age;
        this.sex=sex;
    }
    public void fun(){
        System.out.println();
        this.show();
    }
    public void show(){
        System.out.println("show成员方法");
    }
}

当this修饰普通的成员方法时,this可写可不写,但是推荐大家写上,尤其在之后有继承和多态之后,this.方法名称明确表示调用的是当前类的成员方法。

(2)this修饰构造方法

语法this(构造方法的参数)千万记住没有“.”,加“.”表示调用的类中的构造方法,不加“.”只使用this关键字,来表示构造方法的互相调用过程

代码展示:

public class Student{
    public String name;
    public int age;
    public String sex;
   
    public Student(){
        System.out.println("**************");
    }
    public Student(String name,int age){
        //调用无参构造
        this();
        this.name=name;
        this.age=age;
    }
    public Student(String name,int age,String sex){
        //调用两个参数的有参构造
        this(name,age);
        this.sex=sex;
    }
}

从上述代码中我们还可以得知,this调用构造方法必须放在当前构造方法的首行调用,那是因为在一个构造方法中去调用另一个构造方法,希望借助已经定义好的构造方法帮助我们赋值实现初始化工作,这是由于逻辑上的先后顺序,先调用已有方法再调用自己的操作。值得我们注意的是,对构造方法的调用不能成“环”,必须线性调用,若是调用成环,则会无限循环

3.表示当前对象的引用

当前是通过哪个对象调用的属性或者方法,this就指代谁

代码展示:

public class Student{
    public String name;
    public int age;
    public String sex;
 
    public void show(){
        System.out.println(this);
    }

    public static void main(String[] args) {
        Student stu=new Student();
        System.out.println(stu);
        stu.show();
        System.out.println("-------------");
        Student stu1=new Student();
        System.out.println(stu1);
        stu1.show();
        System.out.println("-------------");
        Student stu2=new Student();
        System.out.println(stu2);
        stu2.show();
    }
}

四、static关键字

无论static修饰的是什么,看见static,和对象无关,属于类固有的作用域。static不能直接访问类中的成员域,包括成员属性和成员方法,只能修饰类中的属性,称之为类的静态属性,也叫做类属性,和具体的对象无关,绑定在类上,存储在JVM的方法区,static修饰的属性因为保存在方法区,所有类中的对象,即常量和静态变量,共享同一个方法区,直接使用类名称来访问静态变量,不推荐使用某个对象来访问。

总结

以上就是今天所讲内容,本文简单的介绍了this关键字和static关键字,若在后续过程中,学习到更多的相关知识,也会进行补充,希望大家都能熟练掌握本篇内容!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值