static(静态)
关键字、修饰符 变量、方法、代码块、内部类
1.静态变量
静态变量随着类的加载(方法区的静态常量值)而加载到方法区的静态区,与类同级也叫类变量,通过类名.形式来调用静态变量也可以通过对象来调用静态变量。存储在方法区静态区时会默认给静态变量赋予系统默认初始值。类产生的对象共享一个静态变量(属性),看静态变量是否需要被所有的对象来共享,如果需要共享就设置成静态变量。
方法里可以定义静态变量?
静态变量与类同级,只有方法被调用时里面的内容才能出现,前后矛盾,不能定义
内存图:
代码:
package cn.tedu.staticx;
public class StaticDemo1 {
public static void main(String[] args) {
//创建对象
Person p=new Person();
p.name="郭靖";
p.age=2;
p.gender='男';
//创建对象
Person p1=new Person();
p1.name="黄蓉";
p1.age=3;
p1.gender='女';
//输出
System.out.println(p.toString());
System.out.println(p1.toString());
}
}
//定义代表人的类
class Person{
//属性
String name;
int age;
static char gender;
//定义方法来输出对象的属性值
public String toString(){
return this.name+","+this.age+","+this.gender;
}
}
执行结果:
2.静态方法
静态方法会随着类的加载而加载到方法区的静态区,与类同级也叫作类方法,通过类名.形式来调用也可以通过对象调用。静态区不会给静态方法赋予系统默认初始值,当main方法被调用会加载到栈中执行。
Java中所有的静态信息只能直接使用静态信息,所有的非静态信息可以直接使用静态信息以及非静态信息
package cn.tedu.staticx;
public class StaticDemo2 {
//静态变量
static int i=1;
//非静态变量
int j=2;
//静态方法可以直接使用静态变量
public static void m(){
System.out.println(i);
//静态方法不能直接使用非静态变量
//成员变量与对象一个级别,静态方法与类一个级别
//类加载静态方法时不能直接使用还没有出现的信息
// System.out.println(j);
}
//非静态信息与对象同级可以直接使用前面类以及加载信息
public void n(){
//非静态方法可以直接使用静态变量
System.out.println(i);
//非静态方法可以直接使用非静态变量
System.out.println(