Java成员变量与局部变量同名
看到成员变量和局部变量同名这个知识点的时候一开始有点懵逼,想了一下其实特别简单。
先来看一个简单的代码。
首先我定义了一个Person类。
public class Person {
private int age=1000;//定义成员变量,年龄为1000
public void setAge(int age) {
age=age;
System.out.println("方法内的年龄"+age);
}
public void sayHello() {
System.out.println("我的年龄是"+age+".");
}
}
然后在主函数里面创建对象并输出。
Person p=new Person();
p.setAge(20);
p.sayHello();
输出结果是什么?并不是我们想象的我的年龄是20,而是下面这样:
//方法内的年龄20
//我的年龄是1000.
想一下其实就很容易理解。
一句话,如果不同名,那么方法内的变量名代表成员变量;如果同名,那么方法内的变量名就只表示局部变量了,和成员变量一毛钱关系都没有了。
所以,首先当我们创建了一个Person对象p,在创建对象的时候就已经完成了成员变量的初始化了。成员变量age的初始值是1000。
当我们p.setAge(20)的时候,其实这个20只在setAge这个方法内起作用,所以输出了方法内年龄20,执行完这句话后,20就被销毁了。
然后执行sayHello,它里面的age代表的是成员变量的值,所以依旧是1000。
到这里如果还是不能理解,可以自己写代码看输出结果体会下。
那么,当同名的时候,我们就是要让这个变量名表示成员变量,有没有办法呢?
那就要说到this关键字了。我们把Person类改成这样:
public class Person {
private int age=1000;
public void setAge(int age) {
this.age=age;
System.out.println("方法内的年龄"+age);
}
public void sayHello() {
System.out.println("我的年龄是"+age+".");
}
}
再运行代码,发现代码运行结果变成了下面这样:
//方法内的年龄20
//我的年龄是20.
this表示的是当前对象。
this.age在这里具体表示p对象的age(即p对象的成员变量age)的值是20。
不能理解的话就多写写代码就能理解了。
Java成员变量与局部变量同名的更多相关文章
- Java成员变量和局部变量
Java成员变量和局部变量 一.成员变量和局部变量 二.static关键字 三.成员变量和静态变量区别 四.main函数 五.静态函数什么时候用 六.静态代码块 七.构造代码块 构造代码块先于构造函数 ...
- Java 成员变量和局部变量
1.成员变量 在类中定义,用来描述对象将要有什么. 2.局部变量 在类的方法中定义,在方法中临时保存数据. 成员变量和局部变量的区别 作用域不同: 局部变量的作用域仅限于定义它的方法 成员变量的作用域 ...
- Java 成员变量与局部变量
成员变量与局部变量的区别 什么是局部变量.什么是成员变量: 局部变量:在方法内部的变量 形参:在方法签名中定义的变量. 方法局部变量:在方法内部定义的变量. 代码块局部变量:在代码块内定义的变量. 成 ...
- java 成员变量和局部变量的区别
将对象的存储在数组中会报错 public static void main(String[] args) { ArrayList<Goods> arrayList = new ArrayL ...
- Java成员变量与局部变量的区别
从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数:成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所 ...
- Java成员变量和局部变量区别
成员变量和局部变量区别 变量根据定义位置的不同,我们给变量起了不同的名字.如下图所示: 区别 在类中的位置不同 (重点) 成员变量:类中,方法外 局部变量:方法中或者方法声明上(形式参数) 作用范围 ...
- 7.3 java 成员变量和局部变量区别
/* * 成员变量和局部变量的区别: * A:在类中的位置不同 * 成员变量:类中,方法外 * 局部变量:方法中或者方法声明上(形式参数) * B:在内存中的位置不同 * 成员变量:堆内存 * 局部变 ...
- java成员变量与局部变量修饰符的区别
成员变量: 可以被 public,static ,protected,default,final修饰. 局部变量:包括方法里的和 代码块里的(静态和非静态) 可以被default, final修饰 参 ...
- java成员变量和局部变量的初始化和内存中的运行机制
成员变量: 当系统加载类或创建类的实例时,系统会自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值. eyeNum是类属性.name是实例属性 所有person实例访问eyeNu ...
随机推荐
- FutureTask源码分析
1. 常量和变量 private volatile int state; // 任务状态 private static final int NEW = 0; private static final ...
- mysql备份相关
1linux下mysql导出文件 备份mysql数据库的命令 mysqldump -h主机名 -u用户名 -p密码 数据库名字 > 备份的数据库名字.sql 例如:mysqldump -uro ...
- minGW cygwin gnuwin32
首先,三个的官方网站分别是: minGW:http://www.mingw.org cygwin: http://www.cygwin.com gnuwin32: https://sourcefo ...
- WebService基于SoapHeader实现安全认证(二)
支持通过Http请求方法调用webservice,同时支持SoapHeader验证. using Globalegrow.Common; using Globalegrow.Model; using ...
- 新手遇到的问题:Easy UI的对话框老是在页面载入完毕后自己主动弹出
因为是第一次接触Easy UI,还不是非常熟悉,尝试了一下对话框功能,还是非常不错的.但问题是页面载入完毕后.全部的对话框都自己主动弹出来了,百度了好久,也没有详细说明确的,貌似别人都没有这个问题哦 ...
- iOS:文本视图控件UITextView的详细使用
文本视图控件:UITextView 介绍:它是一个文本域的编辑视图,可以在该区域上进行编辑(包括删除.剪贴.复制.修改等),它与文本框UITextField的不同之处是:当它里面的每一行内容超出时,可 ...
- SQL注入深入剖析
SQL注入是一门很深的学问,也是一门很有技巧性的学问 1. 运算符的优先级介绍 2. SQL语句执行函数介绍 mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESC ...
- LINUX提权笔记
没啥技术含量,一种思路,让某些得到root权限webshell的童鞋可以快点拿到权限. 某日拿到某站webshell,RedHat 系统,Tomcat程序是root身份启动的,webshell当然也拥 ...
- window进入本地组策略编辑器和计算机管理界面
win+R 进入运行窗口 输入gpedit.msc 进入本地组策略编辑器, 右键我的电脑,点击管理 进入计算机管理界面
- flask restful修改头部信息
有两种方式,第一种是使用make_response from flask import make_response def test(): resp = make_response('test', c ...