static关键字——面试前简单总结

static关键字

  1. 静态static关键字
  2. 静态static关键字修饰成员变量
  3. 静态static关键字修饰成员方法
  4. static内存图
  5. 静态代码块

首先笔者通过视频的学习,来总结学习知识,避免遗忘,应对接下来的校招。

今天来解释一下在初涉编程语言时,总是让人搞不清楚用途的static关键字,用比较简单的方法介绍一下。

静态static

这是个什么意思呢,静态,顾名思义,就是不动的,就是不管外界怎么变化,我就在那里不会理你。相当于说他有一套自己的规则区别于你们一般的人。
再来举例一个简单的比喻:
笔者和我的同学,都属于17级xxx系xxx专业xx班的一个同学,我们有一个共同的特点,就是我们都是学生。那么我们的共同拥有的属性,名字,性别,年龄 ,班级等,组合在一起就是一个学生类,现在声明了几个对象,赋予了不同的姓名,年龄等等,但是班级确实一样的,并不会随着我们不同的人不一样就改变,那么班级就是一个静态的。
我这么说大概就有了一点理解了吧。

修饰成员变量

如果一个成语那变量使用了static关键字,那么这个变量就不再属于自己了,而是属于变量,多个对象共享同一份数据。

什么意思呢?
用一段简单的代码来说明一下:

public class student {
    static String classRoom;
    String name;
    int age;

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

public class staticDemo {
    public static void main(String[] args) {
        student one = new student("yy",19);
        one.classRoom = "XXX班";
        System.out.println(one.name + one.age + one.classRoom);

        student tow = new student("ll",23);
        System.out.println(tow.name + tow.age + tow.classRoom);
    }

}

这两段代码不太严谨,但是为了演示方便,我就为了方便先这么写,如果run一下就会发现,两个对象的classRoom的值是相同的,但是我们只修改了one的值,现在大概就能明白了一点了吧,静态static就是通过这个类所定义的所有对象,都共享同一个值,改变了一个,全部都要改变,但是这种说法还不太严谨,到这里先这样说。

静态static修饰成员方法

一旦用了static修饰成员方法,那么这个方法就成了一个静态方法,静态方法不属于对象,而属于类的。
如果没有static关键字,那么必须先创造对象,然后通过对象才能使用它。
如果有static关键字,那么不需要创造对象,直接通过类名就可以使用它。

什么意思?通过一段简单的代码就能明白了。

public class student {
    static String classRoom;
    String name;
    int age;

    public student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public  void example_one(){
        System.out.println("成员方法调用了");
    }
    public  static void example_tow(){
        System.out.println("静态方法点用了");
    }
}

public class staticDemo {
    public static void main(String[] args) {
        student one = new student("yy",19);
        one.classRoom = "XXX班";

        //调用成员方法
        one.example_one();

        //调用静态方法
        one.example_tow();    //正确,但不推荐使用
        student.example_tow();//正确,推荐使用

    }

}

我重写了之前的两段代码,加入了两个成员方法,其中的一个就是静态的,然后调用了两个方法。
成员方法的调用我就不说了,大家都在用。主要是在于静态方法,以上两种,用类和对象都可以调用,但是你在写的时候就能发现,编译器可能也会推荐你使用第二种方法,为什么会有两种方法呢?就是上面我所说的,静态方法不属于对象,而属于类。同理静态成员也如此,所以我建议把前面的一句代码也改一下:

one.classRoom = "xxx班";
//改为
student.classRoom = "xxx班";

总结如下:
无论成员变量还是成员方法,如果有了static,都推荐使用类名称来进行调用
静态变量:类名称.静态变量
静态方法:类名称.静态方法()

关于静态方法还有几点注意事项:
1、静态不能直接访问非静态
原因,因为内存当中是先有了静态内容,后又了非静态内容
2、静态方法不能用“this”
原因,this代表当前对象,谁调用方法,谁就是当前对象

写端代码,应该就能明白了:

public class student {
    static String classRoom;
    String name;
    int age;

    public student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public  void example_one(){
        System.out.println("成员方法调用了");
        name = "yy";
        classRoom = "xxx班";
        System.out.println(this);
    }
    public  static void example_tow(){
        System.out.println("静态方法调用了");
        //name = "yy";  代码会报错
        classRoom = "xxx班";
        // System.out.println(this);   代码会报错
    }
}

以上代码有兴趣可以去run一下试试,就能明白其中的结果了。

静态static的内存图

在这里插入图片描述
上面这张图的意思就是很明显,static申请的变量,他是存储在方法区的一个专门的区域,叫做静态区,类调用的时候不会去堆里寻找,而是直接渠道方法区。

静态代码块

等会一段代码直接上,首先我们必须要记住两点
1、静态代码块执行唯一一次。
2、静态内容总是优先于非静态,所以静态代码块比构造方法限制性

public class person {
    static {
        System.out.println("静态代码块运行了");
    }

    public person() {
        System.out.println("构造方法执行了");
    }
}

public class staticDemo {
    public static void main(String[] args) {
      person one = new person();
    }

}

自己去试一下就能明白了。

静态代码块的典型用途:
用来一次性对静态成员变量进行赋值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值