static修饰属性

原创 2016年08月29日 23:17:41

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;
    }

    public float getScore() {
        return score;
    }

    public void setScore(float score) {
        Students.score = score;
    }
}

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修饰属性(类变量)、static修饰方法(类方法)

一、static修饰属性(类变量)  1.由类创建的所有的对象,都共用这一属性。  2.类变量随着类的加载而加载,即使此类还未new过对象,这个类变量也存在,而且仅一份;  然而,实例变量是类new过...
  • u013453970
  • u013453970
  • 2015年08月11日 11:26
  • 10554

为什么用static来修饰方法或者变量?用处?

对于用static修饰的变量称为静态变量,也叫类变量。由类创建的所有对象都可以共用这个变量。类变量随着类的加载而加载,即使此类还未new过对象,这个类变量也存在,而且仅一份。 顺便说一下实例变量,实...
  • u013592371
  • u013592371
  • 2016年12月22日 00:10
  • 2528

static修饰方法

static修饰的方法,在其他的类调用后,
  • qq_16895471
  • qq_16895471
  • 2014年06月25日 17:06
  • 137

Java static作用及加载顺序

在java中,static可以修饰 Java初始化,加载顺序:父类静态成员变量,父类静态代码块,子类静态成员变量,子类静态代码块,父类非静态成员变量,父类非静态代码块,父类构造...
  • u010442302
  • u010442302
  • 2016年07月28日 10:40
  • 4338

static修饰符详解

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何...
  • u012152619
  • u012152619
  • 2015年05月26日 08:41
  • 4820

Java中static修饰的方法和非static修饰的方法的区别

static修饰的方法和普通方法的不同
  • a781568222
  • a781568222
  • 2017年05月10日 12:19
  • 198

Java的static修饰变量,方法,代码块的初始化顺序

Java的static修饰变量方法代码块的初始化顺序 测试代码 运行结果 分析结果 总结...
  • zhzdeng
  • zhzdeng
  • 2017年03月11日 11:07
  • 197

static修饰符的作用及应用

/* static 修饰符 1.数据共享成员变量(实例变量)和静态变量(类变量)的区别 1.两个变量的生命周期不同 成员变量随对象的创建而存在,随对象被回收而释放 静态变量随类的加载而存在,...
  • u012768347
  • u012768347
  • 2016年03月27日 14:12
  • 2133

java中static修饰成员方法

static(静态、修饰符) static修饰方法(静态的成员方法): 访问方式: 方式一:可以使用对象进行访问。 对象.静态的函数名(); 方式二:可以使用类名进行访问。 类名.静态函数名字...
  • oguro
  • oguro
  • 2016年11月03日 09:25
  • 1107

Java关键字(二)static关键字(static声明属性)

static关键字: a、使用static与非static属性声明的区别? b、static声明的属性或方法可以直接由类名称调用 c、static方法只能访问static声明的属性或方法,不能访问非s...
  • yels303
  • yels303
  • 2015年12月31日 22:48
  • 948
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:static修饰属性
举报原因:
原因补充:

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