前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java系列:关于关键字this和static

Java系列:关于关键字this和static

作者头像
小Bob来啦
发布2022-01-17 20:36:16
1950
发布2022-01-17 20:36:16
举报
文章被收录于专栏:用户8057608的专栏

在C语言中,我们经常会遇到指针,也常常被指针所困扰,毕竟它经常惹程序员头疼。那么在Java中我们便方便多了,只是因为有了this.

那么this到底能给我们带来多大的便利呢?接下来让我们一起康康。

static作为静态的单词,在Java中又有着怎样的妙用呢?

这里主要给大家讲解this的调用方法和注意事项以及static的妙用。

一、This调用方法

关于this,首先它是一个关键字,是不能当作变量名来使用的;在我们的使用过程中,this一般代表当前对象的一个引用,那么何为当前对象呢?当前变量指的是我们当前在调用的类中方法或属性的对象。

To:this.属性名表示访问本对象自己的属性;this.方法名表示调用当前对象自己的方法。

在上面我们也看到this的两种简单用法,即访问本类属性变量和调用本类方法。

1.访问本类属性

当对象的一个属性被方法或者构造器的参数屏蔽时,我们就会用到this.属性来进行调用。

实例如下:

代码语言:javascript
复制
package self6;

public class Person {
  String name;
  int age;

  public Person(String name,int age ) {
    this.name =name;
    this.age=age;
  }

  public static void main(String[] args) {
    Person p1 = new Person("bob",1);
    Person p2 = new Person("xiaobob",11);
    System.out.println("输出name:"+p1.name+"和年龄"+p1.age);
    System.out.println("输出name:"+p2.name+"和年龄"+p2.age);
  }
}

运行结果如下:

2.调用本类方法

这里我们简单将调用构造函数和方法放在了一起,但是我们要知道的是构造函数并不是方法!

使用this关键字调用本类的构造函数需要注意的有:this关键字可以调用类的重载构造函数;this关键字必须位于构造函数的第一行。

调用构造函数实例如下:

代码语言:javascript
复制
package self6;

public class Person{
  String name;
  int age;

  public Person(int age){
    this.age=age;
  }
  public Person(String name){
    this(1);
    this.name=name;
  }
  public static void main(String[] args){
    Person p1 = new Person("bob");
    Person p2 = new Person("bob1");
    System.out.println("输出name:"+p1.name+"和年龄:"+p1.age);
    System.out.println("输出name:"+p2.name+"和年龄:"+p2.age);
  }
}

运行结果:

调用本类方法实例如下:

代码语言:javascript
复制
public class Student{
  public void eat(){
    System.out.println("执行eat");
  }
  public void talk(){
    this.eat():
    System.out.println("执行talk");
  }
}

二、注意事项

  1. this关键字不能用于静态方法和静态块
  2. 我们知道main方法也是静态的,所以在main方法中是不能有this的

三、static关键字

按照字面意思,static是静态的意思,在Java中,我们最常用的便是用static修饰变量和方法,下面将会讲到与之相关的用法:

  1. 修饰变量也称为修饰静态变量
  2. 静态变量被所有的对象所共享,在内存中只有一个副本
  3. 当且仅当在类初次加载时会被初始化
  4. 静态变量属于类
  5. 通过类名就可以调用静态变量
  6. 也可以通过对象名.静态变量调用(建议使用)

说到静态变量,我们在Java中也会经常说到实例变量,那么它们又会有怎样的区别呢?

区别如下:

  • 静态变量属于类,该类不产生对象,通过类名就可以调用静态变量
  • 实例变量属于该类的对象,必须产生该类对象,才能调用实例变量
  • 静态变量随着类的加载存在于方法区中
  • 实例变量随着对象的建立存在于堆内存中
  • 静态变量在程序开始时创建,在程序结束时销毁
  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁

说完静态变量,这里我们来了解一下静态方法,我们将用static修饰的方法称之为静态方法,也叫类方法。在静态方法中我们是不能访问类的非静态成员变量和非静态的成员方法;而且在静态方法中是不能出现this关键字的;使用的两种方法:1.通过类名调用;2.通过对象名.静态方法调用。

静态块:

静态方法在类加载时执行,并且只执行一次;静态代码块在类中可以出现多个。

关于静态块、匿名构造函数和构造函数在Java中的执行顺序我们可以用程序来演示出来:‍

代码语言:javascript
复制
package self7;

public class staticdend {
  int age;
  String name;
  
  public staticdend() {
    age=10;
    name="Bob";
    System.out.println("这是构造函数");
  }
  static {
    System.out.println("这是静态块");
  }
  {
    System.out.println("这是匿名构造函数");
  }
  public static class Test{
    public static void main(String[] args)
    {
      staticdend p1 = new staticdend();
      staticdend p2 = new staticdend();
      staticdend p3 = new staticdend();
      staticdend p4 = new staticdend();
    }
  }
}

运行结果:

继续干Java~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员Bob 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档