一、static关键字
1、用法
Static是一个修饰符,用于修饰成员,包括成员变量和成员函数。当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用。System.out..println("I am stacit method!")
2、特点
2.1 随着类的加载而加载,也就是说静态会随着类的消失而消失,说明它的生命周期最长。
2.2 优先于对象存在:静态是先存在的,对象是后存在的。
2.3 被所有对象共享
2.4 可以直接被类名所调用
3、静态使用注意事项
4.1 静态方法只能访问静态成员
非静态方法既可以访问静态也可以访问非静态
4.2 静态方法中不可以定义this,super关键字
因为静态优先于对象存在。所以静态方法中不可以出现this
4、静态的利与弊
5.1 利处:对对象的共享数据进行单独空间的存储,节省空间;没有必要为每一个对象都存储一份,可以直接被类名调用。
5.2 弊处:生命周期过长,访问出现局限性(静态虽好,只能访问静态)
二、静态代码块/静态方法/构造代码块/构造函数/
静态代码块:随着类的加载而执行,只执行一次,且最先执行。
构造代码块:随着类的加载而执行,只执行一次,在静态代码块后执行。
构造函数:创建对象时被调用。
静态方法:随着类的加载时而加载,可以被类名直接调用。
class StaticCode { StaticCode() {System.out.println("无参构造函数运行了...");} static {System.out.println("静态代码块运行了...");} { System.out.println("构造代码块运行了..."); } StaticCode(int x) { System.out.println("带参数的构造函数执行了..." + "传入整形参数:" + x);} public static void show() { System.out.println("静态方法运行了..."); } } public class StaticCodeDemo { static { System.out.println("主类的静态代码快运行了..."); } public static void main(String[] args) { new StaticCode(8); } }
运行结果如下所示:
三、单例设计模式
作用:一个类在内存中只存在一个对象
方法:
1,将构造函数私有化
2,在类中创建一个唯一的本类对象
3,提供一个方法可以获取到该对象
分为两种模式:
饿汉模式
这个是先初始化对象,后获取。
public class Single_HungryMan {
private static Single_HungryMan s = new Single_HungryMan();
public static Single_HungryMan getInstance() {
return s;}
}
懒汉模式
对象是方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式 Single_LazyMan
public class Single_LazyMan { private static Single_LazyMan s = null; private Single_LazyMan() {} public static Single_LazyMan getInstance() { if (s == null) s = new Single_LazyMan(); return s; } }
四、访问权限
1、private修饰词,表示成员是私有的,只有自身可以访问;
2、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。
3、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限;
4、public修饰词,表示成员是公开的,所有其他类都可以访问;
5、类的访问限制,仅有public和包访问权限;
a、一个Java文件只能有一个public类
b、public类的名称必须同Java文件名完全一致
c、若Java文件中没有public类,则文件名可以任意
6、final关键字
a、final数据成员,使用前总是被初始化并被强制要求在定义处或构造器中赋值;一旦赋值后,对于基本类型其值会恒定不变,而对于对象引用会始终指向赋值的对象,但指向对象自身是可以修改的;
b、final参数,对于基本类型表示无法改变参数的值,对于对象引用表示无法改变引用所指的对象;
c、final方法,保证方法不会在继承后修改和重载;所有的private方法都隐含式final的;Java中使用动态绑定(后期绑定)实现多态,除了static和final方法是使用前期绑定的;
d、final类,表示该类不可被继承。