static(静态): 修饰符
static修饰成员变量: 如果一个数据需要被所有对象共享使用的时候,那么即可使用static修饰该成员变量。
访问方式:
方式1: 可以使用对象进行访问。 格式:对象.静态属性名
方式2: 可以使用类名进行访问。 格式: 类名.属性名。
推荐使用:可以使用类名进行访问。
静态成员变量要注意的细节:
1. 静态的成员变量可以使用类名或者是对象进行访问。
2. 非静态的成员变量只能使用对象进行 访问,不能使用类名直接访问。
3. 千万不要为了方便访问而使用static修饰一个成员变量,只有这个成员变量的数据是需要被共享的时候
才使用static修饰。
static修饰成员函数:
静态函数的访问方式:
方式一:使用对象访问。 格式: 对象.函数名()
方式二:使用类名访问。 格式: 类名.函数名();
静态函数要注意的细节:
1. 非静态的函数只能使用对象调用,不能使用类名调用。
2. 静态函数可以直接访问静态的成员,但是不能直接访问非静态的成员。
原因:静态函数可以使用类名调用,而这时候对象可能还没有存在内存中,这时候非静态的数据也就不存在内存中。
3. 非静态函数可以直接访问静态以及非静态的成员。
原因:非静态函数必须要由对象调用,如果对象存在了,静态数据以及非静态数据早就存在内存中了。
4. 静态函数不能出现this以及super关键字。
原因:因为静态函数可以使用类名直接调用,而这时候可能还没有对象存在,this又要代表当前对象。
什么时候使用static修饰一个函数呢?
如果一个函数没有直接访问非静态的成员,那么即可使用static修饰该函数了。(常用于工具类的方法 Arrays)
非静态的成员变量与静态成员变量的区别:
数量上的区别:
(n份)非静态成员变量是在每个对象中都维护一份数据
(1份)静态成员变量只会在方法中维护一份数据。
访问方式上的区别:
非静态的成员变量只能使用对象进行访问.
静态成员变量可以使用对象、类名进行访问。
存储位置上的区别;
非静态成员变量是存储在堆内存中。
静态成员变量是存储在方法区中。
生命周期的区别:
非静态成员变量是随着对象的创建而存在,随着对象的消失而消失。
静态成员变量是随着类文件的加载而存在,随着类文件(字节码文件)的消失而消失。
作用上的区别:
非静态成员变量的作用是用于描述一类事物的属性。
静态成员变量的作用是提供一个共享数据给所有对象使用的。
class Student{
String name ; // 非静态的成员变量
static String country = "中国"; //静态的成员变量
//静态代码块
static{
System.out.println("静态代码块的代码执行了..");
}
public Student(String name){
this.name = name;
}
//静态函数
public static void sleep(){
System.out.println( "今晚早睡..");
}
//非静态函数
public void study(){
System.out.println(name+"好好学习,为将来可以成为高富帅做准备!!");
}
}
class Person
{
public static void main(String[] args) {
Student s1 = new Student(“张三”);
Student s2 = new Student(“李四”);
System.out.println("姓名:"+ s1.name);
System.out.println("姓名:"+ s2.name);
/*
System.out.println("国籍:"+ Student.country);
*/
}
}