在网上查阅资料,静态大约分为这几部分:修饰成员变量;修饰成员方法;静态代码块;静态导包,下面会用代码一一展示:

修饰成员变量:

一个类中,使用static修饰成员变量后,该变量变为全局变量,当再次new这个类时,该变量不会被初始化,也就是说如果实例化两个这个类的对象,改变其中一个静态变量的值,另一个对象的静态变量的值也会改变。

public class StaticTest {
private String st1 = "abc";
private static String st2 = "abc"; public String getSt1() {
return st1;
} public void setSt1(String st1) {
this.st1 = st1;
} public static String getSt2() {
return st2;
} public static void setSt2(String st2) {
StaticTest.st2 = st2;
} public static void main(String[] args) {
StaticTest staticTest1 = new StaticTest();
staticTest1.st2 = "def";
staticTest1.st1 = "def";
StaticTest staticTest2 = new StaticTest();
System.out.println("st1="+staticTest2.st1);
System.out.println("st2="+staticTest2.st2);
}
}

运行结果:

st1=abc
st2=def Process finished with exit code 0

看这段代码,StaticTest类里面定义了两个字符串变量,一个是静态的,一个是非静态的。后面实例化了两个对象,给staticTest1的两个变量赋值,展示staticTest2两个变量的值,发现staticTest2的静态变量的值发生了改变。

修饰成员方法:

修饰成员方法,可以直接用类名.方法名来调用该方法,当然,也可用类名.静态变量名来获取静态变量的值。静态方法可以调用静态变量:

public class StaticTest {
private String st1 = "abc";
private static String st2 = "abc"; public String getSt1() {
return st1;
} public void setSt1(String st1) {
this.st1 = st1;
} public static String getSt2() {
return st2;
} public static void setSt2(String st2) {
StaticTest.st2 = st2;
} public static void main(String[] args) {
System.out.println(StaticTest.getSt2());
System.out.println(StaticTest.st2);
StaticTest.setSt2("def");
System.out.println(StaticTest.getSt2());
System.out.println(StaticTest.st2);
}
}

运行结果:

abc
abc
def
def Process finished with exit code 0

还是刚才的代码,做一点改变,最后几行可以看到,调用类里面的getSt2()方法可以直接用类来调用,这样可以减少资源的浪费。

静态代码块:

静态代码块跟静态变量差不多:主要是体现在初始化,在初次初始化运行,再次初始化时静态代码块不会再次运行:

public class StaticTest {
private String st1 = "abc";
private static String st2 = "abc";
public StaticTest() {
}
static {
System.out.println("静态代码块执行");
}
public String getSt1() {
return st1;
} public void setSt1(String st1) {
this.st1 = st1;
} public static String getSt2() {
return st2;
} public static void setSt2(String st2) {
StaticTest.st2 = st2;
}
}
public class Test {
public static void main(String[] args) {
StaticTest staticTest = new StaticTest();
StaticTest staticTest1 = new StaticTest();
}
}

运行结果:

静态代码块执行

Process finished with exit code 0

可以看到,StaticTest类初始化了两次,但是只运行了一次静态代码块。

静态导包:

将类的方法直接导入到当前类,直接使用方法名即可调用该方法:

import Statictest.StaticTest;
import static Statictest.StaticTest.getSt2;
public class Test {
public static void main(String[] args) {
System.out.println(getSt2());
}
}

运行结果:

静态代码块执行
abc Process finished with exit code 0

直接打印静态变量的值。

