java中static关键字简介

static静态关键字:

static关键字可以修饰成员变量和成员方法,被修饰的成员是属于类的,而不是简简单单的属于某个对象,也就是说可以不用通过对象调用,而是通过类直接调用。

类变量(静态变量):被static修饰的成员变量称为类变量。当创建对象后,各个对象都共享同一个类变量的值,任何对象都可以更改类变量的值,也可以在不创建对象的情况下对该类进行操作。

静态方法:被static修饰的方法称为静态方法,此方法不属于对象,而是属于类。静态方法不能直接访问成员变量和成员方法,可以直接访问类变量和静态方法;静态方法中不能使用this关键字

定义一个包含静态变量和静态方法的类:

// 定义一个有static关键字修饰成员变量的标准类:
public class StaticKey{
    // 定义成员变量:
    private String names;
    private int age;
    // 定义成员方法:
    public String gowhere(){
        return ",通过成员方方法去水立方";
    }
    // 1-1.类变量的定义格式:static 数据类型 变量名,如:
    static String bus;//类变量可以直接通过类名点.访问,也可以通过对象.访问,但是不推荐使用对象访问
    // 1-2.静态方法的定义格式:修饰符 static 返回值类型 方法名(){},如:
    public static String gowherestatic(){
        // System.out.println(this.names+"通过静态方法去迪士尼");静态方法不能直接访问成员变量和成员方法,也不能使用this关键字,静态方法只能访问静态成员。
        return ",通过静态方法去迪士尼";
    }


    // 2.该类的无参数构造方法:每创建一次对象就会执行一次该构造方法
    public StaticKey(){
        System.out.println("无参数构造方法执行了");
    }
    // 3.该类的全参数构造方法:
    public StaticKey(String na,int ag){
        this.names = na;
        this.age = ag;
    }
    // 4.names成员变量的get-和set-方法:
    public String getNames(){
        return names;
    }
    public void setNames(String na){
        this.names = na;
    }
    // 5.age成员变量的get-和set-方法:
    public int getAge(){
        return age;
    }
    public void setAge(int ag){
        this.age = ag;
    }
}

通过上面的类实例化对象:


public class Passenger{
    public static void main(String[] args){
        // 1.通过StaticKey类实例化对象:
        StaticKey passenger1 = new StaticKey("jack",18);
        StaticKey passenger2 = new StaticKey("sherry",17);
        // 没创建一次对象就会执行一次无参数构造方法,打印2次:全参数构造方法执行了

        // 2.访问类变量:(不推荐通过对象访问类变量)
        passenger1.bus = "大巴-001";
        // 3-1.测试:通过对象访问类变量(不推荐使用)
        System.out.println("姓名:"+passenger1.getNames()+",年龄:"+passenger1.getAge()+",大巴:"+passenger1.bus);//姓名:jack,年龄:18,大巴:大巴-001
        System.out.println("姓名:"+passenger2.getNames()+",年龄:"+passenger2.getAge()+",大巴:"+passenger2.bus);//姓名:sherry,年龄:17,大巴:大巴-001
        
        // 3-2:通过类直接访问类变量:(推荐使用)
        StaticKey.bus = "大巴-002";
        System.out.println("姓名:"+passenger1.getNames()+",年龄:"+passenger1.getAge()+",大巴更改为:"+StaticKey.bus);//姓名:jack,年龄:18,大巴更改为:大巴-002
        System.out.println("姓名:"+passenger2.getNames()+",年龄:"+passenger2.getAge()+",大巴更改为:"+StaticKey.bus);//姓名:sherry,年龄:17,大巴更改为:大巴-002
        
        // 4-1:通过对象调用成员方法:
        System.out.println("姓名:"+passenger1.getNames()+",年龄:"+passenger1.getAge()+",大巴更改为:"+StaticKey.bus+passenger1.gowhere());//姓名:jack,年龄:18,大巴更改为:大巴-002,通过成员方方法去水立方
        System.out.println("姓名:"+passenger2.getNames()+",年龄:"+passenger2.getAge()+",大巴更改为:"+StaticKey.bus+passenger2.gowhere());//姓名:sherry,年龄:17,大巴更改为:大巴-002,通过成员方方法去水立方
        // 4-2:通过对象调用静态方法,不推荐使用,推荐使用类调用静态方法:(通过对象访问静态方法最终会被编译为通过类访问静态方法)
        System.out.println("姓名:"+passenger1.getNames()+",年龄:"+passenger1.getAge()+",大巴更改为:"+StaticKey.bus+passenger1.gowherestatic());//姓名:jack,年龄:18,大巴更改为:大巴-002,通过静态方法去迪士尼    
        System.out.println("姓名:"+passenger2.getNames()+",年龄:"+passenger2.getAge()+",大巴更改为:"+StaticKey.bus+passenger2.gowherestatic());//姓名:sherry,年龄:17,大巴更改为:大巴-002,通过静态方法去迪士尼 
        System.out.println("姓名:"+passenger1.getNames()+",年龄:"+passenger1.getAge()+",大巴更改为:"+StaticKey.bus+StaticKey.gowherestatic());//姓名:jack,年龄:18,大巴更改为:大巴-002,通过静态方法去迪士尼  
        System.out.println("姓名:"+passenger2.getNames()+",年龄:"+passenger2.getAge()+",大巴更改为:"+StaticKey.bus+StaticKey.gowherestatic());//姓名:sherry,年龄:17,大巴更改为:大巴-002,通过静态方法去迪士尼

        /*
        总结:
        成员方法可以访问成员变量和静态变量,静态方法不能直接访问非静态,因为在内存中是先有静态内容,后有非静态内容的,即前者无法访问后者,后者可以访问前者。
        访问静态时,与对象无关,在内存中直接通过方法区-静态区访问,而不是通过某个对象间接访问。
        */
    }
}

静态代码块:
直接在类中通过关键字static修饰大括号,特点:在某个java文件中第一次用到本类时只会执行一次,再使用此类将不再执行静态代码块中的内容(另一个java文件中会再次执行),如:

public class StaticBlock{
    static {
        System.out.println("这里是静态代码块");//这里只会执行一次,那就是在第一次使用到该类的时候,后面再使用到不会再执行静态代码块中的内容。
    }
}

使用静态代码块类的实例对象:

public class StaticBlockObj{
    public static void main(String[] args){
        StaticBlock staticblock = new StaticBlock();
        StaticBlock staticblock2 = new StaticBlock();
    }
}

另一个java文件源码:

public class StaticBlockObj2{
    public static void main(String[] args){
        StaticBlock staticblock = new StaticBlock();
        StaticBlock staticblock2 = new StaticBlock();
    }
}

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦海123

快乐每一天!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值