关于static修饰符:
一旦使用 static 修饰成员方法,那么这就成为静态方法,静态方法不属于对象,而是属于类的。如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它如果有了static关键字,那就不需要创建对象,直接就能通过类名.方法名来使用无论是成员变量,还是成员方法,如果有了static,都推荐使用类名称进行调用:
静态变量:类名称 . 静态变量静态方法:类名称 . 静态方法()
注意:
静态不能直接访问非静态 原因(因为在静态中是【先】有的静态内容,【后】有的非静态内容-------"先人不知道后人,但是后人知道先人")
静态方法中不能用 this关键字。
关于类加载:
1、主动使用:
* 启动类 包含main方法
* 创建对象
* 调用类中的静态内容
* 创建对象的时候 父类会被加载
2、被动使用:
* 当前类中的属性通过final+static修饰,此时不会导致类加载
静态代码块:
格式:
publicclass/*类名称*/{
static{
//代码块内容
}
}
特点:当第一次用到本类时,静态代码块执行唯一的一次,静态代码块总是优先于非静态,所以静态代码块比构造方法先执行。
静态代码块典型用途:用来一次性地对静态成员变量进行赋值。
使用对象类型作为方法的时:当 new一个对象,传递到方法中作为方法中的参数时,实际传递进去的是对象的地址值。
例如:
Phone p1 = new Phone();
用method(Phone param) 方法,其中参数类型是对象类型,就是把p1当作参数传进去,实际传的是p1的地址。
使用对象类型作为方法的返回值时:返回值其实就是对象的 地址值
局部变量和成员变量:
1、定义的位置不一样:
局部变量:在方法内部
成员变量:在方法外部,直接写在类中;
2、作用范围不一样局部变量:
只有方法中才可以使用,除了方法不能再用成员变量:整个类中全都可以使用
3、默认值不同
局部变量:没有默认值,想使用要初始化
成员变量:没初始化也有默认值,规则:整数->0 小数->0.0 char->空格 boolean->false 引用类型->null
方法的参数就是局部变量,参数在方法调用必然会被赋值;
4、内存位置不一样
局部变量:跟着方法走,位于栈内存
成员变量:位于堆内存
5、生命周期不一样
局部变量:随方法进栈诞生,随方法出栈而消失
成员变量:随对象创建而诞生