目录1final基本用法1.1final修饰变量1.2final修饰方法参数1.3final修饰方法1.4final修饰类1.5空白final1.6staticfinal2jvm角度理解final不可变性3final多线程下可见性4final域重排序规则5面试常见问题5.1所有的final修饰的字段都是编译期常量吗?5.2final类型的类如何拓展?5.3如何理解private所修饰的方法是隐式的final?1final基本用法final:“这是无法改变的"final可以修饰:变量、参数、方法、类1.1final修饰变量修饰变量(变量、局部变量),当变量类型为:基本类型,一旦被赋值,该值不能被
本文主要讲述java的final关键字和相关细节。 老韩知识介绍: 示例代码如下:1publicclassFinalTest{2publicstaticvoidmain(String[]args){34}5}67/**8*(4)final修饰类时,不能被继承9*/10finalclassA{11privateStringname;12/**13*(1)final修饰成员变量,不能修改14*/15publicfinalintid=100;1617publicvoidupdateId(){18//id=104;19System.out.println(id);20}2122/**23*(2)f
本文主要讲述java的final关键字和相关细节。 老韩知识介绍: 示例代码如下:1publicclassFinalTest{2publicstaticvoidmain(String[]args){34}5}67/**8*(4)final修饰类时,不能被继承9*/10finalclassA{11privateStringname;12/**13*(1)final修饰成员变量,不能修改14*/15publicfinalintid=100;1617publicvoidupdateId(){18//id=104;19System.out.println(id);20}2122/**23*(2)f
结论:final修饰对象,对象的内容可变,引用不可变。final应用于类、方法和变量、对象时意义是不同的,但本质是一样的,都表示不可改变。但是修饰对象时要注意:因为对象是引用类型,存储的是地址,所以final修饰之后,指的是引用地址不可变。案例:finalchar[]chars={'1','2','3'};//定义final修饰的char数组对象System.out.println(chars);System.out.println("chars数组地址"+chars.hashCode());chars[0]='0';chars[2]='b';System.out.println(chars)
结论:final修饰对象,对象的内容可变,引用不可变。final应用于类、方法和变量、对象时意义是不同的,但本质是一样的,都表示不可改变。但是修饰对象时要注意:因为对象是引用类型,存储的是地址,所以final修饰之后,指的是引用地址不可变。案例:finalchar[]chars={'1','2','3'};//定义final修饰的char数组对象System.out.println(chars);System.out.println("chars数组地址"+chars.hashCode());chars[0]='0';chars[2]='b';System.out.println(chars)
static关键字,main()方法,代码块,final关键字static关键字的使用:static:静态的static可以修饰:属性、方法、代码块、内部类使用static修饰的变量:静态变量(类变量)3.1属性:实例变量:我们创建了多个类的对象,每个对象都拥有一套独立的类的非静态属性,当修改其中一个对象的非静态属性时,不会导致其他对象中相同的属性值更改。静态变量:当我们创建了多个对象时,多个对象共享一个静态变量。当我们修改某一个对象的静态变量时会导致其他对象调用此变量是修改过的。3.2static修饰属性的其他说明:静态变量随着类的加载而加载,可以通过"类.静态变量"的方法进行调用,可以不用
static关键字,main()方法,代码块,final关键字static关键字的使用:static:静态的static可以修饰:属性、方法、代码块、内部类使用static修饰的变量:静态变量(类变量)3.1属性:实例变量:我们创建了多个类的对象,每个对象都拥有一套独立的类的非静态属性,当修改其中一个对象的非静态属性时,不会导致其他对象中相同的属性值更改。静态变量:当我们创建了多个对象时,多个对象共享一个静态变量。当我们修改某一个对象的静态变量时会导致其他对象调用此变量是修改过的。3.2static修饰属性的其他说明:静态变量随着类的加载而加载,可以通过"类.静态变量"的方法进行调用,可以不用
一、前言相信很多小伙伴在面试的时候都被问到过“Java中的String类为什么用final修饰?”这个问题,今天带大家一探究竟,希望小伙伴们在之后面试中遇到这个问题时,能够很顺利的回答出来,顺利斩获高薪offer。二、final关键字final是Java中的保留关键字,可以用来修饰类,方法和变量。其中,被final修饰的类不能被继承即不能拥有自己的子类,被final修饰方法不能被重写,final修饰的属性、变量初始化之后不能被修改。三、String类中如何使用final关键字及其好处String类的源码从上述源码我们可以发现以下两点:String类用final修饰,代表String类不可被继承
一、前言相信很多小伙伴在面试的时候都被问到过“Java中的String类为什么用final修饰?”这个问题,今天带大家一探究竟,希望小伙伴们在之后面试中遇到这个问题时,能够很顺利的回答出来,顺利斩获高薪offer。二、final关键字final是Java中的保留关键字,可以用来修饰类,方法和变量。其中,被final修饰的类不能被继承即不能拥有自己的子类,被final修饰方法不能被重写,final修饰的属性、变量初始化之后不能被修改。三、String类中如何使用final关键字及其好处String类的源码从上述源码我们可以发现以下两点:String类用final修饰,代表String类不可被继承
目录前言1. #define定义标识符2.#define定义宏3. #define替换规则 4. 宏和函数对比 前言在很多C程序中,我们会在一个源文件的开头看到 #define 的字眼,和define的英文解释相同——可以理解为给xxx下定义,这里可以是标识符甚至是一个函数,接下来的内容将会对#define进行详解1. #define定义标识符使用#define可以用来定义标识符,所谓标识符可以简单理解为一个能够表示一定内容的符号,其格式为#定义标识符内容#definenamestuff简单介绍几个例子#defineMAX100//将MAX这个标识符和100这个数字关联起来#defineREG