static关键字:
static关键字,用户修饰成员变量和成员方法。
static关键字的特点:被所有的对象所共享,可以被类名所调用,静态的加载优先于对象(随着类的加载而加 载,类加载字节码对象的时候呢就业把他给加载在类的方法区中了)
public class StaticDemo01 {
public static void main(String[] args) {
Person p = new Person();
p.name = "二哈";
p.from = "万达广场";
p.show();
Person p2 = new Person();
p2.name = "王思聪";
p2.from = "万达广场";
p2.show();
}
}
class Person{
String name;
int age;
String from;
public void show() {
System.out.println(name+"===="+from);
}
}
out:
二哈====万达广场
王思聪====万达广场
在代码中有着重复的赋值,如果有成千上万的人都来自“万达广场”,那我就得把p2.from = “ ”;做无数次的相同赋值,这样做浪费了资源,而且代码看上去臃肿不简洁。
所以呢从这里就用到static看下面的代码及结果
public class StaticDemo01 {
public static void main(String[] args) {
Person p = new Person();
p.name = "二哈";
p.from = "万达广场";
p.show();
Person p2 = new Person();
p2.name = "王思聪";
//p2.from = "万达广场";
p2.show();
}
}
class Person{
String name;
int age;
static String from;
public void show() {
System.out.println(name+"===="+from);
}
}
out:
二哈====万达广场
王思聪====万达广场
输出的结果是一样的。
代码块中代码也可以这样写
把 // p.from = "万达广场";注释掉。改为:
Person.from = "万达广场";
public class StaticDemo01 {
public static void main(String[] args) {
Person p = new Person();
Person.from = "万达广场";
p.name = "二哈";
//p.from = "万达广场";
p.show();
Person p2 = new Person();
p2.name = "王思聪";
//p2.from = "万达广场";
p2.show();
}
}
class Person{
String name;
int age;
static String from;
public void show() {
System.out.println(name+"===="+from);
}
}
out:
二哈====万达广场
王思聪====万达广场
从加载情况来分析:
他是在Person类加载之前就已经赋值了。
static静态关键字的注意事项:
——静态方法只能访问静态成员
——非静态方法既可以访问静态也可以访问非静态
——非静态方法中不可以定义静态变量
——静态方法中不可以定义this,super关键字。