Java基础---static关键字

static关键字所修饰的属性或者方法为公共属性与方法可以在类没有实例化的情况下通过类名直接调用,而非static的属性或者方法则必须在实例化类之后才能够调用。

class Student{

    private String name;
    private Integer snum;
    static String collage;
    //构造方法 可以调用static属性
    public Student(String name,Integer snum,String collage){
        this.snum = snum;
        this.name = name;
        Student.collage = collage;
    }
    //定义一个static类型的方法,主类中可以在为实例化的情况下使用
    public static void tell1() {
        System.out.println("学院"+ collage );
    }
    //非static类型的方法,必须实例化之后才能够调用
     public void tell() {
     System.out.println("姓名"+this.getName()+"学号"+this.getSnum()+"学院"+ collage);
    }
}
//主类中在未实例化的情况下也可直接通过 类名.属性 的方式直接调用static类型的属性
public static void main(String[] args){
    Student.collage = "测试学院"; //未实例化的情况下直接调用static类型的属性
    Student.tell1();//未实例化的情况下直接调用static类型的方法
    Student s1 = new Student();
    s1.tell();//非stati类型的方法必须在实例化之后才能够使用
}

static类型的方法,不可以调用非static方法与非static属性,比如this关键字,此时会报错

public static void tell() {
  System.out.println("姓名"+this.getName()+"学号"+this.getSnum()+"学院"+ collage);
}//此时不可使用this关键字,报错

static类型的属性为公共属性,可以用来存储类中属性相同的值,避免每个类重复存储。

实例:比如在存储一个学院的学生信息时,此院学生的学院名称全部为相同的,每个学生的在存储信息时,都需要存一下学院信息这样的话,每个学生的信息中的学院信息都是独立的。这样的情况下就造成了学院名称这样一个属性的重复存储。

代码实例:collage属性不设置为static

class Teacher{
     String name;
     Integer age;
     String collage;
     public void tell(){
         System.out.println("姓名:"+ name + "年龄:" + age + "学院:" + collage);
    }
}
 public static void main(String[] args) {

        Teacher t1 = new Teacher();
        Teacher t2 = new Teacher();
        Teacher t3 = new Teacher();
        t1.name = "张三";t1.age = 25; t1.collage = "数计学院";
        t2.name = "李四";t2.age = 27; t2.collage = "数计学院";
        t3.name = "王五";t3.age = 28; t3.collage = "数计学院";
    }

内存分析:在这种情况下,不仅大量的存储的重复信息,且当collage属性发生变化时,修改此信息则变成了一个灾难。

在这里插入图片描述

变化:collage属性设置为static的情况下:

代码:

class Teacher{
     String name;
     Integer age;
     static String collage;
     public void tell(){
         System.out.println("姓名:"+ name + "年龄:" + age + "学院:" + collage);
    }
}
 public static void main(String[] args) {
     
        Teacher t1 = new Teacher();
        Teacher t2 = new Teacher();
        Teacher t3 = new Teacher();
        t1.name = "张三";t1.age = 25;
        t2.name = "李四";t2.age = 27;
        t3.name = "王五";t3.age = 28;
    }

则此时就把collage变成了公共属性供大家使用:

在这里插入图片描述

此时可以直接对collage进行赋值或者修改:

Teacher.collage = "信息学院";

则,所有的学生的collage属性就被成功的修改:

在这里插入图片描述

此时进行语句的输出结果可以看到,所有的学生用户的collage属性都被修改。

 public static void main(String[] args) {

        Teacher t1 = new Teacher();
        Teacher t2 = new Teacher();
        Teacher t3 = new Teacher();
        t1.name = "张三";t1.age = 25;
        t2.name = "李四";t2.age = 27;
        t3.name = "王五";t3.age = 28;
        Teacher.collage = "信息学院";
        t1.tell();
        t2.tell();
        t3.tell();
    }
/**
输出结果为:
姓名:张三,年龄:25,学院:信息学院
姓名:李四,年龄:27,学院:信息学院
姓名:王五,年龄:28,学院:信息学院
**/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值