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
  • 26KB
  • 下载

java中static属性学习

  • 2012-04-26 21:31
  • 30KB
  • 下载

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

Objective-C-类(static)方法、实例方法、overwrite(覆写)、属性(property) 分类: Objective-C 2012-02-22 11:11 361人阅读 评...

C++ VS C#(12):函数的重载,类成员的static修饰,属性

C++和C#在函数的重载,类成员的static修饰,属性这三方面的区别

Spring 父类bean中的static属性值继承至子类bean中

最近遇到一个问题,在父类中用到一个属性,在子类运行父类方法的时候,如果给子类bean也注入该值,则该值会有多份,这样就没必要了,经人指导说是,在父类中,将这个值定义成static,子类不需注入也能获取...

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

查了很多关于css样式中position属性的资料,发现只有这篇总结的最好。故转载过来,供日后查看。来源:http://www.jb51.net/web/77495.html CSS...

static与final修饰类属性及初始化问题

static: 1. static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用。如果被修饰为p...
  • yin_jw
  • yin_jw
  • 2014-03-29 17:40
  • 1127

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

先来定义一个Human父类 定义部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // // Hu...

属性关键字 auto,register,static分析

属性关键字

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

这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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