java:final和static初学

游戏开发实战:如何在Unity中实现六边形网格地图(附完整代码) 本文详细介绍了在Unity中实现六边形网格地图的完整开发流程,从数学原理到实战代码。涵盖三种主流坐标系转换方法、距离计算算法对比、网格生成与渲染技巧,以及高级功能如网格高亮、寻路算法和性能优化策略。适合策略游戏、战棋类游戏开发者提升地图系统开发效率。 阅读详情
package com.jvmfinalstatic;

参考文献:http://lavasoft.blog.51cto.com/62575/18771/
/*本节学习java中的final关键字
 * 1.final 从字面上理解:最后的,无可改变的、也就是有些API中的“终态”;
 * 2.final修饰不同东西的不同效果
 *  2.1修饰类 
 *      final类不能被继承,如果这个类不需要有子类,类也不想再扩展了就可以定义为final的;
 *      final类中成员 域:
 *          其域可以是 final 的也可以 不是final的 根据需求定义即可;
 *      final类中成员 方法:
 *          因此final类的成员方法没有机会被覆盖,默认都是 final 的。
 *      示例代码:示例2.1
 *  2.2修饰成员变量:
 *      final修饰基本数据类型变量(局部变量):
 *          用final修饰的成员变量表示常量,值一旦给定就无法改变!
 *          final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,
 *          无论什么情况,编译器都确保空白final在使用之前必须被初始化.
 *      final修饰引用变量:
 *          则对其初试化之后就不能再指向另一个对象;引用不可以改变,但是它所指向的对象的内容可以改变
 *      final小贴士:
 *          public static final int VALUE_THREE = 39;
 *          VALUE_THREE是一种更加典型的对常量进行定义的方式:定义为public,可以被任何人访问;定义为static,
 *          则强调只有一份;定义为fianl,这说明它是个常量。请注意带有恒定初始值(即,编译期常量)
 *          的final static基本类型全用大写字母命名,并且字母与字母之间用下划线隔开。
 * 
 *  2.3修饰参数:
 *      1.java中允许在参数列表中以声明的方式将参数指明为final,这就意味着无法在方法中更改参数引用所指向的对象;
 *      2.匿名内部类的应用;
 *  2.4修饰方法:
 *      1.不让继承了修改它的含义;即不可以被覆盖
 *      2.效率高点;
 *  2.5final和private
 *      1.类中的private方法隐式地指定为final的,由于无法取用private方法,所以也就无法覆盖它,因此对private方法
 *        添加final修饰符什么作用也不起;
 * 
 * 3.java中的static用法:
 *  3.1static修饰的成员变量和成员方法
 *      它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内
 *      定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
 *      静态变量:对于静态变量在内存中只有一个拷贝,JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,
 *      可用类名直接访问。
 *      静态方法:静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直
 *      接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员
 *      方法。因为实例成员与特定的对象关联!
 *  3.2用public修饰的static成员变量和成员方法本质是全局变量和全局方法,(java中没有全局变量的定义)当声明它类的对象市,
 *      不生成static变量的副本,而是类的所有实例共享同一个static变量。
 *  3.3static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用,但是不能
 *      在其他类中通过类名来直接引用,这一点很重要。
 *  3.4 用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块
 *  

 * 
 * */
//示例类2.1
final class FinalClass{
    int noFinalField = 2;
    final int finalField = 4;
    public void  show(){
        System.out.println("i was a default final method ,because the class name is modified by final keyword"+" :"+noFinalField);
    }

}
/*class SonFinalClass extends FinalClass{
    // Error:The type SonFinalClass cannot subclass the final class FinalClass
    //remove the final modifier of FinalClass
}*/

//示例类2.2
class FinalField{
    //第一种情况:a 为常量
    private final int a = 10;
    //第二种情况:final空白;
    private final int b ;
    //第三种情况:c: 一个即是static又是fianl的域只占一段不能改变的存储空间,将用大写表示
    public static final int C =20;

