黑马程序员------Java中static修饰符及应用

来源:互联网 发布:淘宝食品代理公司注册 编辑:程序博客网 时间:2024/06/05 02:29
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
static 静态修饰符:可以修饰类中的成员变量,成员函数
在静态区里放着,可以节省内存,静态只加载一次,不在堆内存中
静态的成员先开辟内存,非静态的是在创建对象时才在堆中开辟内存
特点:1、被静态修饰的成员变量,其所有对象共享该变量的值
 2、静态的是随着类的加载就在方法区中的静态区开辟了内存,所以静态的优先于非静态的先出现
 3、静态的既可以通过对象访问,也可以直接通过类名访问(person.country)
弊端:1、因为静态时随着类的加载就在方法区中的静态区开辟了内存,所以生命周期太长,占用内存时间长


非静态成员变量和静态变量的比较:
1:生命周期:非静态成员变量时随着对象的出现而出现,随着对象的被垃圾回收而释放内存
静态的是随着类的加载就在方法区中的静态区开辟了内存,随着类的消失才消失
2:存放位置:非静态成员变量存储在堆中
静态变量成员变量存储在方法区的静态区中
3:存放的数据:非静态成员变量存放的是每个对象特有的数据
  静态成员变量存放的是所有对象共享的数据
4:调用方式 非静态成员变量只能通过对象调用
静态成员变量既可以通过对象调用,也可以使用类名调用


什么时候用静态:
成员变量:该成员变量的值需要被所有对象共享


成员函数:当该成员函数没有用到它所在类中任何非静态成员
因为静态只能用静态,所以只要函数中用到非静态成员,就不能是静态函数


*/
class person
{
String name;//实例变量
static String country;//类变量
//非静态的方法既可以使用静态的成员变量,也可以使用非静态的成员变量
public void show(){//实例方法
System.ou.println(this.name+this.country);
}
//静态的方法只能使用静态的成员变量,静态方法中不能使用this
public static void fun(){//类方法
System.ou.println(country);
}
}
class Test1
{
public static void main(String[] args){
person ren=new person();
ren.name="张龙";
ren.show();
System.out.println(ren.country);
System.out.println(Person.country);
}

}

/
静态的应用:工具类
工具类中的方法都是静态的,使用者可以直接通过类名调用,不用创建对象
为了不让使用者创建对象,怎么办?
让构造函数不能被使用!---构造方法私有化
工具类中的方法一般都是静态的
静态代码块:随着类的加载就执行一次,只执行一次,优先于main的执行
如果有静态代码块,执行静态代码块
构造代码块给当前所有类中对象经行初始化
构造函数只能对对应的一个对象初始化




对象初始化的过程:
1、如果有静态代码块,执行静态代码块
2、在堆内存中开辟内存空间
3、对变量进行默认值的赋值
4、对变量进行显示赋值
5、执行构造代码块
6、执行构造函数
7、把内存首地址赋给栈中内存






class StaticDemo
{
static int num=5;
String name="赵虎";
static{
System.out.println(num);
}
public static void show(){
System.out.println("d");
}
}




class  Test4
{
static.out.println("b");
public static void main(String[] args) 
{
StaticDemo.show;
System.out.println("Hello World!");
}
static{
System.out.println("c");
}
}

0 0
原创粉丝点击