前言

今天给大家总结介绍一下Java类中this关键字和static关键字的用法。

this关键字用法:

  • this.属性可以调用类中的成员变量
  • this()可以调用类中的构造方法

1:修饰属性,表示调用类中的成员变量。

代码示例:

public class Student {

    public String name;
    public int age;
    public String school;

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

因为程序的就近匹配原则,编译器会从调用代码处的最近位置查找有无匹配的变量或者方法,若找到直接使用最近的变量或方法。所以如果上述代码中的带参构造方法不使用this的话我们在使用该构造方法时会遇到无法赋值的问题。

2:this修饰方法

this可用于构造函数之间的相互调用,可以减少构造函数代码的耦合性,使代码看起来更加整洁(不写重复代码很重要)。

未使用this前:

public class Student {

    public String name;
    public int age;
    public String school;

    public Student() {
    }

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

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

}

使用this后:

public class Student {

    public String name;
    public int age;
    public String school;

    public Student() {
    }

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

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

}

PS:

  • 1.this调用构造方法必须放在当前构造方法的首行调用,否则会报错。
  • 2.对构造方法的调用不能成"环”必须线性调用,否则会陷入调用死循环。

3:this表示当前对象的引用

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

代码示例:

public class Student {

    public String name;
    public int age;
    public String school;

    public void show(){
        System.out.println(this);
    }

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

输出结果:

static关键字用法:

在Java的类中,若static修饰类中属性,称之为类的静态属性/类属性,它和具体的对象无关,该属性存储在JVM的方法区(不同于堆区和栈区的另一个区域),类中的所有对象共享同一个方法区(类中的常量和静态变量储存在方法区中),直接使用类名称来访问静态变量,不推荐使用某个对象来访问。

只要类一定义,JVM就会为static修饰的类属性分配空间,它和类是绑定的,使用static修饰变量的好处是当我们需要修改一个值时可以更加方便,比如学生类中的学校属性,若学校改名字了,我们没有使用static修饰,那么我们就要给每个学生丢修改一次,但是使用了static则只需要修改一次。

相关问题:Java方法中是否可以定义静态变量?

解答:静态变量,当类定义时和类一块加载到内存中了,而调用方法至少是在类定义之后才能调用的,先后顺序不一样,就是说还没调用方法便已经执行了方法里面的定义变量,这是不合理的。

到此这篇关于Java类中this关键字与static关键字的用法解析的文章就介绍到这了,更多相关Java类this关键字与static关键字内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Java类中this关键字与static关键字的用法解析的更多相关文章

  1. Swift:实例方法和类型方法

    大家对“实例方法和类型方法”的概念应该不陌生了,在objective-c中很常见。例如:1.实例方法调用的时候,必须先进行实例化一个对象,然后调用init方法。而在Swift中写法有所改变,它使用class和static关键字来标示。

  2. Swift开发必备技巧:static和class的使用

    Swift中表示“类型范围作用域”这一概念有两个不同的关键字,它们分别是static和class。但是在Swift中,这两个关键字却是不能用混的。在非class的类型上下文中,我们统一使用static来描述类型作用域。这包括在enum和struct中表述类型方法和类型属性时。static适用的场景有这些:enum的情况与这个十分类似,就不再列举了。在Swift中class、struct和enum都是可以实现protocol的。

  3. OC和Swift中的static

    在非class的类型上下文中,我们统一使用static来描述类型作用域,class关键字是专门用在class类型的上下文中的,可以用来修饰类方法以及类的计算属性。Swift1.2之后,类也可以通过static关键字拥有类型存储属性了,static相当于classfinal标识符的别名,类中的static属性拥有全局作用域和懒加载属性。

  4. swift的静态属性(方法)和java的不同

    swift在任何情况下静态属性都要加上类名做为前缀,在java中通过实例名使用静态属性是一个warning,在swift中这里是一个错误swift中的static属性===swift中的finalclass====java中的finalstaticswift多出了class属性这个概念,用来表示`可以被子类重写的static属性`,然并卵,我觉得不如直接使用static和finalstatic,少一种概念swift中子类不能覆盖父类的storedproperty,但是可以覆盖父类的computedprop

  5. JokeClient-Swift 仿写学习

    STATIC和CLASSSwift中表示“类型范围作用域”这一概念有两个不同的关键字,它们分别是static和class。在Swift中class,struct和enum都是可以实现某个protocol的。在Swift中编译器不仅不会对AnyObject实例的方法调用做出检查,甚至对于AnyObject的所有方法调用都会返回Optional的结果。摘自:ANY和ANYOBJECTSELECTOR在Swift中没有@selector了,取而代之,从Swift2.2开始我们使用#selector来从暴露给Ob

  6. Swift 学习笔记 [2] 类 结构体 枚举

    错误处理四种错误处理方法传播给调用该函数的代码funcprocesFn()throwtryprocessFn()docatch捕获do{tryexpression}catchpattern1{}catchpattern2{}将错误转成可选值funcprocessFn()throw->Int{}lettry?processFn()defer定义:defer定义的函数内,在此函数完成后,立即再次调用defer定义的代码块。无关的话学了还是要用,第一版Swift文档出来的时候,还凑热闹学了一次,现在都忘得差不多

  7. 在Swift中使用dispatch_once单例模型

    到目前为止,我已经能够得到一个非线程安全模型:在Static结构中包含单例实例应该允许单个实例与单例实例没有冲突,没有复杂的命名模式,它应该使事情相当私密。根据我对Swift的经验,有三种方法来实现支持延迟初始化和线程安全的Singleton模式。dispatch_once传统的Objective-C方法移植到Swift。

  8. Swift中的static func和class func有什么区别?

    我可以在Swift库中看到这些定义:定义为staticfunc的成员函数和定义为func类的另一个函数之间有什么区别?是简单的静态是结构和枚举的静态函数,类和协议的类?有什么其他差别,应该知道吗?在语法本身中有这种区别的理由是什么?一些其他的区别是类函数是动态分派的,可以被子类覆盖。为协议选择了类,因此不必有第三个关键字来表示静态或类。

  9. “dispatch_once_t”在Swift中不可用:使用懒惰初始化的全局变量

    }()_=myGlobal//usingmyGlobalwillinvoketheinitializationcodeonlythefirsttimeitisused.所以我想迁移这个代码.所以在迁移之前:迁移后,按照Apple的指南,代码如下所示:但是当我运行这个访问返回时,我得到以下错误Static.instance!即使Swift2中有效,该代码过于冗长.在Swift3中,Apple强制您通过关闭来使用延迟初始化:

  10. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部