关于 static 和 final 的一些理解
今天主要回顾一下 static 和 final 这两个关键字。


package cn.tedu.staticx;
public class StaticExer {
public static void main(String[] args) {
new SDemo();
new SDemo();
new SDemo();
System.out.println(SDemo.count);
}
}
class SDemo{
static int count = 0;//如果不用 static 则每一个对象创建的时候,都会赋值为 0 ,然后再加一次,只能是1
public SDemo(){
count++;
}
}


package cn.tedu.staticx;
public class StaticDemo5 {
public static void main(String[] args) {
System.out.println(D.i);
}
}
class D{
static int j = 5;//先将静态变量i放入方法区,并且标记一个值为0;在初始化阶段,再检查i是否有初始值0,如果没有初始值,则将标记值0赋值进去;
//如果有初始值,则将初始值设置进去,抛弃标记值,然后顺次执行静态代码块,将静态变量i的值改为7
{
j = 7;
}
//在类加载阶段,由于i处于一个标记值状态,所以实际上是无值的,所以此时不允许直接操作
static{ //先将静态变量i放入方法区,并且标记一个值为0;在初始化阶段,先执行静态代码块,对于i=7;并不是将7直接赋值给i;检查i是否有初始值,
//如果没有初始值,则将标记值7赋值进去;如果有初始值则抛弃标记值,将初始值5赋值进去
i = 7;
i = 9;
//i -= 5;//进行运算就报错了,类在加载的时候是分了 5 个阶段:准备(加载这个类中的静态变量并标记默认值) -> 初始化(初始化静态变量,执行静态代码块)
}
static int i = 5;
}



package cn.tedu.finalx;
import java.util.Arrays;
public class FinalDemo1 {
public static void main(String[] args) {
//final int i = 9;
final int i;
i = 13;
final int[] arr = {3,6,1,7,0};
arr[1] = 8;//并没有报错,因为 arr 是一个对象 -> 地址不可变
//arr = new arr[4];//报错了,地址改变了
//arr.length = 9;
//changeValue(i);
System.out.println(i);
expand(arr);//一开始主函数中有一个 arr 了,指向堆内存中的某个地址,当调用这个方法后,方法中的 arr 会指向这个地址,但改变后,
System.out.println(arr.length);//方法中的arr指向新的地址,而主函数中的那个还是指向原来的地址(方法用完就释放堆内存中的资源)
}
//在这个方法中并没有将参数i定义为常量
public static void changeValue(int i){
i++;
}
public static void expand(int[] arr){
arr = Arrays.copyOf(arr, arr.length * 2);
}
}
class A{
//定义成员常量
//成员常量 i 在对象完成创建之前给值
final int i = 6;
int j;
//静态常量必须在类加载完成之前给值
static final int k = 0;
{
//i = 10;
}
public A(){
//i = 10;
}
}
/*class A{
private final int i;
{
//i = 4;
}
public A(){
this(5);//是对的
//this.i = 0;也是对的,两次调用是互不影响的
}//无参构造中未初始化常量
public A(int i){
this.i = i;//常量的二次赋值
}
}
*/

---恢复内容结束---
关于 static 和 final 的一些理解的更多相关文章
- java笔记——Java关键字static、final使用小结
static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...
- java中static 和 final 的一些使用规则
一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...
- java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...
- java里的static和final
本节介绍JAVA里static和final的作用和使用方法以及一些需要注意的问题. 一.static static表示"全局"或"静态",用来修饰成员变量和成员 ...
- Android中static和final用法小结
Java关键字static.final使用小结 static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是 ...
- Java中static、final用法小结
一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...
- Java关键字static、final使用小结
static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...
- Java之关键字static和final的使用
static 在Java中声明属性.方法时,可使用关键字static来修饰. 1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或 ...
- Java中static、final用法
一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...
- JAVA Static方法与单例模式的理解
近期用sonar測评代码质量的时候,发现一个问题,project中一些util类,曾经写的static方法都提示最好用单例的方式进行改正. 为此,我细致想了想,发现还是非常有道理的.这里谈谈我个人对s ...
随机推荐
- 【2024.09.27】NOIP2024 赛前集训-刷题训练(3)
[2024.09.27]NOIP2024 赛前集训-刷题训练(3) NOIP2018 提高组 铺设道路 算法一:模拟正常人铺路的过程,每次找区间的最小值,最小值就是本次填的高度,由于出现了若干个0位置 ...
- 强化学习训练过程中的过度拟合(overfitting)
相关: A.I. Learns to Drive From Scratch in Trackmania 本文讨论的是强化学习中的过度拟合问题,要知道强化学习中的过拟合和其他的监督.无监督学习的过拟合不 ...
- windows当中C++版本的Opencv安装(动态库+静态库)
主要参考2篇博客,其实就是dll文件和lib文件的使用方法而已.链接如下: 1.静态库opencv配置 2.动态库opencv安装
- Surface pro 11二合一平板参数调研
最近研究了下Surface pro 11,记录下相关参数,矩阵我以表格列出来.可能不够细,大家作个参考吧 模块 技术项 参数 备注 处理器 型号 Snapdragon X Elite(X1E-80-1 ...
- 霍夫丁(Hoeffding)不等式证明
马尔可夫不等式 结论 对于任意非负随机变量$X$,$\forall \epsilon>0$,有: $\displaystyle P(X\ge\epsilon)\le\frac{E(X)}{\ep ...
- 深入理解ReferenceQueue GC finalize Reference
关于对象如何销毁以及finalize更详细的信息 目录 概述 1 先看一个对象finalize的顺序问题. 2 对象再生及finalize只能执行一次 3 SoftReference WeakRefe ...
- 反编译工具之Jadx
jadx 是一款功能强大的反编译工具,使用起来简单方便(拖拽式操作),不光提供了命令行程序,还提供了 GUI 程序.一般情况下,我们直接使用 GUI 程序就可以了. jadx 支持 Windows.L ...
- 基于Docker搭建PHP开发环境
Docker 是这几年非常火的一项技术,作为一名软件开发人员,应该及时的接触和掌握. 镜像加速: 可以在阿里云上免费的获取,然后进行配置即可使用.阿里云 Docker 加速器,没有阿里云账号注册一个即 ...
- uni-app 坑
1.fixed定位 在H5中,tabbar,顶部导航栏,系统状态栏(手机信号,电量显示等)包含在内容区,H5在定位时,需要算上这些高度(如果页面中存在这个元素的话) 解决办法:使用条件编译,针对不同的 ...
- k8s pod错误的排查步骤和处理方法
查pod kubectl get pod -n amadeus -o wide 查pod日志 kubectl logs -f --timestamps -n amadeus weyo-server-6 ...