Static

static是什么

  • static是静态的意思,可以修饰成员变量和成员方法
  • static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改

成员变量可以分为两类

  • 静态成员变量(有static修饰,属于类,内存中加载一次): 常表示如在线人数信息、等需要被共享的信息,可以被共享访问,同一个类中的静态成员变量的访问可以直接访问省略类名

类名.静态成员变量 (推荐)

对象.静态成员变量 (不推荐)

public class User{
    public static String onlineNumber = 161;
}
  • 实例成员变量(无static修饰,存在于每个对象中): 常表示姓名name、年龄age等属于每个对象的信息
public class User{
    public static String onlineNumber = 161;
    //实例成员变量
    private String name;
    private int age;
    ...
}
两种变量在什么情况下定义
  • 静态成员变量 : 用来表示需要被共享的信息
  • 实例成员变量 : 属于每个对象,且每个对象的信息不同时

成员方法的分类

  • 静态成员方法(有static修饰,归属于类),建议用类名访问,也可以用对象访问,同一个类中可以省略类名不写
  • 实例成员方法(无static修饰,归属于对象),只能用对象触发访问
两种方法使用场景
  • 表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法
  • 如果该方法是以执行一个公用功能为目的,则可以申明成静态方法

static访问注意事项

  • 静态方法只能访问静态的成员,不可以直接访问实例成员
  • 实例方法可以访问静态的成员,也可以访问实例成员
  • 静态方法中是不可以出现this关键字的

工具类

类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的

好处

  1. 方便调用
  2. 提高了代码的复用(一次编写,处处可用)
为什么工具类中的方法不用实例方法做?
  • 实例方法需要创建对象调用
  • 此时用对象只是为了调用方法,这样只会浪费内存

工具类定义时的其他要求

由于工具里面都是静态方法,直接用类名即可访问,因此,工具类无需创建对象,建议将工具类的构造器进行私有

代码块

  • 代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外
  • 在Java类下,使用{}括起来的代码被称为代码块

代码块分为

  • 静态代码块:

    • 格式:static{}
    • 特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次
    • 使用场景:在系统启动类加载的时候做一些静态数据初始化的操作,以便后续使用
    public class test{
        public static String name;
        //静态代码块,随着类一同加载,优先于main方法
        static{
            System.out.println("静态代码块执行了")
            name = "小王";
        }
        
        public static void main(String[] args){
            System.out.println("main方法执行了")
        }
    }
    
  • 构造/实例代码块 (使用很少)

    • 格式:{}
    • 特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
    • 使用场景:初始化实例资源
    public class test2{
        /*
        	实例代码块被触发执行
        	无参构造器被触发执行
        	实例代码块被触发执行
        	无参构造器被触发执行
        */
        private String name;
        
        public test2(){
            System.out.println("无参构造器被触发执行");
            name = "张三";
        }
        
        //实例代码块,无static修饰,属于对象,每次构造对象时,都会触发一次执行
        {
            System.out.println("实例代码块被触发执行");
        }
        
        public static void main(String[] args){
            Test2 t1 = new Test2();
            Test2 t2 = new Test2();
            System.out.println(t2.name);
        }
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值