Javastatic

来源:互联网 发布:淘宝在哪修改收货地址 编辑:程序博客网 时间:2024/06/15 15:26


第九、十章 static

 

1static

1.static:静态的,可以用来修饰属性、方法、代码块(或初始化块)、内部类

2.static修饰属性(类变量):

   1)由类创建的所有的对象,都共用这一个属性

2)当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。类变量 VS实例变量(非static修饰的属性,各个对象各自拥有一套副本)

   3)类变量是随着类的加载而加载的,而且独一份

   4)静态的变量可以直接通过“类.类变量”的形式来调用

5)类变量的加载是要早于对象的,所以当有对象以后,可以“对象.类变量”使用,但是“类.实例变量”是不行的

6)类变量存在于静态域中

3.static修饰方法(类方法):

1)随着类的加载而加载,在内存中也是独一份

2)可以直接通过“类.类方法”的方式调用

3)内部可以调用静态的属性或静态的方法,而不能调用非静态的属性或方法。反之,非静态的方法可以调用静态的属性或静态的方法

      1)静态的方法内是不可以有thissuper关键字的

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;

}

}

 

3main()方法

public static void main(String[] args){

//方法体

}

  1. main()是一个方法,是主方法,为程序的入口

  2. 权限修饰符:public protected缺省 private,体现了面向对象的封装性

  3. 对于方法来讲:static final abstract

  4. 方法的返回值:void、具体的返回值类型(基本的数据类型 &引用数据类型),方法内部一定要有return

  5. 方法名:命名的规则:xxxYyyZzz,给方法命名时,要见名知意

  6. 形参列表:同一个类中,相同方法名,不同的形参列表的诸多个方法间构成重载。形参 &实参->方法的参数传递机制:值传递

  7. 方法体:方法定义的是一种功能,具体的实现由方法体操作

     

    4、代码块:

    1.是类的第4个成员

    2.作用:用来初始化类的属性

    3.分类:由于只能用static来修饰,所以分为静态代码块、非静态代码块

    4.静态代码块

    1)里面可以有输出语句

    2)随着类的加载而加载,而且只被加载一次

    3)多个静态代码块之间按照顺序结构执行

    4)静态代码块的执行要早于非静态代码块的执行

    5)静态的代码块中只能执行静态的结构(类属性、类方法)

    5.非静态代码块

    1)可以对类的属性(静态的、非静态的)进行初始化操作,同时也可以调用本类声明的方法(静态的、非静态的)

    2)里面可以有输出语句

    3)一个类中可以有多个非静态的代码块,多个代码块之间按照顺序结构执行

    4)每创建一个类的对象,非静态代码块就加载一次

    5)非静态代码块的执行要早于构造器

    6.关于属性赋值的操作(注意先后顺序):

    1)默认的初始化

    2)显式的初始化

    3)构造器中初始化

    ----------------以上是对象的属性初始化的过程------------------

    4)通过方法对对象的相应属性进行修改

     

    5final——最终的,可以用来修饰类、属性、方法

    1.final修饰类:这个类就不能被继承。如:String类、StringBuffer类、System

    2.final修饰方法:不能被重写。如:Object类的getClass()

    3.final修饰属性:此属性就是一个常量,一旦初始化后,不可再被赋值。习惯上,常量用大写字符表示

    4.此常量在哪里赋值:

           1)此常量不能使用默认初始化

    2)可以显式地赋值、代码块、构造器

    5.变量用static final修饰:全局常量。比如:Math类的PI

原创粉丝点击