A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海狮 中级黑马   /  2015-10-23 22:37  /  1041 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 海狮 于 2015-10-24 22:26 编辑

static 关键字
static关键字用于修饰成员(包括成员变量和成员函数)
被static修饰的变量和函数具有以下特点
1,随着类的加载而加载,所以先于对象存在
2,储存在方法区而不是对内存中,不需要实现对象便能直接通过类名调用
3,被所有对象所共享,包括非本类对象。
4,被static修饰的函数不能调用非静态(没有被static修饰的)变量或者函数方法,因为静态方法在类装载的时候就分配了内存块,而非静态的方法和变量在new这个类的对象的时候才分配内存块,
  他们内存分配的时间不一样  静态区域访问非静态区域是没有任何意义的
5,被static修饰的函数不能使用this关键字,super关键字
6,非静态函数可以调用静态变量或函数

什么是成员变量,静态变量,类变量,实例变量??
成员变量又称实例变量
类变量又称静态变量他们的区别是:
1,两种变量的生命周期不同
成员变量随着对象的创建而存在,随着对象的收回而消失
类变量随着类的加载而存在,随着类的消失而消失
2,调用方式不同
成员变量必须实现对象,而后通过对象去调用
类变量可以被对象调用,也可以直接被类名调用
3,储存位置不同
成员变量存在于堆内存中
类变量存在于方法区的静态区中,又称共享数据区,所以又叫对象的共享数据

例:
class Student
{
        public String name;
        public static String school="西山小学";
        Student(String name){
                this.name=name;
        }
        public String getName(){
                return name;        
                }
        public String getSchool(){
                return school;
        }
}
class TestDemo
{
        public static void main(String[] args)
        {
                Student stu=new Student("小花");
                System.out.println(stu.getName());
                System.out.println(stu.getSchool());
                System.out.println(Student.school);
                //System.out.println(Student.name);//这样引用错误,不注释编译失败
        }
}

静态修饰的作用
1.静态变量
当分析对象中所具备的成员变量的值都是相同时,这时这个成员就可以被静态修饰。
只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。
减少堆内存的占用
2.静态函数
函数是否用静态修饰,就参考一点,就是该函数功能是否需要访问到对象中的特有数据。
简单点说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。
如果不需要,就可以将该功能定义成静态的。当然,也可以定义成非静态,但是非静态需要被对象调用。
如果没有访问特有数据的方法,该对象的创建是没有意义。
例如某个工具类中的排序方法,不需要特别参数辅助计算,只要传入数组引用,就能运算排序,定义成
静态函数,可以方便使用。


6 个回复

倒序浏览
成员变量封装一下比较好
回复 使用道具 举报
666666666666666
回复 使用道具 举报
666666666666
回复 使用道具 举报
“成员变量又称实例变量
类变量又称实例变量”
   
写错了吧!类变量是静态变量

点评

对,手快快,写错了,感谢指出  发表于 2015-10-24 22:04
回复 使用道具 举报
我看了挺有用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马