永发信息网

java中静态成员变量的问题

答案:2  悬赏:20  手机版
解决时间 2021-01-25 03:07
代码:

package com.test;

class StaticTest {
static int i=9;//存放与数据区

public static void main(String[] args) {
// TODO Auto-generated method stub
StaticTest.i++;
StaticTest s1=new StaticTest();
System.out.println(s1.i);
StaticTest s2=new StaticTest();
System.out.println(s2.i);

}

}
执行结果:10,10
通过:StaticTest.i++;让成员变量自增,但是不会修改数据区之前存储的值,再次运行程序是,输出结果依旧是10,10,
请问:StaticTest.i++;他在内存中的存储位置,StaticTest.i++;改变的是谁的值,为什么没有改变数据区的值
最佳答案
static 叫类变量;类变量的意思就是各个实例之间公用的变量。
全部回答
成员变量 我们来研究一个事物: 属性:外在特征;例如人的身高,体重 行为:能够做什么;例如人有说话,打球等行为。 而在java语言中,最基本的单位是类,类就是用来体现事物的。 用类class来描述事物也是如此: 属性:对应类中的成员变量 行为:对应类中的成员函数 定义类其实就是在定义类中的成员(成员变量和成员函数) 拓展:类是一个抽象的概念,而对象就是类的具体的存在,体现。例如:生活中的汽车,可以看做一个类,我们称之为汽车类,每一台车都有颜色和轮胎数(可以定 义为属性,即成员变量),每一台车都可以跑(即车的行为,对应类总的成员函数),我们把汽车实例化一下,即会产生一个对象,比如奔驰、宝马(bmw)。 demo1: [java] view plain copy public class car { private string color; // 定义汽车颜色,全局变量 private int numluntai; // 定义汽车轮胎数,全局变量 public car(string color, int numluntai){ super(); this.color = color; this.numluntai = numluntai; } public void run() { system.out.println(this.numluntai+ "个轮子的" +this.color + "轿车在马路上行驶着"); } } [java] view plain copy public class classtest { public static void main(string[] args){ car bmw = new car("黑色", 4); // 创建一个轿车对象,名字为bmw bmw.run(); } } 运行结果: 4个轮子的黑色轿车在马路上行驶着 其中color和numluntai就称为car 类的成员变量,这个属性能够用来描述一个类的属性,否则,它就应该定义为局部变量。 例如一个for循环中的i即是局部变量。 [java] view plain copy for(int i = 0; i < args.length; i++) { ...... } 又例如写在成员方法中变量是局部变量。 [java] view plain copy publicclass car { private string color; // 定义汽车颜色,全局变量 private int numluntai; // 定义汽车轮胎数,全局变量 public car(string color, int numluntai){ super(); this.color = color; this.numluntai = numluntai; } public void run() { string carname=”宝马牌”; //这个就是局部变量 system.out.println(this.numluntai+ "个轮子的" +this.color + carname+"轿车在马路上行驶着"); } } publicclass classtest { public static void main(string[] args){ car bmw = new car("黑色", 4); // 创建一个轿车对象,名字为bmw bmw.run(); } } 结果: 4个轮子的黑色宝马牌轿车在马路上行驶着 成员变量和局部变量的区别 成员变量: ①成员变量定义在类中,在整个类中都可以被访问。 ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。 ③成员变量有默认初始化值。 局部变量: ①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。 ②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。 ③局部变量没有默认初始化值 在使用变量时需要遵循的原则为:就近原则 首先在局部范围找,有就使用;接着在成员位置找。 静态变量 由static修饰的变量称为静态变量,其实质上就是一个全局变量。如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。 示例: [java] view plain copy class person{ //成员变量,实例变量 string name; //静态变量,类变量 //所有对象共享的属性用static修饰 static string country = "cn"; public void show(){ system. out.println(country + ":" + name); //等效语句:system.out.println(person.country+ ":" + this.name); } } class staticdemo{ public static void main(string[]args){ personp = new person(); system. out.println(p.country); //可以用类名直接调用 system. out.println(person.country); } } 结果: cn cn 成员变量和静态变量的区别 1、两个变量的生命周期不同 成员变量随着对象的创建而存在,随着对象被回收而释放。 静态变量随着类的加载而存在,随着类的消失而消失。 2、调用方式不同 成员变量只能被对象调用。 静态变量可以被对象调用,还可以被类名调用。 3、别名不同 成员变量也称为实例变量。 静态变量也称为类变量。 4、数据存储位置不同 成员变量存储在堆内存的对象中,所以也叫对象的特有数据。 静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。 小结: 尽管三者的本质都是变量,可是使用时却有相当大的区别,稍不留神就可能陷入陷阱。且先记住:在一个类中,如果一个变量能够用来描述一个类的属性,那就定义 为成员变量,否则,它就应该定义为局部变量。而如果一个变量在全局中都能使用(某个内容是被所有对象所共享),那么我们就可以把这个变量用static来 修饰,即为静态变量。(还要注意它与静态方法的紧密联系,这里且不细述了) //我复制别人的,都懒得打字!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
2005年3月29日,京沪高速淮安段,一辆满载液
为什么在家照镜子这么漂亮,而出去外面却这么
抑郁症伴随浑身疼痛肠胃不适,在吉大一院应该
什么职业的人最长寿?最短命的呢?
平面上有n(n≥3)个点任意三个点不在同一直
【唯心史观】唯物史观与唯心史观的主要对立是
使弈秋诲二人弈 诲的意思
【人称代词的用法】英语中人称代词的用法
下列说法有错误的一项是(3分)A. 词又称“长
广告词特色 快点 急需
睡前听音乐好吗
注册表中HKEY_CLASSES_ROOT\MIME\Database\Co
周末你和父母一起在动物园里的所见所闻英语作
【三角形边长计算器】已知三角形2边长度求夹
奥利奥 全部巧克力覆盖 中间有一层奶油
推荐资讯
上虞到常州金坛东下高速路线
宣传世界末日算不算犯罪
打扮的扮能组什么词
风吹杨柳千门绿 雨泣桃花万树红的横批是什么
香港最便宜的手表多少钱?
二十四小时综艺吴磊落进面粉的背景歌曲
老辈子是什么意思
‘‘我的另一片天地’’500字作文
聚仙阁茶府地址在什么地方,我要处理点事
人造理石板做室内地面好不好
去电影院去人多的还是人少的
德国马牌爱车港高端轮胎专业替换店地址有知道
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?