Java静态变量和静态方法的学习

static的介绍

        static的意思式静态的,共享的,被static修饰的变量和方法,不在属于直接属于对象,而是直接属于类,会被通过这个类创建的对象所共享。

静态变量

静态变量的介绍

        静态变量式类中被static修饰的变量,它定义在类中方法外,静态变量的定义方式如下

         修饰符 static 数据类型 变量名

        调用方法:类名.变量名

        静态变量的的第有两个:1.随着类的加载而加载,随着类的消亡而消亡。2.静态变量都只加载一次。

实例变量,局部变量,静态变量区别

        代码中的位置

                局部变量:类中的方法内部或声明

                实例变量:类中方法外

                静态变量:类中方法外

        默认值

                局部变量:没有默认值

                实例变量:有默认值

                静态变量:有默认值

        内存中的位置:

                局部变量:栈内存中

                实例变量:堆内存中

                静态变量:堆内存中 ==>方法区 ==>静态方法区

        代码中的作用域

                局部变量:方法中

                实例变量:所属类中(静态方法和静态代码除外)

                静态变量:所属的类中

        内存中的生命周期

                局部变量:随着方法的加载而加载,随着方法的出栈而消失

                实例变量:随着对象的创建而加载,随着对象的消失而消失

                静态变量:随着类的加载而加载,随着类的消失而消失

         使用静态变量对学生学号进行自动分配实例:

public class demo02try {
    public static void main(String[] args) {
        demo02number s1=new demo02number("李四",19);
        demo02number s2=new demo02number("张三",18);
        demo02number s3=new demo02number("王五",20);
        System.out.println("姓名:"+s1.getName()+"  "+"年龄"+s1.getAge()+"   "+"学号"+s1.getId());
        System.out.println("姓名:"+s2.getName()+"  "+"年龄"+s2.getAge()+"   "+"学号"+s2.getId());
        System.out.println("姓名:"+s3.getName()+"  "+"年龄"+s3.getAge()+"   "+"学号"+s3.getId());

    }
}

public class demo02number {
    private  String name;
    private  int age;
    private  int id;
    private static int number=21002000;

    public demo02number(String name, int age) {
        this.name = name;
        this.age = age;

    }
    public demo02number(){

    }
    {
        this.id=number++;//初始化分配学号,number值累加
    }
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public int getId() {
        return id;
    }

    
}

静态方法

        静态方法与静态变量相似,又是用static进行修饰。使用静态方法时,不需要创建对象,直接通过类名进行调用。静态方法定义格式:

        修饰符 static 返回值类型 方法名(){}

        静态方法的注意事项

        1.在静态方法或静态代码块中不能使用实例成员(成员:变量或方法)

                实例方法调用实例方法(正确)

                实例方法调用静态方法(正确)

                静态方法调用实例方法(正确)

                静态方法调用静态方法(错误)

        2.在静态方法或静态代码块中不能使用this关键字和super关键字 。

        3.静态方法虽然可以被这个类创建的所有对象所共享,可以通过实例名调用静态方法,但这样不推荐使用。

        用静态方法对数组进行变量输出实例:

public class demo02try {
    public static void main(String[] args) {
        
        demo02number.prints(1,2,3,4,5,6,7,8);
    }
}

public class demo02number {

    public static  void  prints(int ...s){
        System.out.print("[");
        for (int i = 0; i < s.length; i++) {
            if(i==s.length-1){
                System.out.println(s[i]+"]");
            }else {
                System.out.print(s[i]+",");
            }
        }
    }
}

静态代码块

静态代码块

        位置:类中,方法外

        格式: static{ }

        特点和注意事项:

                1.随着类的加载而加载,而且只加载唯一一次

                2.静态代码块优先于构造器代码块执行,静态代码块随着类的加载而加载

                 3.在静态代码块中不能使用this 作用: 优先初始化一些变量

单例设计模式

单例设计模式是创建唯一实例的解决思路

设计模式和框架的区别

        设计模式:解决某一种问题的特地思路

        框架:半成品项目

实现单例设计模式的步骤

        1.针对创建唯一对象的类,私有化构造器

        2.在这个类中创建唯一的对象,并用静态进行修饰

        3.针对创建的唯一对象进行封装的思想,只提供对外获取方式,不提供赋值方式

单例创建模式的分类

        立即加载(饿汉式) 1.针对创建唯一对象的类,私有化构造器 2.在这个类中创建唯一的对象,并用静态进行修饰 3.针对创建的唯一对象进行封装的思想,只提供对外获取方式,不提供赋值方式

         延迟加载(懒汉式) 1.针对创建唯一对象的类,私有化构造器 2.在这个类中定义唯一的对象,并用静态进行修饰 3.针对创建的唯一对象进行封装的思想,只提供对外获取方式(当第一次获取的时候创建 唯一的对象),不提供赋值方式

        单例设计模式实现模板:

public class demo04try {
    public static void main(String[] args) {
        System.out.println(demo04.getDe());
        System.out.println(demo04.getDe());
    }
}

public class demo04 {
    //private static demo04 de=new demo04();//在这个类中创建唯一的对象,并用静态进行修饰
    static  demo04 de;
    private demo04(){//针对创建唯一对象的类,私有化构造器
    }
    //饿汉式
    /*public static demo04 getDe(){
        return de;
    }*/

    //懒汉式
    public static demo04 getDe(){
       if(de==null){
           de=new demo04();
       }
       return de;
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值