1:static
什么时候使用静态?
针对所有对象的属性值都一样的时候,这个属性就可以使用static修饰,这个时候这个属性就存在于方法区中的静态区中。被所有对象共享。
针对每个对象特有的属性,这个就不能使用static修饰了。
针对静态修饰的变量有两种调用方式
1:使用对象进行调用
2:直接使用类名调用。
生命周期:
静态区中的变量(所属于类的) > 堆内存中对象里面的变量(所属于对象的) > 栈内存中变量(所属于当前的花括号)
注意:
在静态方法内部只能调用静态属性,如果想要调用非静态属性,必须先要获取到这个属性所属的对象。
总结:静态的使用场景一些注意事项
成员变量
普通成员变量(实例变量)
所属于对象,必须先创建对象,才能使用这个变量,这个变量是存在于堆内存中,它的生命周期和对象一样,对象消失,实例变量才消失。
静态成员变量(类变量)
所属于类,不需要对象,可以直接通过类名来调用,这个变量存在于方法区的静态区中,它的生命周期和java虚拟机一样,虚拟机执行结束,类变量才消失。
成员函数
普通成员函数
可以调用普通成员变量和静态成员变量。
静态成员函数
只能调用静态成员变量,因为当静态成员函数被调用的时候,可能对象还不存在,所以不能调用对象中的特有属性。
在静态成员函数中不能使用this关键字
2:main函数(主函数)
main方法的作用主要是为了创建其他类的对象,对对象中的功能进行调用,验证功能的执行结果。
public:是一个权限修饰符,最大权限,因为这个方法需要被虚拟机所调用,所以这个函数的权限应该设置为最大
static:因为java虚拟机在调用这个方法的时候,还没有对象,所以需要静态
void :因为虚拟机不需要返回值
main:就是一个函数名,一个标识符,只不过比较特殊,可以被java虚拟机识别
String[]:表示是一个字符串数组,
args:参数名称//arguments
3:静态代码块
格式:
static{
}
静态代码块一般放在类中,和构造代码块平级
作用:
可以负责对类进行初始化。
静态代码块什么时候执行呢?
当类被加载进内存的时候,静态代码块执行
4:设计模式
表示是解决某一个类问题最行之有效的方法。
23种设计模式
单例设计模式
:这个设计模式可以保证在内存中一个对象只存在一份。
例子:现在有A程序和B程序,
分析:
1:保证其他地方不能创建这个config的对象,
2:我们自己创建一个对象,把这个对象对外开放出去
3:对外提供公共的访问方式
代码实现
1:私有化构造函数
2:在类中创建一个私有对象
3:对外提供一份public的静态方法,把刚才创建的对象返回出去
单例有两种形式
1:饿汉式,一开始就直接创建对象
class Single
{
//1:私有化构造函数
private Single(){
}
//2:创建一个私有对象
private static Single sd = new Single();
//3:对外提供一个公共的访问方法
public static Single getInstance(){
return sd;
}
}
2:懒汉式,在需要使用对象的时候才会创建
class Single2
{
//私有化构造函数
private Single2(){
}
//定义一个对象的引用变量
private static Single2 s2 = null;
//对外提供公共的访问方式
//TODO--这块其实是存在线程安全问题的,后期讲完多线程之后再优化
public static Single2 getInstance(){
if(s2==null){
s2 = new Single2();
}
return s2;
}
}