static是什么
- static是静态的意思,可以修饰成员变量和成员方法
- static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改
成员变量可以分为两类
- 静态成员变量(有static修饰,属于类,内存中加载一次): 常表示如在线人数信息、等需要被共享的信息,可以被共享访问,同一个类中的静态成员变量的访问可以直接访问省略类名
类名.静态成员变量 (推荐)
对象.静态成员变量 (不推荐)
public class User{
public static String onlineNumber = 161;
}
- 实例成员变量(无static修饰,存在于每个对象中): 常表示姓名name、年龄age等属于每个对象的信息
public class User{
public static String onlineNumber = 161;
//实例成员变量
private String name;
private int age;
...
}
两种变量在什么情况下定义
- 静态成员变量 : 用来表示需要被共享的信息
- 实例成员变量 : 属于每个对象,且每个对象的信息不同时
成员方法的分类
- 静态成员方法(有static修饰,归属于类),建议用类名访问,也可以用对象访问,同一个类中可以省略类名不写
- 实例成员方法(无static修饰,归属于对象),只能用对象触发访问
两种方法使用场景
- 表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法
- 如果该方法是以执行一个公用功能为目的,则可以申明成静态方法
static访问注意事项
- 静态方法只能访问静态的成员,不可以直接访问实例成员
- 实例方法可以访问静态的成员,也可以访问实例成员
- 静态方法中是不可以出现this关键字的
工具类
类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的
好处
- 方便调用
- 提高了代码的复用(一次编写,处处可用)
为什么工具类中的方法不用实例方法做?
- 实例方法需要创建对象调用
- 此时用对象只是为了调用方法,这样只会浪费内存
工具类定义时的其他要求
由于工具里面都是静态方法,直接用类名即可访问,因此,工具类无需创建对象,建议将工具类的构造器进行私有
代码块
- 代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外
- 在Java类下,使用{}括起来的代码被称为代码块
代码块分为
-
静态代码块:
- 格式:static{}
- 特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次
- 使用场景:在系统启动类加载的时候做一些静态数据初始化的操作,以便后续使用
public class test{ public static String name; //静态代码块,随着类一同加载,优先于main方法 static{ System.out.println("静态代码块执行了") name = "小王"; } public static void main(String[] args){ System.out.println("main方法执行了") } }
-
构造/实例代码块 (使用很少)
- 格式:{}
- 特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
- 使用场景:初始化实例资源
public class test2{ /* 实例代码块被触发执行 无参构造器被触发执行 实例代码块被触发执行 无参构造器被触发执行 */ private String name; public test2(){ System.out.println("无参构造器被触发执行"); name = "张三"; } //实例代码块,无static修饰,属于对象,每次构造对象时,都会触发一次执行 { System.out.println("实例代码块被触发执行"); } public static void main(String[] args){ Test2 t1 = new Test2(); Test2 t2 = new Test2(); System.out.println(t2.name); } }