static属性

原创 2016年08月29日 23:46:21

static修饰属性及静态变量在内存中区域的状态

今天写程序遇到一点小问题,最后问题出在成员变量修饰符上,static修饰符

public class Students {
    private static int id; //静态成员变量
    private static String name; //
    private static float score; //

    public Students(int id, String name, float score) {
        this.id = id;
        this.name = name;
        this.score = score;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        Students.name = name; //类的属性改为非静态的话,这里"Students"改为"this"
    }

    public float getScore() {
        return score;
    }

    public void setScore(float score) {
        Students.score = score; //类的属性改为非静态的话,这里"Students"改为"this"
    }
}

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //练习3:定义一个学生数组,要求学生有id,姓名,成绩属性,用数组保存其对象,至少5个学生对象,
        //      写一个方法,参数为id,显示对应学生的姓名和成绩

        inquiry(2);
    }
    public static void inquiry(int id) {

        Students s0 = new Students(0, "Amado", 89);
        Students s1 = new Students(1, "Bianca", 84);
        Students s2 = new Students(2, "Cicely", 82);
        Students s3 = new Students(3, "Dia", 80);
        Students s4 = new Students(4, "Ed", 92);

        Students[] students = new Students[]{s0,s1,s2,s3,s4};
        for (int i = 0; i < students.length; i++) {
            if (id == students[i].getId()) { //条件不满足,程序不会执行if语句,因为程序执行第五个new对象语句后,id值为4,传的参数 2 != 4
                System.out.println("姓名:" + students[i].getName() + ",分数:" + students[i].getScore());
                System.out.println(students[i]);
            }
            System.out.println("s" + i + students[i] + " " + students[i].getId() + students[i].getName() + students[i].getScore());
        }

    }

}

输出结果为:

s0com.Mini.examin4.Students@659e0bfd 4Ed92.0
s1com.Mini.examin4.Students@2a139a55 4Ed92.0
s2com.Mini.examin4.Students@15db9742 4Ed92.0
s3com.Mini.examin4.Students@6d06d69c 4Ed92.0
s4com.Mini.examin4.Students@7852e922 4Ed92.0

从输出结果中,可看出测试类中,for循环遍历对象数组,输出结果中,堆内存中有5个对象地址,但是这5个地址中存放的属性值一样,而且都是new的最后一个对象的属性。

要想让程序实现:传入参数id值,显示对应的学生的姓名和成绩信息,只需要把Students类的static成员变量,改为non-static(把static修饰符去掉即可)。

分析:因为Students类中属性都是static的,这些静态成员变量存放在方法区中,static 修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。对象在堆区,共享类的static变量(在方法区),所以,输出的地址不一样(生成了5个对象),而对象指向的属性值一样。

版权声明:本文为博主原创文章,未经博主允许不得转载。

java中static属性学习

  • 2012年06月03日 21:23
  • 27KB
  • 下载

java中static属性学习

  • 2012年04月26日 21:31
  • 31KB
  • 下载

php面向对象中static静态属性和静态方法的调用

本文实例讲述了php中static静态属性和静态方法的调用。分享给大家供大家参考。具体如下: 这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用)...

php面向对象中static静态属性和静态方法的调用

  • MBLHQ
  • MBLHQ
  • 2016年12月07日 17:55
  • 714

ES6中class原理,static属性方法,__proto__与prototype深入分析

推荐在github阅读,其中存在的问题会及时修复,也欢迎各位批评指正1.我们首先看看通过babel编译后几个通用函数1.1 首先是_createClass方法:var _createClass = f...

php面向对象中static静态属性和静态方法的调用

这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内...

static静态方法和属性

首先写点代码做下热身: public class TestStatic {     public static void main(String[] args) {         ...

Position属性四个值:static、fixed、absolute和relative的区别和用法

在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolute,static,fixed分的不是很清楚,以致经常会出现让人很郁闷的结果。今天研究了一下,总算有所...

Objective-C-类(static)方法、实例方法、overwrite(覆写)、属性(property)

+表示类方法,-表示实例方法 总结一下几点: 1.类(static)方法 a. 类方法的调用 [类名称 类方法名称]; [Human toString];  注意:类方法 1,类...

java认证:Static和Final修饰类属性变量及初始化

1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用。如果被修饰为private私有,那...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:static属性
举报原因:
原因补充:

(最多只允许输入30个字)