Java学习 1.5——静态Static的作用与用法的更多相关文章

  1. Java中static变量作用和用法详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  2. java学习(四)static静态变量 和this

    java中的this /* this:是当前类的对象引用.简单的记,它就代表当前类的一个对象. 注意:谁调用这个方法,在该方法内部的this就代表谁. this的场景: 解决局部变量隐藏成员变量 */ ...

  3. Java 静态static 关键字作用

    静态的方法1.可以通过类名打点访问2.不能使用this关键字3.不能访问非静态的属性和方法 /* * 静态的方法: * 1.属于类的方法,可以通过类名打点访问 * 2.方法中不能使用this关键字 * ...

  4. 【Java学习笔记】静态导入

    package p2; //import static java.util.Collections.max; import java.util.ArrayList; import static jav ...

  5. Java学习日记-5 关键字static和final 以及接口

    乱入:表达式中的自动类型转换 char,short,byte都升级为int类型进行运算,结果为int,但其原变量类型并不改变. 所以,byte b = 10;  b = b*b; 编译时会报错.但是写 ...

  6. 5.JAVA基础复习——JAVA中的static关键字作用与用法

    static关键字: 特点: 1.static是一个修饰符,用于修饰成员.(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量. 2.static修饰的成员被所有的对象共享. 3. ...

  7. java 抽象(abstract) 构造 静态(static) 总结--2017-03-02

    抽象类:不能实例化!子类继承抽象类, 实例化子类对象才可以调用, 多态的体现; 抽象方法:必须被重写才能被调用; 静态方法:类名直接调用,或者实例化对象调用; 构造方法:new后面的括号里面带参数,就 ...

  8. Java学习(final、static关键词)

    final关键词 概念:final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量.不能修饰构造方法. 特点: 1.final修饰的类不可以被继承,但可以继承别的类 ...

  9. java 抽象方法 能用 静态 static 修饰,或者 native 修饰 么

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha static与abstract不能同时使用 用static声明方法表明这个方法在不生成类 ...

随机推荐

  1. SQLite进阶-17.视图

    目录 视图(View) 操作视图 更新视图 删除视图 查看所有的视图 视图(View) 视图是一个预定义的SQLite查询的形式存在的表的组合. 可以包含一个表的所有行或从一个或多个表选定行.可以从一 ...

  2. 知乎Python后端面试总结

    一面 写个快速排序热热身,分析一下复杂度,如果不使用额外的空间,应该怎么写? 说一下Flask中g是怎么实现的,原理是什么? 说一下浏览器从输入url到页面渲染的过程,越详细越好: 了解web安全吗? ...

  3. 【php设计模式】单例模式

    实现单例的三个关键点: 1.使用一个静态成员来保持一个单例实例 2.一个私有的构造方法使得该类只能在类的内部方法中被实例化 3.在实例化对象的静态方法中,先判断静态变量是否已经被赋值,如果赋值则返回该 ...

  4. 微信小程序 基本介绍及组件

    创建项目 微信开发工具深入介绍 https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html 基本项目目录 1. 配置 ...

  5. fiddler笔记:统计选项卡(Statistics)

    Request Count 选中的Session数. Bytes sent Http请求头和请求体中向外发送的字节总数. Bytes received HTTP请求头和请求体中接收到的所有字节数. R ...

  6. C#数字前补0

    [TestMethod] public void Test8() { ; string b = string.Format("{0:000000}", a); , '); }

  7. plsql developer字符集和oracle字符集不一致的解决方法(转)

    如果oracle安装选择的字符集与PLSQL Developer的字符集不同,则打开 PLSQL Developer时会提示字符不一致可能造成问题: 定位到注册表的以下位置: HKEY_LOCAL_M ...

  8. connect() failed (111: Connection refused) while connecting to upstream的解决

    遇到这种情况, 首先 1.检查php-fpm是否启动---------如果没启动->启动, 2.用命令 netstat -ant | grep 9000 查看php-fpm进程,如果没启动-&g ...

  9. 轮播图--使用原生js的轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. pycharm 报错 ModuleNotFoundError: No module named 'distutils.core'

    之气的虚拟机不好使了,重新装了最新版本,安装了ubuntu18.4,然后安装pycharm,但新建项目的时候报错: ModuleNotFoundError: No module named 'dist ...