    FinalField(int b){
        this.b=b;
        System.out.println("a:"+a+" b:"+b+" c:"+C);
    }
    //第四种情况:
    public void importMethod1(){
        String a = "hello2"; 
        final String b = "hello";
        String c = "hello";
        String d = b + 2; 
        String e = c + 2;
        System.out.println((a == d));//true
        System.out.println((a == e));//flase;
        /*这里面就是final变量和普通变量的区别了,当final变量是基本数据类型以及String类型时,
         * 如果在编译期间 能知道 它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变
         * 量的地方,相当于直接访问的这个常量,不需要在运行时确定。因此在上面的一段代码中,由于变量b
         * 被final修饰,因此会被当做编译器常量,所以在使用到b的地方会直接将变量b替换为它的值;
         * 而对于变量 c 的访问却需要在运行时通过  链接来进行。不过要注意,只有在编译期间能确切知道final
         * 变量值的情况下,编译器才会进行这样的优化.
         * 补注:
         * 而我们知道String类型实现常量池技术,(结合反射一博文) 比如String st1 ="hellojava";
         * String st2 ="hellojava";这是"hellojava"会存在方法区内的常量池中,又因为常量池是共享的
         * ,所以只会存储一份,符号 st1和st2会存贮在栈中,并且俩个符号会指向同一个地址(及“hellojava"在常量池中的地址);
         * */ 
        Integer aa = 10;
        Integer bb = 5;
        Integer cc = 5;
        Integer dd = bb+cc;
        System.out.println(aa==dd);//输出结果为true;
        //Java的数学计算是在内存栈里操作的其实比较的是基本类型(10=5+5),他们的值相同,因此结果为True

    }
    //第五种情况
    public void importMethod2(){
        String a = "hello2"; 
        final String b = getHello();
        String c = "hello";
        String d = b + 2; 
        String e = c + 2;
        System.out.println((a == d));//flase
        //因为对于变量  b 和 c 的访问却需要在运行时通过  链接来进行,编译器就不会进行上述优化
        System.out.println((a == e));//flase;
    }
    public static String getHello() {
        return "hello";
    }
}
//final 参数
class FinalArgument{
    void with(final FinalClass fc){
        //fc = new FinalClass(); 这样是不对的,因为fc是final,
        fc.noFinalField = 100;//其所指向的对象的内容是可以改的,虽然在才并不影响原来的值;   
    }
}

//final方法;
class PrivateMethod{

    public void  show(){
        System.out.println("privateMethod"+" :"+"show()");
    }
    private void f(){
        System.out.println("privateMethod"+" :"+"f()");
    }
}
class PrivateFinalMethod extends PrivateMethod{
    private void f(){
        System.out.println("privateFinalMethod"+" :"+"f()");
    }
}
class PrivateFinalMethod2 extends PrivateFinalMethod{
    public void f(){
        System.out.println("privateFinalMethod"+" :"+"f()");
    }
}


//主函数:
public class FinalModifierStudy {
    public static void showFinalClass(){
        FinalClass fc = new FinalClass();
        //The final field FinalClass.finalField cannot be assigned
        //fc.finalField = 44;

        fc.noFinalField =22;
        fc.show();
        //输出结果:
        //i was a default final method ,because the class name is modified by final keyword :22
    }

    public static void showFinalField(){
        FinalField ff = new FinalField(40);
        ff.importMethod1();
    }

    public static void showFinalMethod(){
        PrivateFinalMethod2 pfm2 = new PrivateFinalMethod2();
        pfm2.f();//就是调用PrivateFinalMethod2中的方法 其不是继承来的也不是覆盖了父类的;
        //采用多态的形式会出错:
        PrivateFinalMethod pfm = new PrivateFinalMethod2();
        //pfm.f();就会出错 因为private f()就相当于隐藏在类中的代码,只不过形式和父类有点像
        //其既不是继承来的也不是覆盖父类的;
    }
    public static void main(String[] args) {
        //showFinalClass();
        showFinalField();
    }

}
【AUTOSAR-CanNM】-3.1-如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出) 如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出) 阅读详情

相关推荐

SageMath下载与安装

SageMath的下载与安装

旺旺的碎冰冰~的博客 7489

初学java final static 关键字总结

Final和static关键字总结 初学java,刚刚接触到这两个关键字,经过一番的纠结之后,把他们的用法总结了下,希望对广大java初学者有用。。。 Final和static相比起来,相对容易掌握些。 Final用来修饰变量、方法以及类、接口。修饰变量时可是认为这个量为常量,不能被第二次赋值。修饰方法是表示,此方法不能被重写,修饰类和接口是表示,此类和接口为最终类/接口不能被继...

hotwoaishiqi的博客 141

IMU自动校准论文与代码实现A Robust and Easy to Implement Method for IMU Calibration without External Equipments

PART1 摘要 低成本的惯性测量单元会受到系统误差的影响,系统误差由标度因子和轴偏差造成,这会降低位置和姿态估计的精度。 本文提出了一种无需任何外部设备的,鲁棒性强,易于实现的IMU校准方法。 该程序基于多放置方案,再估计传感器偏差的同时,为加速度和陀螺仪三轴的尺度和偏差系数。我们的方法只需要用手移动传感器,并将其放置在一组不同的静态位置(姿态)。 论文描述了一个鲁棒的快速校准协议,...

