千家信息网

java方法及this关键字原理是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"java方法及this关键字原理是什么",在日常操作中,相信很多人在java方法及this关键字原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2026年11月03日java方法及this关键字原理是什么

这篇文章主要介绍"java方法及this关键字原理是什么",在日常操作中,相信很多人在java方法及this关键字原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"java方法及this关键字原理是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 步骤1 、给顾客增加一个吃饭的方法

  • 步骤 2 、 没有加static的属性和方法,一定需要先new对象

  • 步骤 3 、 用new出来的对象去执行eat方法

  • 步骤 4 、 怎么理解c.eat()

  • 步骤 5 、 消息接受器

  • 步骤 6 、 如果有两个顾客?

  • 步骤 7 、 答案

  • 步骤 8 、其实有个this

  • 步骤 9 、 在eat方法里面直接使用this

  • 步骤 10 、 构造方法

  • 步骤 11 、 总结:this的意义是什么?

  • 步骤 12 、 道理我都懂,那static又是什么?

  • 步骤 13 、 本节完整源码

步骤1 、给顾客增加一个吃饭的方法

假设我们有一个顾客类:

class Customer {        String name;               // 客户姓名        String sex;                //性别        String birthDate;  //生日        String phoneNumber;        //电话号码        int status;        //客户状态(1:正常,2:不正常)        void eat(){           System.out.println("eating...");        }  }

void代表方法没有返回值。

步骤 2 、 没有加static的属性和方法,一定需要先new对象

这是一句口诀,new的意思是新建一个对象,Customer类只是一个声明式的东西,不是真实存在的对象。
只要你没有加static,就必须要在运行的时候创建了对象,才可以使用!

说得武断一点,只要你没有加static,你要运行eat方法,就必须要new一个对象。

至于为什么,现在先不管,就这么强记一下吧。

步骤 3 、 用new出来的对象去执行eat方法

class Demo {   public static void main(String[] args){                Customer c = new Customer();                c.eat();     }}

运行,就可以看到eat方法被调用了。

步骤 4 、 怎么理解c.eat()

c是顾客对象的一个引用,或者叫指针。c就是一个标记,本身不会保存顾客对象的数据,但是我们操作c,就和操作顾客对象是一样的。

这行代码代表我们向这个顾客发送了一条吃饭消息,顾客很聪明的,一下子就懂了,于是他就用一个句点 . 加上eat(方法名),再打一个圆括号的方式,执行了这个方法。

这是一次成功的通讯。

步骤 5 、 消息接受器

一个类里面的方法,我们可以把它称为消息接收器,这样非常有利于理解。

步骤 6 、 如果有两个顾客?

问个问题,如果有两个顾客,一个叫亚瑟,一个叫安琪拉。那么他们调用的eat方法是相同的还是不同的。

如果这个出面试题,是很有区分度的。

步骤 7 、 答案

答案是相同的方法,没想到吧。
原因是类加载器把class文件加载到虚拟机,内存的划分会把类的所有方法都放到一个叫做方法区的地方。不管你new多少个对象,调用的都是同一个方法。因为如果你每new一个对象,都专门开辟一个内存空间来存放方法的话,未免也太浪费了。

现在就有一个新的问题,既然方法是同一份,我怎么知道是谁呢?

步骤 8 、其实有个this

事情的真相是这样的…
Demo.java被javac命令编译成Demo.class和Customer.class,然后运行的时候,首先是类加载器去加载Demo.class,发现还用到了Customer.class,于是顺便把Customer.class也加载了。

在这个例子中,JVM里面有两个地方需要我们关注,一个是堆,一个是方法区。

什么是堆?堆是一块存放对象的区域,你每次new一个对象,这个对象就是放在堆里面。比如有这样的代码:

class Demo {   public static void main(String[] args){                Customer c1 = new Customer();                Customer c2 = new Customer();                c1.name = "亚瑟";                c2.name = "安其拉";   }}

我们new了两个对象,其中c1和c2是他们的引用,这两个对象是放在堆里面的。

而eat方法,是放在方法区,只有一份。

然后重头戏来了,当你用其中某一个对象去调用eat方法的时候,其实会传过去一个this。

c1.eat();

this会神不知鬼不觉地作为eat方法的参数,传入eat方法。
每一个对象都有一个this,this并不是你设置的某个属性,而是java给每一个类都设置的标记,你察觉不到它的存在,但是它一直都在。

步骤 9 、 在eat方法里面直接使用this

我们在eat方法里面直接使用this,就是这样的:

void eat(){   System.out.println(this.name + " eating...");}

效果:

其实,它的底层是这样的,虽然我们不能这么写:

void eat(this){   System.out.println(this.name + " eating...");}

我们在方法里面调用某个变量,这个变量要么就是参数传进来的,要么就是这个类的属性,这个你同意不?基于这个常理,这个this不是我们定义的属性,那么只能是参数传进来的。只不过,这个过程是JVM做的,我们察觉不到。

步骤 10 、 构造方法

每一个类都有构造方法,写法是这样的。

public Customer(){        }

这是空的构造方法,你不写也没事,就算不写也会有这么一个方法。构造方法的作用就是在你new对象的时候,直接调用。

记住一个口诀:

1.类名打括号 = 调用构造方法,左边一定会有个new。
2.方法名打括号 = 调用这个方法,默认传入一个this(没有static的情况)

3.方法名打括号 = 调用这个方法,不传入this(有static的情况)

现在再回过头来看new的语句,是不是对上了?

Customer c1 = new Customer();

步骤 11 、 总结:this的意义是什么?

因为方法是独一份,所有类的对象共享这些方法,JVM为了搞清楚到底是谁去调用某个方法,就在每一个类里面维护一个this。当类被实例化(就是new的时候),这个this就指向这个对象,然后在调用方法的时候,隐式地传入this,就可以在那个方法中获取到当前真实对象的数据了。

就有点像什么呢,有点像花名。

什么叫花名,比如小区的物业会设置一个花名,他们对外会宣称,管理1-10栋的物业管家的名字是小芳,这个小芳就是花名。这是一个虚拟的名字,业主也只知道物业管家是小芳,但是小芳可能今天是张三,明天是李四。张三李四都离职了,王五成为物业管家,对外的说法也是他叫管家小芳。

物业设置管家这个职位,并不知道究竟谁来做,于是先设置好,管家就叫做小芳。小芳就相当于this,只有等到张三来任职了,这个this就是张三。张三跑路,李四来了,这个this就是李四。

步骤 12 、 道理我都懂,那static又是什么?

我们已经不止一次提到static了,static到底是啥啊,别急,下节我们来分享,先把这一节的知识点消化一下吧。

步骤 13 、 本节完整源码

class Customer {        String name;               // 客户姓名        String sex;                //性别        String birthDate;  //生日        String phoneNumber;        //电话号码        int status;                //客户状态(1:正常,2:不正常)        public Customer(){                        }        void eat(){           System.out.println(this.name + " eating...");        }}class Vip {}class Demo {   public static void main(String[] args){                Customer c1 = new Customer();                Customer c2 = new Customer();                c1.name = "亚瑟";                c2.name = "安其拉";                c1.eat();   }}

视频讲解:

Java对this的理解

Java中关于成员方法的讲解

到此,关于"java方法及this关键字原理是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

方法 步骤 对象 顾客 就是 小芳 两个 时候 管家 属性 物业 张三 关键 关键字 原理 客户 消息 花名 这是 李四 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 科技互联网龙头 互联网科技资迅 互联网科技开发公司 互联网 科技 互联网金融 科技 互联网科技公司发展 互联网科技的英文 人人互联网科技是培训 开启互联网科技时代小说 阿里巴巴算科技企业还是互联网 团飞科技与伯堂互联网服务平台 燊美集互联网科技有限公司 怎样加入科技互联网 江苏互联网智能科技软件 浙南科技城互联网大厦招聘 厦门江牛科技互联网 下一代互联网重大应用科技园 扫呗互联网科技有限公司 恒生科技互联网指数十大成分股 科技互联网项目 互联网和高科技公司 宁夏众和广鑫互联网科技有限公司 互联网对科技的发展 健康食品互联网创新科技园项目 智帮互联网科技公司最近动向 江苏苏星互联网科技有限公司 互联网科技融合创新 科技美学互联网 艺术 广州全民伙伴互联网科技有限公司
0