首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java final 修饰变量_final关键字修饰变量

参考链接: Java final关键字 Java中被final修饰变量为常量,它只能被赋值一次,也就是说final修饰变量一旦被赋值,其值不能改变。如果再次对该变量进行赋值,则程序会在编译时报错。...原因在于变量num 被final修饰。由此可见,被final修饰变量为常量,它只能被赋值一次,其值不可改变。  被final关键字修饰变量为局部变量。...void main(String[] args) {  Student student = new Student();  student.introduce();  }  }  出现了编译错误,提示变量...这是因为使用final关键字修饰成员变量时,虚拟机不会对其进行初始化。...因此使用final修饰成员变量时,需要在定义变量的同时赋予一个初始值,下面将第2行代码修改为:final String name="小海绵"; //为final 关键字修饰的name 属性赋值  运行结果

69420

const修饰指针变量详解

对于指针的认识,应该很多时候都是从C语言开始,那么const修饰的指针变量到底与指针变量有点什么区别呢?...“` const char *ptr; char const *ptr; char * const ptr; “` 上面三个const修饰的指针变量到底有点什么区别呢?...const 修饰的只是*ptr,*ptr呢?其实就是一个指针变量指向的内存区的内容,被const修饰之后,那么这个内存区的内容就不能够被修改了,但是指针的指向是可以被修改的。...对于**char * const ptr;**中的const修饰的就是ptr,ptr是什么呢?ptr不就是指针变量所存放的地址嘛?...加上const进行修饰之后,那么这个指针变量所存放的地址就不能够被修改了,但是指针指向的内容是可以被修改的。

31620
您找到你想要的搜索结果了吗?
是的
没有找到

局部变量修饰为final

final是Java中的一个保留关键字,它可以标记在成员变量、方法、类以及本地变量上。一旦我们将某个对象声明为了final的,那么我们将不能再改变这个对象的引用了。...如果我们尝试将被修饰为final的对象重新赋值,编译器就会报错 这么简单的一个关键字,怎么需要强制修饰一个局部变量 局部变量 class文件 public static void main(String...= 3;} public void testFinal(){ final String name = "Whoops bug"; int pluginType = 3;} 两个方法一个局部变量修饰为...final修饰是纯编译时信息,到Class文件里就已经没有踪迹了,JVM根本不会知道方法参数或者局部变量有没有被final修饰 曾经的阿里巴巴规范提出: 推荐】final可提高程序响应效率,声明成final...,编译器就会报错 类变量 对于final修饰的局部变量有了清晰的认识,再延伸一下final类变量 这儿涉及到一个问题,为什么JUC中很多的方法在使用类final变量时,都在方法中先引用一 public

1.6K20