qq_29313679的博客 5308

Java初学之final,static关键字

我们首先看这样一道题: 下面哪些方法禁止子类重定义该方法  (A)protected void m() {} (B)final void m() {} (C)abstract void m() {} (D)static final void m() {} 我们不着急得到答案,先来了解一下Java中final和static用法。 Java关键字final、

sum_TW的博客 1537

STM32F103C8T6实战:手把手教你搭建智能火灾报警系统(附MQ-2传感器调试技巧)

本文详细介绍了基于STM32F103C8T6单片机和MQ-2烟雾传感器的智能火灾报警系统搭建过程。从硬件选型、电路设计到软件开发,提供全面的实战指导,特别包含MQ-2传感器调试技巧,帮助开发者快速实现稳定可靠的智能火灾监控系统。

year5的博客 213

RandLA-Net 调通代码1:Windows 11 + Tensorflow 2.4 + S3DIS数据集【踩坑+填坑】

TF不上进啊,学学pytorch

累了就要打游戏 2480

JAVA初学之this ,static , super 与final关键字

JAVA初学之this  ,static  , super  与final关键字      这一篇呢,我要说的就是this , static ,super  ,final 这几个关键字。下面就一一来解释一下。 一.this             this是定义在类的方法的声明中,对方法的引用。那么this指的是什么呢?也就是说,你对哪个对象调用方法时,this指的就是什么。this在定义时

滨州学院优快云高校俱乐部 王姗姗 688

pytorch超详细安装教程,Anaconda、PyTorch和PyCharm整套安装流程

本文介绍基于Anaconda环境以及与PyCharm结合,安装PyTorch深度学习框架。

Bluebro的博客 19万+

初学呐喊!——Java中static关键字和final关键字的用法

Java oop static与final使用 final的用法 final是Java的关键字,表示最终 1. final能修饰什么 final不能修饰构造方法 类 属性 局部变量 一般方法 2. final修饰后的影响 类 这个类不能被继承,也就是这个类不能有子类 public final class Person { } 属性和变量 值不能更改,就是常量 public final class Person { final int STUDENT_AGE = 20;//

weixin_48318054的博客 279

air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考)

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1238

智护健康:基于 ESP32 的可穿戴式心率血氧远程监测手环设计与实现

随着健康管理理念的普及,可穿戴式健康监测设备成为刚需。本文设计了一款基于 ESP32 芯片的可穿戴式心率与血氧远程监测手环,通过集成专业生物传感器采集生理数据,借助 ESP32 的无线通信能力实现数据远程传输,搭配手机 APP 与云平台完成数据存储、分析与预警。文中详细阐述了硬件选型、模块接线、软件设计流程及核心代码实现,该手环具备低功耗、高精度、实时性强等特点,可满足日常健康监测与远程照护需求。

weixin_42300449的博客 1198

初学Java---面向对象编程-static与final使用

Unit10 static与final使用 部分学习笔记 一、final的用法: final是Java的关键字,表示最终。 1. final能修饰什么? (1)final不能修饰构造方法 (2)final可以修饰: 类 属性 局部变量 一般方法 2. final修饰后的影响: 类: 这个类不能被继承,也就是这个类不能有子类。 public final class Person { } 属性和变量: 值不能更改,就是常量;常量名称全大写,如果多个单词用下划线分开.

慕兮的博客 228

Apollo 9.0 参考线生成器 -- ReferenceLineProvider

在基于参考线的规划算法中,参考线是Planning一切工作的基础和前提,所以搞清楚参考线怎么来的就变得很重要。为此,首先需要了解Planning 与 Routing的交互,通过交互得到路径片段,这些路径片段就告诉我们该怎么走,再在此基础上生成参考线,最后使用不同的平滑算法对参考线进行平滑,得到一条光滑的参考线。

WaiNgai 1664

