关于Java中static的使用有以下四种情况:

1、静态成员变量
        被static修饰的成员变量,叫静态成员变量或类变量;没有被static修饰的变量,叫实例变量。

两者的区别是: 
        静态成员变量在内存中只有一分拷贝(节省内存),JVM只为静态成员变量分配一次内存,在加载类的过程中完成静态成员变量的内存分配,可用类名直接访问(方便),当然也可以通过对象实例来访问(但是这是不推荐的)。 所以当静态成员变量内存分配好了后,所有的实例对象共同维护静态成员变量(类变量),任何一个对象对实例变量的修改都会影响到其他对象实例对该变量的访问。
        对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
2、静态成员方法
        静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和静态成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
        因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
3、静态代码块
        static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

静态代码块在类加载时仅仅执行一次,而代码块在类加载时不执行,而是在每次对象创建时都会执行,并且先于构造函数执行。

4、静态嵌套类

为了生成对立于外部类对象的嵌套类对象,就需要将嵌套类生命为static。

实例代码:

public class Test {
// 嵌套类
public class InnerClass { } // 静态嵌套类
public static class StaticInnerClass {
public StaticInnerClass() {
System.out.println("--静态嵌套类构造器执行。");
}
} // 静态成员变量
public static String param = "--静态成员变量值。";
// 静态代码块
static {
System.out.println("--静态代码块执行。");
}
// 代码块
{
System.out.println("--代码块执行。");
} // 静态成员方法
public static void StaticMethod() {
System.out.println("--静态成员方法执行。");
} // 构造器
private Test() {
System.out.println("--构造器执行。");
} // Main
public static void main(String[] args) {
Test app1 = new Test();
Test app2 = new Test();
System.out.println("------------两个对象生成完成。----------------");
// 使用类名调用静态成员方法
Test.StaticMethod();
// 使用实例对象调用静态成员方法
app1.StaticMethod();
// 使用类名调用静态成员变量
System.out.println(Test.param);
// 使用实例对象调用静态成员变量
System.out.println(app1.param);
// 所有对象共同维护静态成员变量
System.out.println(app2.param);
Test.StaticInnerClass sobj = new Test.StaticInnerClass();
}
}
运行结果:
--静态代码块执行。
--代码块执行。
--构造器执行。
--代码块执行。
--构造器执行。
------------两个对象生成完成。----------------
--静态成员方法执行。
--静态成员方法执行。
--静态成员变量值。
--静态成员变量值。
--静态成员变量值。
--静态嵌套类构造器执行。

Java类中static的用法的更多相关文章

  1. java 类中 static 的使用

    在类中 static 主要修饰变量,方法及代码块.大致的执行和使用,据个人理解如下: 1.修饰变量: 在修饰变量时,如 ,表示该变量是静态变量,也可称为类变量.当当前变量是静态变量时,该变量被该类的所 ...

  2. java类中定义接口

    今天看到一个java类中定义了接口,写个备忘录,记录一下 package com.gxf.test; public class Test_interface { public interface sh ...

  3. JAVA语言中冒号的用法

    近来由于本人要介入android平台的开发,所以就买了本JAVA语言的书学习.学习一段时间来,我的感觉是谭浩强就是厉害,编写的<C编程语言>系列丛书不愧是经典.书中对C语言的介绍既系统又全 ...

  4. java 类中的细节

    java 中类: 类是用于描述统一类型的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态和动态属性. 举例: 瓶子静态: 有一个口.长长的形状-->java类中的成员变量动态属性: 可以 ...

  5. java stream中Collectors的用法

    目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collectors ...

  6. Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决)

    今天重装系统,安装了新的Myeclipse后,导入之前的项目后,,出现了乱码问题.乱码问题主要是java类中的注释,而jsp页面中汉字却完好如初: 右键项目,查看项目的编码格式,UTF-8,把java ...

  7. Java类中中文问题

    一个奇怪问题 java类中要保存一个xml文件到数据库,2种传值方式其中1种不知何故会最终导致解析xml时报错. xml文件内容由StringBuffer定义,其中一段内容如下: sb.append( ...

  8. thymeleaf模板引擎调用java类中的方法(附源码)

    前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...

  9. java类中根据已有的变量复写类的toString方法

    java类中根据已有的变量复写类的toString方法: 在该类中定义好变量之后,shift+alt+s,从出现的列表中点击gemerate toString,就会自动生成对应的toString方法.

随机推荐

  1. Bootstrap——面包屑导航(Breadcrumbs)

    面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式. Bootstrap 中的面包屑导航(Breadcrumbs)是一个简单的带有 .breadcrumb 类的无序列表. <o ...

  2. kali linux 2019.4设置为中文方法

    就在前天,2019年11月26日,kali Linux官网发布了最新版本:Kali Linux 2019.4发行版,此版本和之前相比变动很大,系统界面.主题.壁纸都灿然一新. Kali Linux20 ...

  3. 2019年12月2日Linux开发手记

    开始学习在Linux下视频源捕获驱动框架,也就是V4L2(video4linux),本次关于v4l2的知识准备主要在于其的官方例程,理解官方例程也就差不多掌握了v4l2的基本内容.例程在:http:/ ...

  4. mysql中给查询出的结果集添加自增序号

    select (@i:=@i+1) i,emp.* from emp,(select @i:=0) it 按部门分组并按薪资总和从大到小排序求薪资总和第二高的部门名称和薪资总和:select c.en ...

  5. 【开发工具 - Android Studio】之AndroidStudio使用笔记

    一.关闭自动更新: 问题:刚刚安装Android Studio的童鞋可能会遇到这样一个问题:Android Studio在打开的时候一直在下载一些东西,浪费很多时间,而且最终大多都会显示下载失败等等, ...

  6. Linux权限基础

    Linux权限基础 四种权限大类 基本权限 特殊权限 隐藏权限 file ACL权限 三种基本权限 r(read) 读是基本权限,没有读权限其他的一切操作都会被限制 读 4 w(write) 写 2 ...

  7. 2019-2020-1 20199304《Linux内核原理与分析》第一周作业

    通过对Linux基础课程的学习,我对Linux的背景以及和Windows的区别有了了解, Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠 ...

  8. 微信小程序——动态修改页面数据(和样式)及参数传递

    1.1.1动态修改页面数据 在小程序中我们经常要动态渲染数据,对于新手而言我们常常遇到修改的数据在控制台显示和页面显示不一致,因为我们用“=”修改数据的,这种是可以修改,但无法改变页面的状态的,还会造 ...

  9. JQuery基础之获取和设置标签内容

    JQuery基础之获取和设置标签内容方法,如下图: 代码实现: <script src="JS/jquery-1.12.4.min.js"></script> ...

  10. virtualenv 在windows下的简单应用

    https://docs.python.org/zh-cn/3/tutorial/venv.html cmd下的操作: pip  install virtualenv pip install virt ...