一、static关键字
二、static关键字修饰成员变量
/** * @author :CaiCai * @date : 2022/4/8 11:15 */ public class demo09 { public static void main(String[] args) { Student one=new Student("小迪",20); one.room="101教室"; System.out.println("姓名:"+one.getName()+",年龄:"+one.getAge()+",教室:"+one.room); Student two=new Student ("小李",21); System.out.println("姓名:"+two.getName()+",年龄:"+two.getAge()+",教室:"+two.room); } }
/** * @author :CaiCai * @date : 2022/4/8 11:09 */ public class Student { private String name; private int age; static String room; public Student(){ } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
- 一旦用static修饰,那么这就成为了静态方法,静态方法不属于静态对象,而是属于类的
- 如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用
- 无论是成员变量还是成员方法,如果有了static 都推荐使用类名进行调用
- 静态变量:类名称.静态变量
- 静态方法:类名称.静态方法()
注意事项:
- 静态只能访问静态,不能访问非静态
- 原因:因为在内存当中是先有的静态内容,后有的非静态内容
- 静态方法当中不能使用this
- 原因:this代表当前对象,通过谁调用的方法,谁就是当前对象
/** * @author :CaiCai * @date : 2022/4/8 11:39 */ /* 注意事项: 静态只能访问静态,不能访问非静态 原因:因为在内存当中是先有的静态内容,后有的非静态内容 静态方法当中不能使用this 原因:this代表当前对象,通过谁调用的方法,谁就是当前对象 */ public class staticMethod { //一旦用static修饰,那么这就成为了静态方法,静态方法不属于静态对象,而是属于类的 //如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用 //无论是成员变量还是成员方法,如果有了static 都推荐使用类名进行调用 //静态变量:类名称.静态变量 //静态方法:类名称.静态方法() public static void main(String[] args) { myClass obj=new myClass();//创建对象 //然后才能使用static没有关键字的内容 obj.method(); //对于静态方法来说 可以通过对象名进行调用 也可以直接通过类名进行调用 obj.methodStatic(); myClass.methodStatic(); //对于本类当中的类名称 可以省略类名称 myMethod(); } public static void myMethod(){ System.out.println("自己的方法"); } }
三、静态static的内存图
根据类名访问静态成员变量的时候,全称和对象没关系,只和类有关系
四、静态代码块
静态代码块的格式是:
public class 类名称 { static { //静态代码块的内容 } }
- 静态代码块的用途:用来一次性地对静态成员变量进行赋值
- 特点:当第一次用到本类时,静态代码块执行唯一的一次
- 静态内容总是优于非静态内容,所以静态代码块比构造方法先执行