静态的使用---static

static:

static 静态
变量分类:
1.实例(成员)变量:属于对象的,有几个对象就有多少份,没有用static修饰的变 量, 都是实例变量.
2.静态变量:属于类的变量,只有一份,且被所有对象所共享的.
静态变量:
1.用static修饰的变量 就是静态变量,属于类的.
2.存储的位置是在方法区中.
3.如何用,通过类名打点调用.

内存管理:
JVM 进行管理分配:
1.栈区: 局部变量 ​
2.堆区: new 出来的对象(实例变量) ​
3.方法区: 用来加载类的.class 字节码文件 (静态的变量 / 类的方法) 只会被加载一次

package oo.day04;
/**
 *静态的使用演示demo
 * */

public class StaticDemo {
    public static void main(String[] args) {
        Eoo e = new Eoo();//创建Eoo对象
        e.show();
        e.show();
        Eoo e1 = new Eoo();//创建Eoo对象
        e1.show();
        Eoo e2 = new Eoo();//创建Eoo对象
        e2.show();
    }
}
class Eoo{
    int a;//实例变量 属于对象的    通过对象访问
    static int b;//静态变量 属于类的   通过类名打点访问
    Eoo(){//构造方法
        a++;
        b++;
    }
    void show(){
        System.out.println("实例变量a的值为:"+a+"  静态变量b的值:"+b);
    }
}

静态适用性:当所有对象需要共享一份数据时,例如(图片),就可以将对应图片类型做成静态的.
静态修饰的方法:
1.用static修饰的方法 则为静态方法
2.存在方法区中
3.通过类名打点去访问
4.静态方法中,是没有隐式的this传递的,所以我们在静态方法中无法访问实例成 员(实例变量/方法).
静态方法在开发的过程中,当做一些工具方法的时候,一般都会将当前方法做成静态方法,目的就是方便调用.
//静态方法的测试

class Foo{
    int a;//实例变量
    static int b;//静态变量
    void test(){//实例(普通)方法
        System.out.println(a);//隐式的this 来进行调用
        System.out.println(b);//隐式的写法 类名进行调用
    }
    static void fun(){ //静态方法:加了static 的方法 没有隐式this的内容了
        //静态方法无法访问实例的成员(变量/方法)
//        System.out.println(a);因为静态方法没有this 所以就无法访问实例的成员
        System.out.println(Foo.b);
//        test();静态方法无法访问实例的成员(变量/方法)
    }}

静态代码块: { } 代码块的意思

1.由static 修饰代码块 称之为静态代码块.
2.静态代码块属于类的,类被加载的时候会自动执行,优先执行静态代码块,在执行对象的构造方法,静态代码块只会被执行一次(因为类只会被加载一次).
package oo.day04;

/**

  • 静态代码块的使用演示:
    */
public class StaticDemo2 {
    public static void main(String[] args) {
        //下面这行代码运行时所做的事情
        //1.先将Goo类的.class文件加载到方法区中,并自动执行静态代码块
        //2.创建Goo类的对象到堆区
        //3.调用Goo的无参构造方法
        Goo g = new Goo();
        //下面这行代码运行时所做的事情   注意:类只会在首次使用时加载一次!
        //创建Goo类的对象到堆区
        //调用Goo的无参构造方法
        Goo g1 = new Goo();
    }
}class Goo {
    static int a;//静态变量
    int b;//实例变量
    Goo() {//构造方法
        b = 20;
        System.out.println("b的值初始化为:" + b);
    }
    static { //静态代码块  类被加载时执行 且只执行一次
//        this.b = 10; 静态代码块无法访问实例成员
        a = 10;
        System.out.println("a的值初始化为:" + a);
    }}

思考?

**我们深海杀手这个项目,会存在很多个对象,举例 侦察潜艇,如果每个侦察潜艇都需要图片,这个如果设计为实例变量,那么假设1000个侦察潜艇对象,那么图片则存在1000份. 但是1000个图片都是一样的,所以我们可以将这个图片的变量设计为静态变量,那么这样 所有对象则可共享这一份图片,节省内存!

设计:项目中所需要的图片都需要进行初始化,那么需要单独的创建一个类来进行图片相关内容的处理, 类的单一职责.**

package cn.aries.submarine;import javax.swing.*;/**
 * 图片类:主要负责项目图片资源加载的类
 */
public class Images {
    public static ImageIcon battleship;//静态的图片类型----战舰
    public static ImageIcon bomb; //深水炸弹图片
    public static ImageIcon gameover;//游戏结束图片
    public static ImageIcon mine;//水雷图片
    public static ImageIcon minesubm;//水雷潜艇图片
    public static ImageIcon obsersubm;//侦查潜艇图片
    public static ImageIcon sea;//海洋图片
    public static ImageIcon start;//开始图片
    public static ImageIcon torpedo;//鱼雷图片
    public static ImageIcon torpesubm;//鱼雷潜艇图片
    static { //静态代码块     初始化图片
        battleship = new ImageIcon("img/battleship.png");
        bomb = new ImageIcon("img/bomb.png");
        gameover = new ImageIcon("img/gameover.png");
        mine = new ImageIcon("img/mine.png");
        minesubm = new ImageIcon("img/minesubm.png");
        obsersubm = new ImageIcon("img/obsersubm.png");
        sea = new ImageIcon("img/sea.png");
        start = new ImageIcon("img/start.png");
        torpedo = new ImageIcon("img/torpedo.png");
        torpesubm = new ImageIcon("img/torpesubm.png");
    }
    public static void main(String[] args) {
        //测试信息 都是 8 说明没有问题
        System.out.println(battleship.getImageLoadStatus());
        System.out.println(bomb.getImageLoadStatus());
        System.out.println(gameover.getImageLoadStatus());
        System.out.println(mine.getImageLoadStatus());
        System.out.println(minesubm.getImageLoadStatus());
        System.out.println(obsersubm.getImageLoadStatus());
        System.out.println(sea.getImageLoadStatus());
        System.out.println(start.getImageLoadStatus());
        System.out.println(torpedo.getImageLoadStatus());
        System.out.println(torpesubm.getImageLoadStatus());}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值