0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

Java基础笔记 - static与final关键字及其编写细节提示

1、static关键字:

static关键字可用于修饰属性,也可用于修饰方法,还可以用于修饰类。

1.1、static成员变量:

使用了static修饰的成员变量,即是静态成员变量。无论一个类生成了多少个对象,所有这些对象共同使用唯一的一静态的成员变量。即是一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随着发生变化。

可以通过 类名.静态成员变量名 来获取静态成员变量。

1.2、static静态方法:

static修饰的方法叫做静态方法,静态方法只能继承不能重写(Override)(可以覆盖,用多态调用时,执行的也是父类的static静态方法)。

可以通过 类名.方法名 的方式来访问。

1.3、static静态代码块:

静态代码块的作用是完成一些初始化工作。

1.4、静态代码块的执行:

首先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法是在生产对象的时候执行。

调用某个类来生成对象时,首先将类加载到Java虚拟机上,然后有虚拟机加载这个类来生成对象。而静态代码块只会执行一次,是在类被加载的时候执行的。

因为每个类只会被加载一次,所以静态代码块也只会被执行一次。而每生成一个对象都会调用类的构造方法。

如果一个类中既有构造方法,又有静态代码块,那么首先执行顶层类的静态代码块,一直执行到底层类的代码块。在去从顶层到底层执行构造方法。

注意:静态代码块只会被执行一次。

如下面的静态代码块和构造方法的编写:

class A{
static{
System.out.println("static code A");
}
public A(String str){
System.out.println("constructor A:" + str);
}
}
class B extends A{
static{
System.out.println("static code B");
}
public B(){
super("call constructor with parameters");
System.out.println("constructor B");
}
}

B b = new B(); 执行结果为:

static code A static code B constructor A:call constructor with parameters constructor B

1.5、静态访问规则:

不能在静态方法中访问非静态的成员变量,只能访问静态的成员变量。但可以在非静态的方法中访问静态的成员变量。

静态只能访问静态;非静态可以访问一切。

不能在静态方法中使用this关键字。

2、final关键字:

当final关键字修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化。当final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但引用直线对象的内容是可以改变的。

final常量:

当一个属性被final修饰时,表示该属性不能被改写。

对应final类型的成员变量,有两种赋初值的方式: ① 在生命final类型成员变量时就赋初值 ② 在生命final类型成员变量时不赋初值,但在类的所有构造方法中都为其附上初值。

final方法:

final方法是一个终态方法,不能被重写(Override)。

欢迎关注我的其它发布渠道

订阅IT宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法