volatile 关键字(修饰变量

volatile 关键字(修饰变量) 1. 含义 是一种比 sychronized 关键字更轻量级的同步机制,访问 volitile 变量时,不会执行加锁操作。 2....作用 volatile 是一个类型修饰符(type specifier)。volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。...volatile 修饰变量,是直接拿的主内存的值,就是说这个值永远是最新的,对其他线程是可见的。...在大多数处理器的实现中,这个屏障是个万能屏障,兼具其它三种内存屏障的功能 volatile 做了什么 在一个变量被 volatile 修饰后,JVM 会为我们做两件事: 在每个 volatile 写操作前插入...只有是原子操作的 volatile 变量才是线程安全的,比如我们很常见的 变量++ 自增操作,在这个过程中,自增包括取数,加一,保存三个过程的操作,所以自增并不是原子性操作,使用 volatile 修饰变量自增操作仍然是不安全的

49821

static作用(修饰函数、局部变量、全局变量

C语言:static作用(修饰函数、局部变量、全局变量) 一、 static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。  ...全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。  ...static全局变量只初使化一次,防止在其他文件单元中被引用; 二、static局部变量和普通局部变量有什么区别 ?   把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。...只在当前源文件中使用的函数应该说明为内部函数(static修饰的函数),内部函数应该在当前源文件中说明和定义。...共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。

60920

static修饰的函数有什么特点(static可以修饰所有的变量吗)

static修饰的函数叫做静态函数,静态函数有两种,根据其出现的地方来分类: 如果这个静态函数出现在类里,那么它是一个静态成员函数; 静态成员函数的作用在于:调用这个函数不会访问或者修改任何对象...其实很好理解,类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象...这样的static函数与普通函数的区别是:用static修饰的函数,限定在本源码文件中,不能被本源码文件以外的代码文件调用。

1.4K20

深刻理解----修饰变量----关键字

0;或者int const i = 0; 如果全局变量修饰为全局常量,那么也应该应用全局常量---加const 2.宏定义 #define 宏定义又称为宏代换、宏替换,简称“宏”。...全局变量只需在一个源文件中定义,就可以作用于所有的源文件。 当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 ①全局变量当没有其他关键字修饰时。...②当全局变量被const关键字修饰时。他定义的是常量,他的值不能在其他地方更改,而且在内存中也只占用一份内存空间。...节约内存空间, 5.static关键字 首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0. ①.修饰局部变量 不改变局部变量作用域 延长了局部变量的寿命...,可以让局部变量在整个程序运行过程中只有一份内存,且只会初始化一次 ②.修饰全局变量 让这个全局变量仅限于当前文件能访问(哪个文件:定义这个全局变量的文件) 6.static 关键字 搭配 const

673110

const修饰类中成员变量及函数

const在类中,可以修饰成员变量和成员函数,主要目的也是保护成员内部的一些属性不被轻易的修改。以保证数据的完整性。下面分别介绍const修饰成员变量和成员函数。...const修饰成员变量表示成员常量,只能在初始化列表中赋值,可以被const和非const成员函数调用,但不能修改其值。...const成员函数 CConst(void):iValue(200) { // error // iValue = 300; } ~CConst(void); private: // const 成员变量...void display() const { // 不能调用非const函数,本函数不修改成员变量,但不能保证被调用函数不会修改 // input(); cout << “x “ << x <<...endl; cout << “y “ << y << endl; // const 修饰函数表示承诺不对数据成员进行修改,所以以下错误 //y = 200; } // 一个非 const 成员函数

17220

const修饰符的使用(修饰结构体指针,引用外部的const 变量

const修饰符的使用 //const修饰变量为只读 const int a = 10; a = 20;//是错误的赋值 //指针变量 指针指向的内存 两个不同的概念 char buf[] =..."helloworld"; //从左往右看,跳过类型,看修饰那个字符 //如果是*,说明指针指向的内存不能改变 //如果是指针变量,说明指针的指向不能改变,指针的值不能修改 const char *p...= buf; char const *p1 = buf; //以上两条语句是等价的,都是修饰指针指向的内存不能改变。...const封锁的是指针变量,不能修改其指向,但是可以修改指针指向内存当中的内容。...const修饰结构体指针 //对结构体进行封锁 typedef struct { int a; int b; }my_struct; void fun1(my_struct *p)

49710

【java基础】static关键字--修饰静态变量

在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相对于对象的属性和方法来说的...zhangsan, Age:10 * Name:lisi, Age:12 *///~ } 上面的代码我们很熟悉,根据Person构造出的每一个对象都是独立存在的,保存有自己独立的成员变量...从上图中可以看出,p1和p2两个变量引用的对象分别存储在内存中堆区域的不同地址中,所以他们之间相互不会干扰。...我们知道,static关键字可以修饰成员变量和方法,来让它们变成类的所属,而不是对象的所属,比如我们将Person的age属性用static进行修饰,结果会是什么样呢?...Age:10 * Id:2, Name:lisi, Age:12 *///~ } 上面的代码起到了给Person的对象创建一个唯一id以及记录总数的作用,其中count由static修饰

78540

【小家java】final修饰变量真的不可变吗?

每篇一句 穷不练酒,富不占赌 1、概述 这可能是大家的一个共识:如果我们希望这个变量不可变,我们可以用final进行修饰。...但本篇将带你深入了解不变的含义,我相信可以让你更深的了解final的原理,也能记得更牢靠 2、栗子 被final修饰过的变量,只是说栈存储的地址不能再改变,但是却没有说地址指向的内容不能改变。...所以用final修饰,但内容是个对象啥的,然后改变对象属性值,这个不在本文讨论的范围以内。本文想讨论的是,直接就概念final的栈的地址,让它去指向另外一块内存地址。...so,咱们都把它的修饰符干掉,当然可以对Field set值了 所以,java的反射机制直接打破了封装有木有,哈哈哈 2、为什么最终打印的和我们调试的值不一样?...System.out.println(str2); //efg System.out.println(field.get(this)); //gfe 通过反射拿到的值是对的 我们通过反射拿到的值是正确的,而直接输出变量的值却是不对的

75320

Java里面volatile关键字修饰引用变量的陷阱

如果我现在问你volatile的关键字的作用,你可能会回答对于一个线程修改的变量对其他的线程立即可见。这种说法没多大问题,但是不够严谨。...下面这些数据结构都属于引用类型,即使使用volatile关键字修饰,也不能保证修改后的数据会立即对其他的多个线程保持一致: volatile int [] data; valatile boolean...System.out.printf("a = %s, b = %s%n", x, y); } }); 总结: 本篇文章主要讲述了关于volatile修饰引用变量的问题即它只能保证引用本身的可见性...,并不能保证内部字段的可见性,如果想要保证内部字段的可见性最好使用CAS的数据结构,这里还需要说明的的一点是volatile有时候修饰引用类型如boolean数组可能结果是没问题的,大家可以看我在Stack...questions/50967448/about-java-volatile-array 在编程的世界里面,对于不确定的事情,我们始终都要以最坏的打算来看待,所以请记住:尽量避免使用volatile关键字修饰引用变量

94920
领券