this

在说this之前先说一下,对象创建的过程:

1、分配对象空间,并将对象成员变量初始化。

2、执行属性值的显式初始化。

3、执行构造方法。

4、返回相关的地址给相关的对象。

  this的本质就是“创建好的对象的地址”,由于在构造方法调用之前,对象已经创建好了,因此在构造方法中也可以使和this来代表当前对象。

  1. public class User{
  2. int a,b,c; //声明三个成员变量
  3. //this里面自的是当前对象的地直,所以可以代表当前对象
  4. public User(int a,int b){
  5. this.a = a; //把a的值赋给了,当前对象的成员变量a
  6. this.b = b;
  7. }
  8. //因为对象是在调用构造方法之前已经创建好的
  9. public User(int a,int b,int c){
  10. //所以this,也可以调用构造方法,并且在构造方法中,调用另一个构造方法也是用this来高用的
  11. this(a,b);
  12. this.c = c;
  13. }
  14. public void play(){
  15. System.out.println("玩!");
  16. }
  17. //因为普通方法的信息是存在对象里面的,所以可以通过this来调用
  18. public void study(){
  19. this.play();
  20. System.out.println("学习");
  21. }
  22. public static void main(String[] args){
  23. User user = new User(1,2);
  24. user.study();
  25. //this 对象不可以在 静态方法中使用
  26. //因为静态对象是在类加载的时候,已经存到类信息里面了,没有存储中对象信息里面
  27. //而this调用的是对象的地址,不存在静态方法的信息,所以不能用this
  28. }
  29. }

static

在类中,如果用static来声明一个成员变量,可以一个方法,叫做类变量,类方法,这种方法和变量的生命周期和类的生命周期相同,在整个应用程序执行期间都有效。特点:

1、这是该类的公用变量,属于类,被该类的所有对象共享,在类加载的地时候,被显示的初始化了。

2、对于该类的所有对象来说,静态变量只有一份。

3、可以用类名来调用属性/方法。

4、在static方法或static代码块中不可以调用非static的变量/方法。

  所以说在普通方法中可以调用静态变量/方法,是因为对象是在类加载以后再加载的。类是最后加载的,加载之后静态方法也被加载了。

例:

  1. public class Student{
  2. static String name;
  3. //在构造方法里面输出一句话,创建对象的时候,输出到控制台上
  4. public Student(){
  5. System.out.println("第二个输出的");
  6. }
  7. //静态代码块
  8. static {
  9. name = "为静态成员变量赋值";
  10. System.out.println("第一个输出的语句");
  11. }
  12. public static void main(){
  13. //创建一个对象
  14. Student stu = new Student();
  15. //只要运行这个方法,就会加载这个类,加载这个类就会先加载静态变量,静态方法,静态代码埠
  16. //输出的结果:
  17. //第一个输出的语句
  18. //第二个输出的
  19. }
  20. }

  所以说,静态的是类的方法,是和类同生共死的,是第一个被加载的。


细节决定成败!

个人愚见,如有不对,恳请扶正!

Java | this的本质 和 static的本质的更多相关文章

  1. static的本质

    通过反编译发现,static的本质是abstract sealed.因此,无法继承System.Math类,因为它是static的.

  2. java修饰符public final static abstract transient

    JAVA 修饰符public final static abstract transient  关键字: public final static abstract ...  1.public prot ...

  3. Java编程的逻辑 (19) - 接口的本质

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  4. Java编程的逻辑 (21) - 内部类的本质

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  5. Java编程的逻辑 (23) - 枚举的本质

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  6. java通过反射了解集合泛型的本质

  7. java中的final与static

    许多程序设计语言都有自己的办法告诉编译器某个数据是"常数".常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...

  8. Java标识符和关键字(static,final,abstract,interface)

    本文的主要内容如下   1.标识符合关键字 2.Java中的关键字 3.static关键 字 4.static方法 5.静态代码块 6.static修饰符综述 7.final关键字 8.final修饰 ...

  9. java 中 Cannot make a static reference to the non-static 解决方法

    今天敲代码的时候遇到了这个问题,大体这个问题可以简化成这样: public class Test1 { public String get() { return "123"; } ...

随机推荐

  1. 安卓开发(2)—— Kotlin语言概述

    安卓开发(2)-- Kotlin语言概述 Android的官方文档都优先采用Kotlin语言了,学它来进行Android开发已经是一种大势所趋了. 这里只讲解部分的语法. 如何运行Kotlin代码 这 ...

  2. PTH的几种食用姿势

    PTH PTH(pass the hash)也叫做hash传递.在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过NTLM Hash(mimikatz或其他手段抓取到的密码hash)访问远 ...

  3. 电脑华硕A455L系列,机械硬盘换成固态硬盘,光驱位改放机械硬盘

    电脑一直以来都很卡,直到最近用的不舒服了,就去查查原因,发现是磁盘读取爆表!只好想起来换固态硬盘,光驱改放机械硬盘... 买的固态硬盘是个杂牌军,但是店家说工艺不错,只好将信将疑,用用再说吧. 首先确 ...

  4. 08.ElementUI 2.X 源码学习:源码剖析之工程化(三)

    0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...

  5. PyTorch 进行 Neural-Transfer

    PyTorch 进行 Neural-Transfer 1.简介 本文讲解如何实现由 Leon A. Gatys,Alexander S. Ecker和Matthias Bethge提出的Neural- ...

  6. MindSpore数据集mindspore::dataset

    MindSpore数据集mindspore::dataset ResizeBilinear #include <image_process.h> bool ResizeBilinear(L ...

  7. CUDA功能和通用功能

    CUDA功能和通用功能 本文描述了类似于CUDA ufunc的对象. 为了支持CUDA程序的编程模式,CUDA Vectorize和GUVectorize无法产生常规的ufunc.而是返回类似ufun ...

  8. kali2020.4安装openvas(gvm)

    记录一下,方便复习 1.更换kali源,默认源注释掉. sudo vim /etc/apt/sources.list 中科大 deb http://mirrors.ustc.edu.cn/kali k ...

  9. 如何打造高性能的 Go 缓存库

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/531 文中代码位置: https://github.com/devY ...

  10. 题解-P3810

    P3810 [模板]三维偏序(陌上花开) 更好的阅读体验1 更好的阅读体验2 前置算法 树状数组求逆序对 归并排序求逆序对 解题之前,让我们来看一看弱化版本 \(\to\) 二维偏序 题意 给定两个长 ...