初学JAVA-12-static关键字和final关键字

        回顾一下我们程序的主方法mian方法public staitc void main(String[] args) ,我们说过这个方法的写法是固定的,现在我们再来看这个方法有什么要求:必须是公开的(public)、静态的(static)、没有返回值的(void)、带一个String类型的数组为入参的、名字叫main的(必须每个字母都小写)的方法。public、void、String[...

weixin_42250593的博客 248

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

final与static总结

final与static总结final与static总结static详解static主要的目的static的特点static修饰成员变量静态变量和实例变量的区别static修饰方法static的使用静态不能访问非静态 final与static总结 static详解 static作用范围:可以修饰成员变量和成员方法 static主要的目的 当我们创建对象也就是new一个对象的时候,数据的存储空间才会...

yc19970607ycx的博客 276

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java之static静态关键字详解|final关键字详解

前言 在Java语言中,static表示“静态”的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块。static的主要作用在于创建独立于具体对象的域变量或者方法。本文主要来去讲解一下static的来龙去脉。 static要解决什么问题? 我们知道,当我们通过new关键字去创建对象的时候,那么数据的存储空间才会被分配,类中的成员方法才能被对象所使用。但是呢有两种特殊的情况:1、...

Jason的学习笔记 651

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java final,static 关键字

final 关键字 final 修饰 类 final 修饰 类 的时候,表示类不能被继承。所以 final 不能修饰抽象类。 final 修饰 方法 final 修饰 方法 的时候,表示方法不能被重写。子类继承父类的方法,不能重写 final 修饰的方法。 private 修饰的方法,会被隐式指定为final。 final 修饰 变量 final 修饰 变量 的时候,表示变量不能被改变。修饰基本数据类型的时候,值不能改变。修饰引用类型的变量的时候,表示引用指向的对象不能改变,但是对象的值可以改变。 fina

七月与雪的博客 160

Java中的static,final,static final

final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。 final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。 final修饰的属性表明是一个常数(创建后不能被修改)。 final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继承。 我们需要注意的是,在final修饰的方法参数中,如果修饰的是基本类型,那么在这个方法的内部,基本类型的值是不能够改

zengjyxxz的博客 183

final和static使用场景

final和static使用场景1. final 和 static 总结2. final (修饰符)2.1 final修饰类2.2 final修饰方法2.3 final修饰变量3. static (关键字)3.1 static修饰的方法,3.2 static变量3.3 static代码块 1. final 和 static 总结 我们在程序中经常出现 final和static,那什么时候什么场景下使用? 通常在项目很多地方需要使用的常量 需要用 static final public static f

优秀的威的博客 797

Thinking:Java中static、this、super、final用法

本篇旨在帮助准备学习Java以及刚接触Java的朋友认识、掌握和使用static、this、super、final这几个关键字的使用。Java博大精深,我也是一位正在学习和使用Java的爱好者,文中难免有不妥之处,欢迎指正。一、static请先看下面这段程序:public class Hello{     public static void main(String[] args){//(1)

2131

Java系列10—this、static、final和访问控制修饰符

this、static、final和修饰符 一、this的使用 (1)this使用概述 /** * 关于java语言中的this关键字: * 1、this 是一个关键字,翻译为:这个 * 2、是一个引用,保存在堆内存中对象的内部,指的是对象自身 * 3、创建100个java对象,每一个对象都有一个this,也就是有100个不同的this * 4、this可以出现在实例方法中,this指向当前正在执行这个动作的对象 * 5、this多数情况下可以不写 * 6、this不能使用在带有s

qq_42486675的博客 9165

java关键字final static

Java关键字final、static使用总结热215王维树 2009-05-07 12:36 Java关键字final、static使用总结 常看很多入门鸟们在final 和static运用上感到迷茫,现总结一下final和static的运用方法,希望对大家有帮助。一、final 根据程序上下文环境,Java关键字final有“无法改变”或者“终态”的含义,它...

weixin_34061555的博客 81

Java中static this super final用法简谈

Java中static this super final用法简谈

hfdhjjj的博客 243

关键字final、static应用及介绍

1、final关键字 1.1、概述 在java中,为了不随意更改API提供的内容,为了避免这种随意更改的情况,java提供了final关键字,用于修饰不可改变内容 final :不可改变。可以用于修饰类、方法和变量。 类:被修饰的类,不能被继承。 方法:被修饰的方法,不能被重写。 变量:被修饰的变量,不能被重新赋值。 1.2 使用方式 修饰类 格式如下: final class 类名 { ...

qq_44890539的博客 227

转--Java关键字final、static使用总结

293

Java中static、this、super、final用法简谈[转]

Java中static、this、super、final用法简谈(一) 原作者:www.javaresearch.org  kevin本篇旨在帮助准备学习Java以及刚接触Java的朋友认识、掌握和使用static、this、super、final这几个关键字的使用。Java博大精深,我也是一位正在学习和使用Java的爱好者,文中难免有不妥之处,欢迎指正。一、static    请先看下面这

eako的专栏 3964
上一篇: java:参数传递过程初学
下一篇: JAVA压缩文件之-ZipOutputStream
Coder-Qian
博客等级 码龄11年 63粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值