staticfinal
static关键字
static可以修饰类,只有一种情况,就是静态内部类,外部类不可用static修饰。
1.静态内部类只能访问外部类的静态成员变量和静态方法
2.静态内部类可以声明普通变量和普通方法。
3.静态内部类可以单独初始化。
new OuterClass.InnerClass();
普通内部类创建:
OuterClass oc = new OuterClass();
oc.new InnerClass();
static可以修饰成员变量和成员方法。也就是类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。
static关键字用途:
方便在没有创建对象的情况下进行调用(方法/变量)。
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
static方法
static方法也成为了静态方法。对于静态方法来说是没有this的,因为不依赖于对象的创建。所以在静态方法中不能访问类的非静态成员变量和非静态方法,因为非静态成员变量和非静态方法都必须依赖于具体的对象才能被调用。但是非静态成员方法是可以访问静态成员方法和静态成员变量的。
1.public class StaticTest{2. private static String name = "aaa";
3. private String address = "中国";
4.
5. public StaticTest(){6.
7. }
8.
9. public void test1(){10. System.out.println(name);
11. System.out.println(address);
12. test2();
13. }
14.
15. public static void test2(){16. System.out.println(name);
17. System.out.println(address);//报错
18. test1();//报错
19. }
20.}
静态方法中调用非静态成员变量:报错。因为此时是编译期,并没有对象生成,address变量还不存在。
静态方法test2()中调用非静态方法test1():报错。这是因为,编译器无法预知在非静态成员方法test1()中是否访问了非静态成员变量,所以也禁止在静态方法中调用非静态成员方法。
内存:static方法是属于类的,非实例对象,在JVM加载类时,就已经存在内存中,不会被虚拟机GC回收掉,这样内存负荷会很大,非static方法会在运行完毕后被虚拟机GC掉,减轻内存压力。
static变量
1.静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化。
2.非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
3.static成员变量初始化顺序按照定义的顺序来进行初始化
静态初始化块
在类初次被加载时,会按照静态初始化块的顺序来执行每个块,并且只会执行一次。
实际应用:一般的工具类中的工具方法就可以定义为静态的,通过类名直接调用。
类加载过程 分为 加载、链接、初始化
静态变量是在初始化阶段完成的初始化,分配用户定义的值。在链接的准备阶段完成系统的初始化,分配默认值。被final修饰的静态变量,在准备阶段就会赋用户定义的值
final关键字
final可以修饰类、属性、方法和局部变量
1.final修饰的类不可以被继承,但是可以实例化。
2.final修饰的属性不可以被修改。
3.final修饰的方法不可以被子类重写。
4.final修饰的局部变量不可以被修改。
1)final修饰的属性又叫常量,一般用XX_XX_XX来命名
2)final修饰的属性在定义时,必须赋值,且以后不能修改,赋值可以在如下位置之一
①定义时,如
1.public final double TAX_RATE = 0.08
②在构造器中
③在代码块中
1.public class FinalExercise_01 {2. public static void main(String[] args) {3.
4. }
5.}
6.
7.class Circle {8. private double radius;
9.// 定义时赋值
10. private final double PI = 3.14;
11.
12. public Circle(double radius) {13. this.radius = radius;
14.// 构造器赋值
15.// PI = 3.14;
16. }
17. {18.// 代码块赋值
19.// PI = 3.14;
20. }
21.}
3)如果final修饰的属性是静态的,则初始化的位置只能是
①定义时
②在静态代码块,不能在构造器中赋值
4)final类不能继承,但是可以实例化
5)如果类不是final类,但是含有final方法,则该方法不能重写可以被继承
6)一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法
7)final不能修饰构造方法
8)final和static往往搭配使用效率更高,不会导致类的加载,底层编译器做了优化处理(在链接的准备阶段已经赋了用户定义的值,不会有后边的解析和初始化,故此类中的其他静态变量和静态代码块都不会被调用)
9)包装类(Integer,Double,Float,Boolean等都是final),String也是final类
staticfinal相关推荐
- 深入理解Java Class反射机制
本篇主要是深入对Java中的Class对象进行分析,这对后续深入理解反射技术非常重要,这篇有点偏向内功类文章. 深入理解Class对象 RRTI的概念以及Class对象作用 认识Class对象之前,先 ...
- 浅谈ANR及log分析ANR
一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTimeout(5 seconds) ...
- Java 多线程断点下载文件_详解
本文转载于:http://blog.csdn.net/ibm_hoojo/article/details/6838222 基本原理:利用URLConnection获取要下载文件的长度.头部等相关信息, ...
- JVM 类加载机制:编译器常量与初始化
1. 前言 最近在研究JVM虚拟机类加载机制的时候,我们了解到了类加载机制的生命周期以及在准备阶段,JVM虚拟机会对类的静态变量进行初始化,这个时候只是会将静态变量初始化为默认的初始值.对静态变量的定 ...
- 深入理解Java类型信息(Class对象)与反射机制
关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java并发之synchronize ...
- java 栈内存结构_JVM内存结构概念解析
一. Java 内存结构 Java代码运行在虚拟机上,虚拟机在运行过程将程序(也就是进程)所占有内存分为几个不同的数据区域.不同的区域有不同的职责. Java运行时内存结构图如下: Java运行时内存 ...
- java e7 e9格式怎么转_java�?e7?a8??e9?a8�ӿ�
(答案 SwitchDemo.java) 3. 判断一个数字是否能被 5 和 6... 基本语法编写 Java 程序时,应注意以下几点: ? ? 大小写敏感:Java 是大小写敏感的,这就意味着标识符 ...
- java23种设计模式+单例_Java23种设计模式之单例模式
一.单例模式简介 单例模式是Java设计模式中常见的一种模式.主要分为懒汉式单例.饿汉式单例.登记式单例: 单例模式的特点: 1.单例类只能有一个实例: 2.单例类必须自己创建自己的唯一的实例: ...
- 利用Spring框架封装的JavaMail现实同步或异步邮件发送
利用Spring框架封装的JavaMail现实同步或异步邮件发送 作者:张纪豪 J2EE简单地讲是在JDK上扩展了各类应用的标准规范,邮件处理便是其中一个重要的应用.它既然是规范,那么我们就可以通过J ...
最新文章
- Java:网络编程值TCP的使用
- U盘制作linux启动盘
- JavaScript实现的List(集合)类
- ❤️《IOC理论推导》
- Hibernate持久化对象状态
- 常见批处理作业调度算法
- redis 获取不到_redis系列之——缓存穿透、缓存击穿、缓存雪崩
- VSTest.Console.exe 的使用
- 机器人学-笔记-斯坦福大学公开课-class 1
- C语言dnf辅助开发,自己会写辅助:10台机器,稳赚额外收入
- 由读写经济学文章所想到的
- 使用opencv的viz模块显示3d点云
- 禁用系统【快应用】,停止【快应用】自动弹出
- Wirecast Pro 11 Mac(直播软件) v11.0.0中文破解版
- OpenCV的区域分割、轮廓检测和阈值处理
- ACE-NODE: Attentive Co-Evolving Neural Ordinary DifferentialEquations(KDD 2021)
- ARM-translation table walk
- 彩虹外链网盘 全新界面 支持图片违规检测
- LeetCode 55
- vivado流程导航器详细介绍【全网最详细】
热门文章
- 算法问题之“圆桌问题”,hdu 4841
- [vagrant]win7+vagrant2.0+vbox5.2启动集群
- C++奥特曼打怪兽系列
- 两个事务Update导致的死锁问题
- html爱心特效代码——爱心代码
- SOLIDWORKS 2023新功能揭秘!SOLIDWORKS Simulation 2023版本
- SaaS云收入的三种收费模式
- DNSPod十问张果:如何让数据在屏幕上跳舞?
- 比尔盖茨在CES 2007上发表主题演讲
- 顶级赛事:第十届CCF大数据与计算智能大赛开赛!