Java类中static的用法
关于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的用法的更多相关文章
- java 类中 static 的使用
在类中 static 主要修饰变量,方法及代码块.大致的执行和使用,据个人理解如下: 1.修饰变量: 在修饰变量时,如 ,表示该变量是静态变量,也可称为类变量.当当前变量是静态变量时,该变量被该类的所 ...
- java类中定义接口
今天看到一个java类中定义了接口,写个备忘录,记录一下 package com.gxf.test; public class Test_interface { public interface sh ...
- JAVA语言中冒号的用法
近来由于本人要介入android平台的开发,所以就买了本JAVA语言的书学习.学习一段时间来,我的感觉是谭浩强就是厉害,编写的<C编程语言>系列丛书不愧是经典.书中对C语言的介绍既系统又全 ...
- java 类中的细节
java 中类: 类是用于描述统一类型的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态和动态属性. 举例: 瓶子静态: 有一个口.长长的形状-->java类中的成员变量动态属性: 可以 ...
- java stream中Collectors的用法
目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collectors ...
- Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决)
今天重装系统,安装了新的Myeclipse后,导入之前的项目后,,出现了乱码问题.乱码问题主要是java类中的注释,而jsp页面中汉字却完好如初: 右键项目,查看项目的编码格式,UTF-8,把java ...
- Java类中中文问题
一个奇怪问题 java类中要保存一个xml文件到数据库,2种传值方式其中1种不知何故会最终导致解析xml时报错. xml文件内容由StringBuffer定义,其中一段内容如下: sb.append( ...
- thymeleaf模板引擎调用java类中的方法(附源码)
前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...
- java类中根据已有的变量复写类的toString方法
java类中根据已有的变量复写类的toString方法: 在该类中定义好变量之后,shift+alt+s,从出现的列表中点击gemerate toString,就会自动生成对应的toString方法.
随机推荐
- 【01】主函数main
java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 首先,我们将探讨主函数main. java的主函 ...
- PHP 的 self 关键字用法
之前有人询问 self 关键字的用法,答案是比较明显的:静态成员函数内不能用 this 调用非成员函数,但可以用 self 调用静态成员函数/变量/常量:其他成员函数可以用 self 调用静态成员函数 ...
- 为什么 Redis 是单线程的?
以前一直有个误区,以为:高性能服务器 一定是 多线程来实现的 原因很简单因为误区二导致的:多线程 一定比 单线程 效率高.其实不然. 在说这个事前希望大家都能对 CPU . 内存 . 硬盘的速度都有了 ...
- Java字节码深度剖析
Java字节码文件查看 我们有一个类Test01,具体内容如下: package bytecode; public class Test01 { private int i = 0; public i ...
- 【Android - IPC】之Messenger简介
参考资料: 1.<Android开发艺术探索>第二章2.4.3 2.[Messenger完全解析] 1.Messenger概述 Messenger,译为“信使”,是Android中一种基于 ...
- 新手学分布式 - Envoy Proxy XDS Server动态配置的一点使用心得
Envoy Proxy 动态API的使用总结 Envoy Proxy和其它L4/L7反向搭理工具最大的区别就是原生支持动态配置. 首先来看一下Envoy的大致架构 从上图可以简单理解:Listener ...
- Windows的定时任务(Schedule Task)设置
一.设置 1 点击“开始” 2 点击“控制面板” 3 双击“任务计划” 4 双击“添加任务计划” 5 到了“任务计划向导”界面,点击“下一步” 6 点击“浏览”选择需要定时运行的程序(exe文件,ba ...
- linux下安装numpy,pandas,scipy,matplotlib,scikit-learn
python在数据科学方面需要用到的库: a.Numpy:科学计算库.提供矩阵运算的库. b.Pandas:数据分析处理库 c.scipy:数值计算库.提供数值积分和常微分方程组求解算法.提供了一个非 ...
- __getattribute__(self, obj) 这个方法中的obj这个参数
class Itcast(object): def __init__(self, subject1): self.subject1 = subject1 print("^^^^^^^---- ...
- 如何使用Git命令克隆仓库代码
今天我的电脑装了新系统,刚装了Git到电脑上,突然有一个大胆的想法,以后不适用可视化工具了. 要逐步锻炼我的命令的操作能力,不能太依赖可视化工具. 今天先记录一下如何使用git命令克隆仓库代码 git ...