博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。@TOC
一、背景
我们创建类时会指出那个类的对象的外观与行为。用new 创建那个类的一个对象,只有执行了 new 后,才会正式生成数据存储空间,并可使用相应的方法。但是这带来了下面的不足之处。
1、只想用一个存储区域来保存一个特定的数据,无论要创建多少个对象,甚至根本不创建对象。
2、是我们需要一个特殊的方法,即使没有创建对象,也可以调用的方法。
为了解决上面的问题,我们使用static关键字进行修饰。
static:修饰类变量和类方法,它也可以修饰内部类
二、用法
1、静态方法
“静态”方法可针对类调用,毋需一个对象,直接可以通过如下调用。
类名.方法名
注意静态方法,我们需要用到static关键字。
当声明一个方法是static时,就意味着这个变量或者方法不会与包含它的那个类的任何对象实例关联在一起。
我创建了一个静态方法recover(),举例如下。
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实例就直接调用了。
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,如下所示:
public static final double PI=3.1415926;
在程序中,可以采用下面的形式获得这个常量。
Math.PI
如果关键字static被省略,PI就变成了Math类的一个实例域。需要通过Math类的对象访问PI,并且每一个Math对象都有它自己的一份PI拷贝。
3、静态字段
下述代码能生成一个 static数据字段,并对其初始化:
public class StaticTest {
static int i = 47;
}
现在,尽管我们制作了两个StaticTest 对象,但它们仍然只占据StaticTest.i 的一个存储空间。这两个对象都共享同样的i。
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
此时,无论 st1.i 还是 st2.i 都有同样的值 47,因为它们引用的是同样的内存区域。
有两个办法可引用一个 static 变量,示例如下。
1、可通过一个对象命名它,如st2.i。
2、可直接用它的类名引用。
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关键字如何修饰变量和方法,可以参考一下,觉得不错的话,欢迎点赞、收藏、在看,欢迎微信搜索关注java基础笔记,后面会不断更新相关知识,大家一起进步。