/*
* 静态static函数中的使用。
* 什么时候函数需要静态修饰?
* 该函数没有访问过对象中的属性时,就需要静态修饰。
*
*
* static 是什么?
* 成员修饰符
* 特点:
* 1.被静态修饰的成员,可以直接被类名所调用
* 2.静态成员优先于对象存在。
* 3.静态成员随着类的加载而加载,随着类的消失而消失,静态成员生命周期很长。
* 注意事项:
* 1.静态方法只能访问静态成员,不能访问非静态成员,这就是静态方法的局限性。非静态方法能访问静态成员
* 2.静态方法中不能出现this或者super关键字。
* 3.主函数是静态的。
*
* 怎么用?
* 直接用于修饰成员。
*
* 什么时候用?
* 成员变量:如果数据在所有对象中的都是一样的。直接静态修饰
* 成员函数:如果函数没有访问过对象中的属性数据,那么该函数就是静态的。
*
* 成员变量与静态变量的区别
* 1.名称区别:
* 成员变量也叫实例变量
* 静态变量也叫类变量
*
* 2.内存存储上的区别:
* 成员变量存储到堆内存的对象中。
* 静态变量存储到方法区的静态区中。
*
* 3.生命周期区别
* 成员变量随着对象出现而出现,随对象的消失而消失。
* 静态变量随着类的出现而出现,随着类的消失而消失。
静态代码块:随着类的加载而执行,而且只执行一次。
* 作用:给类执行初始化。
* 应用场景:类不需要创建对象,但需要初始化,这是将部分代码存储到静态代码块中。
*/
class Person{
private String name;
private int age;
static String country="china"; //静态变量
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void show()
{
System.out.println("name="+name+"age="+age);
}
// public void sleep()
// {
// System.out.println("呼呼");
// }
/*
既然sleep方法没有访问到对象中的特有数据
都可以不需要对象就可以使用该方法,只要在该方法上用static修饰即可。
*/
public static void sleep() //静态函数
{
System.out.println("呼呼呼");
}
}
public class Demo{
public static void main(String[] agrs)
{
/*创建对象调用sleep方法。
发现,sleep并没有使用对象中的数据。
该对象的建立是无意义的。
该方法属于Person.class,
可以通过类名的方式来访问。
*/
// Person p = new Person("jason",21);
// p.sleep();
Person.sleep(); //静态函数,通过‘类名.函数名’,直接使用
System.out.println(Person.country); //静态变量,通过 ‘类名.变量名’,直接使用。
}
}