Java中static关键字的基本介绍与使用

static

1.基本介绍

  1. static关键字在Java中主要用于内存管理。
  2. static 可以修饰变量,方法,代码块,嵌套类。

2. static用法

2.1 修饰成员变量

第一种用法:修饰成员变量此时被修饰变量称为静态成员变量、类变量、类成员。未被修饰的成员变量称为实例变量,非静态成员变量。

注意:
1.static修饰的成员变量是所有对象共享的,类实例化后不单属于每个对象,所 以应该使用类名去访问,当我们用对象访问时有警告。
2.类变量存储在方法区。
3.生命周期伴随类的一生,随类加载而创建,随类卸载而销毁。
4.在类内部,可以在任何方法中直接访问静态变量。

2.2静态成员变量初始化
  1. 直接赋值

public static String classRoom = “123”;

  1. 默认初始化

成员变量不赋值,默认int型为0,Boolean型为false等等

  1. 通过get和set方法进行初始化

public static int getSize(){
return size;
}
public static void setSize(int size){
Student.size = size;
}

  1. 构造对象时,在构造方法中进行赋值

public Student(String name,int age,int si){
this.name = name;
this.age = age;
size = si;
}

不建议此种方法,由于静态成员变量是属于类的,此时在构造对象时赋值,会将静态变量的值改变,不利于其他对象调用

2.2 修饰成员方法

第二种用法:修饰成员方法此时被修饰的方法称为静态成员方法、类方法。

由于我们对类里面的属性一般用private修饰,而成员方法通常用public修饰,当某个属性被static修饰时,此时我们在类外通过类名访问时,由于权限无法进行。就需要我们通过静态方法进行访问。

如图即为静态方法访问静态成员变量的过程

public class Student{
// ...
private static String classRoom = "123";
// ...
public static String getClassRoom(){
   return classRoom;
}
}
public class TestStudent {
public static void main(String[] args) {
   System.out.println(Student.getClassRoom());
}
}

注意:
1.静态方法也不属于某个对象,属于类是类方法。
2.通常建议使用类名进行访问,通过对象也可以进行访问。
3.不能在静态方法中访问任何非静态成员变量。调用非静态数据成员都需要对象的引用去访问,静态方法中不能使用thissuper关键字。
如图:
在这里插入图片描述

2.3 修饰代码块

  1. 代码块分为:

普通代码块,定义在方法中的代码块,只是用来区分代码块中的变量作用域,代码块中的变量只属于代码块,且此时代码按顺序执行,较少使用。

构造代码块,定义在类中的代码块,也称为实例化代码块、非静态代码块,一般用于初始化非静态的数据成员。构造代码块比构造方法先调用执行

静态代码块,使用static定义的代码块,一般用于初始化静态成员变量。

注意:
1.只要静态代码块所在的类被加载,静态代码块就会被执行。但是多次加载时,也只会被执行一次。
2.执行顺序(编译器编译完会改变顺序)静态代码块优于非静态代码块优于构造方法,对于所有的静态代码块按顺序执行。
3.实例化代码块(非静态代码块)只有在创建对象时才执行。

2.4 修饰类

java中一个类要被声明为static的,只有一种情况,就是静态内部类(内嵌类)。如在外部类声明为static的,程序会编译都不会通过。

1、静态内部类,跟静态方法一样,只能访问静态成员变量和方法,不能访问非静态方法和属性。
2、普通内部类,可以访问任意外部类的成员变量和方法。
3、静态内部类,可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。
4、静态内部类,可以单独初始化。

Inner i = new Outer.Inner();

普通内部类初始化:

Outer o = new Outer();
Inner i = o.new Inner();

注意:
1.如果类的构造器或静态工厂中有多个参数,设计这样类时,最好使用Builder模式,特别是当大多数参数都是可选的时候。
2.如果现在不能确定参数的个数,最好一开始就使用构建器即Builder模式。

适用场景:当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建时,考虑采用静态内部类的设计,在知道如何初始化静态内部类。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值