首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >java基础之static关键字

java基础之static关键字

作者头像
jiankang666
发布2022-05-13 16:12:01
发布2022-05-13 16:12:01
3390
举报
文章被收录于专栏:java基础笔记java基础笔记
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者。

一、背景

  我们创建类时会指出那个类的对象的外观与行为。用new 创建那个类的一个对象,只有执行了 new 后,才会正式生成数据存储空间,并可使用相应的方法。但是这带来了下面的不足之处。 1、只想用一个存储区域来保存一个特定的数据,无论要创建多少个对象,甚至根本不创建对象。 2、是我们需要一个特殊的方法,即使没有创建对象,也可以调用的方法。   为了解决上面的问题,我们使用static关键字进行修饰。

static:修饰类变量和类方法,它也可以修饰内部类

二、用法

1、静态方法

  “静态”方法可针对类调用,不需要new一个对象,直接可以通过如下调用。

代码语言:javascript
复制
类名.方法名

  注意静态方法,我们需要用到static关键字。 当声明一个方法是static时,就意味着这个变量或者方法不会与包含它的那个类的任何对象实例关联在一起。   我创建了一个静态方法recover(),举例如下。

代码语言:javascript
复制
import java.io.UnsupportedEncodingException;

public class RecoverCodeUtils {

    public static void recover(String str) throws UnsupportedEncodingException {
        String[] charsets = new String[]{"windows-1252","GB18030","Big5","UTF-8"};
        for(int i = 0;i<charsets.length;i++){
            for(int j = 0;j<charsets.length;j++){
                if(i!=j){
                    String s = new String(str.getBytes(charsets[i]),charsets[j]);
                    System.out.println("原来编码假设是: "+charsets[j]+" ,被错误解读为:"+ charsets[i]);
                    System.out.println(s);
                    System.out.println();
                }
            }
        }
    }
}

static方法的一个重要用法就是在不创建任何对象的前提下,就可以调用他。 下面是我们的调用。我们可以看到,对于静态方法,我们没有new一个RecoverCodeUtils实例就直接调用了。

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //查出原来编码是什么类型,被错误解读为什么
        String str = "ÀÏÂí";
        RecoverCodeUtils.recover(str);
        //正常解码:
        String gb18030 = new String(str.getBytes("windows-1252"), "GB18030");
        System.out.println(gb18030);
    }
}

  最终结果如下:

原来编码假设是:GB18030 ,被错误解读为:windows-1252 老马 原来编码假设是:Big5 ,被错误解读为:windows-1252 橾鎮 原来编码假设是:UTF-8 ,被错误解读为:windows-1252 ����

2、静态常量

  类型本身具有的属性通过类变量体现,经常用于表示一个类型中的常量。比如Math类,定义了常用的常量PI,如下所示:

代码语言:javascript
复制
public static final double PI=3.1415926;

  在程序中,可以采用下面的形式获得这个常量。

代码语言:javascript
复制
Math.PI

  如果关键字static被省略,PI就变成了Math类的一个实例域。需要通过Math类的对象访问PI,并且每一个Math对象都有它自己的一份PI拷贝。

3、静态字段

  下述代码能生成一个 static数据字段,并对其初始化:

代码语言:javascript
复制
public class StaticTest {
        static int i = 47;
}

  现在,尽管我们制作了两个StaticTest 对象,但它们仍然只占据StaticTest.i 的一个存储空间。这两个对象都共享同样的i。

代码语言:javascript
复制
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();

  此时,无论 st1.i 还是 st2.i 都有同样的值 47,因为它们引用的是同样的内存区域。   有两个办法可引用一个 static 变量,示例如下。   1、可通过一个对象命名它,如st2.i。   2、可直接用它的类名引用。

代码语言:javascript
复制
    public static void main(String[] args) {
        StaticTest st1 = new StaticTest();
        StaticTest st2 = new StaticTest();
        System.out.println(st1.i);
        System.out.println(st2.i);
        StaticTest.i++;   //通过类名点静态变量加1
        System.out.println(st1.i);//发现我们的静态变量都加1变48了
        System.out.println(st2.i);
        st1.i++;  //通过实例名点静态变量加1
        System.out.println(st1.i);//发现我们的静态变量都加1变49了
        System.out.println(st2.i);
    }

  下面是我们的测试情况,跟我们在代码中备注的是一致的。

47 47 48 48 49 49

三、总结

  以上就是就是关于java基础static关键字的相关知识,重点介绍了static关键字如何修饰变量和方法,可以参考一下,觉得不错的话,后面会不断更新相关知识,大家一起进步。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java基础笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、用法
    • 1、静态方法
    • 2、静态常量
    • 3、静态字段
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档