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

修饰成员变量:

一个类中,使用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. 回炉重铸系列之javaEE基础

    这篇文章主要介绍 servlet filter listener interceptor 之 知识点.博文主要从 概念,生命周期,使命介绍其区别.详情如下:   概念 生命周期 使命 servlet ...

  2. Python Des加密与解密实现软件注册码、机器码

    原理 判断路径下是否存在识别文件,若存在就解密对比,若不存在就进入机器码注册: 获取系统C盘序列号作为识别ID,并添加随机数作为混淆,生成最终机器码. 将机器码发给软件开发者,开发者将机器码解密后,添 ...

  3. PB做的托盘程序(最小化后在左下角显示图标)

    见‘文件’资源

  4. RestShrap Simple REST and HTTP Client for .NET 了解

    最近做一个项目,需要上传文件到文件服务器, 文件服务器是 内部的webapi形式的接口.经朋友推荐使用restshrap , 例子: //上传文件 var request=new RestClient ...

  5. 【C++】如何提高Cache的命中率,示例

    参考链接     https://stackoverflow.com/questions/16699247/what-is-a-cache-friendly-code 只是堆积:缓存不友好与缓存友好代 ...

  6. MySQL自测测试

    #建学生信息表student create table student ( sno varchar(20) not null primary key, sname varchar(20) not nu ...

  7. Java面试题之Java虚拟机垃圾回收

    JVM的垃圾回收机制,在内存充足的情况下,除非你显式的调用System.gc(),否则不会进行垃圾回收:在内存充足的情况下垃圾回收会自动运行. 一.引用计数算法 1.定义:引用计数算法会给对象添加一个 ...

  8. VUE实现简单的全选/全不选

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

  9. PropertiesUtils(普遍做法)

    public class PropertiesUtil{ private static Properties properties; static{ InputStream in = null; tr ...

  10. 使用Eclipse开发Java应用并部署到SAP云平台SCP上去

    1. 首先根据这个链接配置好Eclipse. 确保SAP Cloud Platform Tools for Java正确安装. 确保neo SDK的路径配置正确: 我使用的是下图这个SDK:neo-j ...