黑马程序员技术交流社区
标题:
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