Javastatic
来源:互联网 发布:淘宝在哪修改收货地址 编辑:程序博客网 时间:2024/06/15 15:26
第九、十章 static
1、static
1.static:静态的,可以用来修饰属性、方法、代码块(或初始化块)、内部类
2.static修饰属性(类变量):
(1)由类创建的所有的对象,都共用这一个属性
(2)当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。类变量 VS实例变量(非static修饰的属性,各个对象各自拥有一套副本)
(3)类变量是随着类的加载而加载的,而且独一份
(4)静态的变量可以直接通过“类.类变量”的形式来调用
(5)类变量的加载是要早于对象的,所以当有对象以后,可以“对象.类变量”使用,但是“类.实例变量”是不行的
(6)类变量存在于静态域中
3.static修饰方法(类方法):
(1)随着类的加载而加载,在内存中也是独一份
(2)可以直接通过“类.类方法”的方式调用
(3)内部可以调用静态的属性或静态的方法,而不能调用非静态的属性或方法。反之,非静态的方法可以调用静态的属性或静态的方法
1)静态的方法内是不可以有this或super关键字的
2)注:静态的结构(static的属性、方法、代码块、内部类)的生命周期要早于非静态的结构,同时被回收也要晚于非静态的结构
4.内存图——单独由静态域来存放类变量,由所有类对象共享,一个对象修改过,通过其它对象访问也是修改过的
优点:大家共用,只需要定义一份
缺点:生命周期比较长,随着类的创建而创建,随着类的消失而消失,所以静态变量的生命周期长于实例变量
2、单例模式
1.23种设计模式——《Java设计模式经典搞笑珍藏版.pdf》
2.单例模式:
(1)解决的问题:如何只让设计的类只能创建一个对象?
(2)如何实现:饿汉式&懒汉式
//饿汉式1
class Bank{
//1.私有化构造器
private Bank(){}
//2.创建类的对象,同时设置为private的,通过公共的方法来调用,体现封装性
//4.要求此对象也为static的
private static Bank instance = newBank();
//3.此公共的方法,必须为static
public static Bank getInstance(){
return instance;
}
}
//饿汉式2
class Bank{
//1.私有化构造器
private Bank(){}
//2.创建类的对象,同时设置为private的,通过公共的方法来调用,体现封装性
//4.要求此对象也为static的
private static Bank instance = null;
static{
instance = new Bank();
}
//3.此公共的方法,必须为static
public static Bank getInstance(){
return instance;
}
}
//懒汉式
class Bank{
private Bank(){}
private static Bank instance = null;
public static Bank getInstance(){
if(instance == null){//可能存在线程安全问题
instance = new Bank();
}
return instance;
}
}
3、main()方法
public static void main(String[] args){
//方法体
}
main()是一个方法,是主方法,为程序的入口
权限修饰符:public protected缺省 private,体现了面向对象的封装性
对于方法来讲:static final abstract
方法的返回值:void、具体的返回值类型(基本的数据类型 &引用数据类型),方法内部一定要有return
方法名:命名的规则:xxxYyyZzz,给方法命名时,要见名知意
形参列表:同一个类中,相同方法名,不同的形参列表的诸多个方法间构成重载。形参 &实参->方法的参数传递机制:值传递
方法体:方法定义的是一种功能,具体的实现由方法体操作
4、代码块:
1.是类的第4个成员
2.作用:用来初始化类的属性
3.分类:由于只能用static来修饰,所以分为静态代码块、非静态代码块
4.静态代码块
(1)里面可以有输出语句
(2)随着类的加载而加载,而且只被加载一次
(3)多个静态代码块之间按照顺序结构执行
(4)静态代码块的执行要早于非静态代码块的执行
(5)静态的代码块中只能执行静态的结构(类属性、类方法)
5.非静态代码块
(1)可以对类的属性(静态的、非静态的)进行初始化操作,同时也可以调用本类声明的方法(静态的、非静态的)
(2)里面可以有输出语句
(3)一个类中可以有多个非静态的代码块,多个代码块之间按照顺序结构执行
(4)每创建一个类的对象,非静态代码块就加载一次
(5)非静态代码块的执行要早于构造器
6.关于属性赋值的操作(注意先后顺序):
(1)默认的初始化
(2)显式的初始化
(3)构造器中初始化
----------------以上是对象的属性初始化的过程------------------
(4)通过方法对对象的相应属性进行修改
5、final——最终的,可以用来修饰类、属性、方法
1.final修饰类:这个类就不能被继承。如:String类、StringBuffer类、System类
2.final修饰方法:不能被重写。如:Object类的getClass()
3.final修饰属性:此属性就是一个常量,一旦初始化后,不可再被赋值。习惯上,常量用大写字符表示
4.此常量在哪里赋值:
(1)此常量不能使用默认初始化
(2)可以显式地赋值、代码块、构造器
5.变量用static final修饰:全局常量。比如:Math类的PI