Java核心基础之static静态代码块和静态方法讲解
- static关键字
- static 修饰的⽅法或变量,优先于对象执⾏,所以内存优先有 static修饰的内容后有对象的内容
- 可以⽤来修饰类的成员⽅法、类的成员变量,还可以编写static静态代码块
- 修饰变量就是类变量,修饰⽅法就是类⽅法
- 总结: 类变量或者类⽅法,可以直接通过类名.⽅法名或者变量名进⾏调⽤,不⽤经过对象
public class Student{
static int age;
static String name;
public static void sleep(){
}
}
- static变量也称作静态变量
- 和⾮静态变量的区别是,静态变量被所有的对象所共享,在内存中只有⼀份,它当且仅当在类初次加载时会被初始化。⾮静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
- static成员变量的初始化顺序按照定义的顺序进⾏初始化
- static⽅法也称作静态⽅法
- 不依赖于任何对象就可以进⾏访问,类名.⽅法名
- 不能访问类的⾮静态成员变量和⾮静态成员⽅法
- 注意事项:
- 静态⽅法不能直接访问⾮静态变量
- 静态⽅法当中不能使⽤this关键字
核心:⼀个类里面 static修饰的不能访问非static修饰的成员或者方法,而非static修饰的可以访问static修饰的成员或者方法
//静态变量
static int age;
//静态⽅法
public static int getAge(){
return 5;
}
package domee.Static;
public class Student {
static int age;
String name;
static String sex;
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
package domee.Static;
public class StaticTest {
public static void main(String[] args) {
Student.age = 2;
Student student1 = new Student();
student1.name = "哈";
Student student2 = new Student();
student2.name = "哈哈";
Student student3 = new Student();
student3.name = "哈哈哈";
System.out.println(student1.name);
System.out.println(student1.getAge());
System.out.println("---------");
System.out.println(student2.name);
System.out.println(student2.getAge());
System.out.println("---------");
System.out.println(student3.name);
System.out.println(student3.getAge());
System.out.println("---------");
}
}
- 静态代码块
- 加载类的时候,静态代码块会被执⾏⼀次,且只能执⾏⼀次
- 静态内容优先于⾮静态内容,所以静态代码⽐构造⽅法先执⾏
- 使⽤场景:⽤来⼀次性对静态成员变量进⾏赋值,或者类资源初始化等操作
public class 类名{
static {
//静态代码块
}
}
package domee.Static;
public class Student {
static int age;
String name;
static String sex;
static {
sex = "男" ;
System.out.println("静态代码块被执行了");
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
package domee.Static;
public class StaticTest {
public static void main(String[] args) {
Student.age = 2;
Student student1 = new Student();
student1.name = "哈";
Student student2 = new Student();
student2.name = "哈哈";
Student student3 = new Student();
student3.name = "哈哈哈";
System.out.println(student1.name);
System.out.println(student1.getAge());
System.out.println("---------");
System.out.println(student2.name);
System.out.println(student2.getAge());
System.out.println("---------");
System.out.println(student3.name);
System.out.println(student3.getAge());
System.out.println("---------");
}
}