【第22期】观点:IT 行业加班,到底有没有价值?

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个对象),而对象指向的属性值一样。

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

相关文章推荐

css中position属性(absolute|relative|static|fixed)概述及应用

css position

CSS3中position属性( absolute | relative | static | fixed )详解

我们先来看看CSS3 Api中对position属性的相关定义: static:无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用。 relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。 absolute:对象脱离正常文档流,使用top,right,bottom,left等属性

c语言的链接属性和static、extern关键字

1.标识符的链接属性决定如何处理在不同文件中出现的标识符,链接属性有三种:external(外部)、internal(内部)和none(无),没有链接属性的标识符(none)总是被当做单独的个体,也就...

css中position属性(absolute|relative|static|fixed)详解

转载自:脚本之家我们先来看看CSS3 Api中对position属性的相关定义 static:无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用 relativ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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