java中static的用法_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的用法相关推荐
- java中类成员的限定词_Java类中的限定词
java语言中有四种不同的限定词,提供了四种不同的访问权限. 1) private 类中限定为private的成员,只能被这个类本身访问. 如果一个类的构造方法声明为private,则其它类不能生成该 ...
- java 在一个类中定义类_Java 中程序代码必须在一个类中定义,类使用( )关键字来定义。_学小易找答案...
[填空题]每一个 else 子句都必须和它前面的一个距离它最近的 子句相对应. [单选题]有关类的说法,正确的是( ) [单选题]在JAVA中,无论测试条件是什么,下列( )循环体 将至少执行一次. ...
- java实体类中有枚举类型_当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?...
当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出? 问题: orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl ...
- java 在一个类中去调用另一个类中的对象数组
比如说,我在A类中创建了一个对象数组.想在B类中去使用这个A类中的数组.那么有两种方式 以下创建的数组都是类类型的数组 我觉得类类型数组的好处可以给数组中的每一个元素创建多个标签.并且可以对多个标签进 ...
- java的默认访问权限_java类的访问权限
1.解析 Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符. private: Java语言中对访问权限限制的最窄的修 ...
- java类中的static块_java类中static代码块的执行次数
java类中 static静态代码块的执行次数 1.在类加载的init阶段,类的类构造器中会收集所有的static块和字段并执行,static块只执行一次,由JVM保证其只执行一次. 2.直接看示例 ...
- java 静态方法重写_Java 类中可以覆盖静态方法吗?
Java技术栈 www.javastack.cn 打开网站看更多优质文章 Java 类中可以覆盖静态方法吗? 不,你不能在Java中覆盖静态方法,但在子类中声明一个完全相同的方法不是编译时错误,这称为 ...
- java optional 用法_Java 8中的Optional: 如何正确使用?
Java 8中出现一个新的Optional类型,和其他语言中null的替代品类似. 本文将讨论如何使用这种新类型,即它的主要用例是什么. 什么是Optional类型? Optional是对单个对象包装 ...
- java 类的域_Java类中对象域的初始化
java中,一个类的域(或者说类的属性,类的数据成员)可以是基本数据类型,也可以是对象的引用.对象域如果没有被初始化,会被置为null,如果在置为null的引用上调用方法,我们就会得到一个运行时错误. ...
最新文章
- linux ba 模拟,在你的 Python 游戏中模拟引力 | Linux 中国
- osgCallback的实现方法及原理
- 使用JPA和Hibernate有效删除数据
- HDFC的完整形式是什么?
- framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)
- 求解相机参数Camera Calibration
- 互联网java面试_互联网java面试宝典
- 一文带你认识队列数据结构
- CSS表单元素样式设置
- SD/TF卡驱动(一)--------SD卡相关简介
- 《动态壁纸 : 手机壁纸大全》EULA条款协议
- Docker-1 Docker简介,CentOS8安装Docker-ce,配置镜像加速器
- 修改yum源带来的问题 curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).
- Arduino - 继电器
- 解决B站不能倍速播放
- 不写一行代码就能开发?是真的,试试应用魔方吧
- 【Unity3D】Unity声音与录音与麦克风实时播放
- android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...
- 使用console.time打印代码运行时间
- NTC MF58 10k J3950K ±5% 玻封热敏电阻数据CSV