黑马程序员技术交流社区

标题: static关键字,静态修饰的笔记 [打印本页]

作者: 海狮    时间: 2015-10-23 22:37
标题: static关键字,静态修饰的笔记
本帖最后由 海狮 于 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.静态函数
函数是否用静态修饰,就参考一点,就是该函数功能是否需要访问到对象中的特有数据。
简单点说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。
如果不需要,就可以将该功能定义成静态的。当然,也可以定义成非静态,但是非静态需要被对象调用。
如果没有访问特有数据的方法,该对象的创建是没有意义。
例如某个工具类中的排序方法,不需要特别参数辅助计算,只要传入数组引用,就能运算排序,定义成
静态函数,可以方便使用。



作者: 达达达    时间: 2015-10-23 23:29
成员变量封装一下比较好
作者: dai2686779    时间: 2015-10-23 23:34
666666666666666
作者: 会盟天下英豪    时间: 2015-10-24 02:12
666666666666
作者: 逝风    时间: 2015-10-24 07:50
“成员变量又称实例变量
类变量又称实例变量”
   
写错了吧!类变量是静态变量
作者: wx_KWWw45aw    时间: 2015-12-11 13:27
我看了挺有用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2