static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块
static关键字的主要作用:
方便在没有创建对象的情况下来进行调用(方法/变量)。
调用变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
public class Person {
String name;
int age;
String gender;
//static 修饰成员变量
static String country = "CN";
Person() {
}
Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
void speak() {
System.out.println("国籍:" + country + " 姓名:" + name + " 性别:" + gender
+ " 年龄:" + age + " 哈哈!!!");
}
public static void main(String[] args) {
//访问静态成员
//直接通过类名来调用
String country=Person.country;
System.out.println(country);
//通过对象.成员的形式访问
Person p1 = new Person("jack", 20, "男");
p1.country="US";
p1.speak();
}
}
调用方法
static方法一般称作静态方法。
静态方法可以使用类名直接调用
1.静态方法中不能访问非静态成员变量,只能访问静态变量。
2.静态方法不可以定义this,super关键字.
3.因为静态优先于对象存在.静态方法中更不可以出现this
4.非静态函数:非静态函数中可以访问静态成员变量
public class Person {
String name;
int age;
String gender;
static String country = "CN";
Person() {
}
Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
//静态方法
static void run(){
//静态方法只能访问静态成员变量。
System.out.println("国籍:"+country);
//静态方法访问非静态成员变量,编译报错。
// System.out.println(" 姓名:" + name);
//静态方法中不可以出现this,编译报错
// this.speak();
}
public static void main(String[] args) {
String country=Person.country;
System.out.println(country);
//通过对象.成员的形式访问
Person.run();
}
}
总结
静态优缺点
优点:对对象的共享数据进行单独空间的存储,节省空间 例如Person 都有
国籍。该数据可以共享可以被类名调
缺点:生命周期过长,访问出现局限性。(静态只能访问静态)
什么时候定义静态变量
静态变量(类变量)当对象中出现共享数据
例如:学生的学校名称。学校名称可以共享对象的数据要定义为非静态的存放在对内存中(学生的姓名,学生的年龄)
什么时候定义静态函数
如果功能内部没有访问到非静态数据(对象的特有数据。那么该功能就可以定义为静态)