面向对象进阶
static
Java当中起名字不能以数字开头
static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量
静态变量
对象之间的数据共享
静态存储位置(静态区)
静态变量是随着类的加载而加载的,优先于对象出现
对象空间存储着所有非静态的成员变量 并进行默认初始化
共享的属性就可以被定义为静态(具体的应用场景)
- 被该类所有对象共享
- 不属于对象,属于类
- 类名调用(推荐)
- 对象名调用
静态方法
被static修饰的成员方法
- 多用在测试类和工具类中
- Javabean类中很少使用(使用的话就涉及到设计模式)
- 类名调用(推荐)
- 对象名调用
Javabean类、测试类与工具类
帮助我们做一些事情,但是不描述任何事物的类
- Javabean:用来描述一类事物的类,要私有化成员变量,书写空参构造方法,书写全参构造方法,需要针对每个私有化成员变量提供get,set方法,写额外的行为(成员方法)
- 测试类:用来检查其他类是否书写正确的类,带有main方法的类,是程序的主入口,创建Javabean类的对象并赋值调用,调用工具类的工具方法
- 工具类: 不是用来描述事物的类,而是帮我们做一些事情的类:1.类名要见名知意,Math , ArrUtil(数组工具),2. 要私有化构造方法(构造方法一旦私有,在外界就不能创建这个类的对象(工具类不是描述事物的,创建对象没有任何意义(抽象)))3.方法定义为静态的,方便调用
static静态关键字的注意事项
- 静态方法****只能访问静态变量和静态方法
- 非静态方法可以访问静态变量,静态方法,也可以访问非静态的成员变量和非静态的成员方法
- 静态方法中是没有this关键字的
非静态是跟对象有关的
静态方法不能调用非静态成员变量(实例(对象)变量)(没有对象,没地儿找)
内存的角度:
字节码文件刚开始加载到内存中的时候,静态的就已经存在了(优先于对象)
单例设计模式:多线程阶段讲解
重新认识main方法
- public :权限修饰符 ,main方法是要被JVM调用的 ,访问权限需要足够大
- static : 被JVM调用,不用创建对象,直接类名访问
因为main方法是静态的,所以测试类中其他方法也需要是静态的 - void : 被JVM调用,不需要给JVM返回值
- main: 固定格式,一个Java规定的程序主入口通用的名称,虽然不是关键字,但是被JVM识别
- String[] args : 以前用于接收键盘录入数据,现在没用,Java为了向下兼容,保留了这个参数