java常用的关键字

Wesley13
• 阅读 415

1、final关键字

final关键字可用于修饰类、方法以及变量。

修饰类:该类不能被继承,该类的所有方法和成员都被隐式地指定为final。

修饰方法:锁定方法,任何继承类都不能修改他,所有的private方法都被隐式地指定为final方法。

修饰变量:若修饰的变量为基本数据类型,该变量值被赋值后不可改变;若修饰的变量为引用类型的变量,该变量被初始化后不可再被定义指向另一个对象,但指向的对象的内容是可变的。

2、static变量

“全局”或者“静态”的意思,给类使用而不是给对象使用。

被static修饰的方法或变量,无须依赖对象实例去访问,只要类被加载了就可以通过类名直接去访问。原因:Java程序创建时,在类首次被加载时会优先执行static变量、方法或代码块,并为其分配固定的内存区域,JVM可以直接访问到他们,而不需要依赖某个特定的实例变量,并被类的所有实例共享。

修饰变量:静态变量被所有的对象所共享,在内存中只有一副本,当且仅当类初次加载时被初始化。

修饰方法:静态方法不依赖于任何对象就可以被访问,直接类名.方法名可以直接访问。因此,静态方法中不能访问非静态方法或非静态变量。工具类?

修饰代码块:同理,仅执行一次,提高代码效率。

注:static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。

3、public/private/protected关键字

public修饰符:任何类都可以访问

private修饰符:访问权限仅限于类内部

protected修饰符:类及其子类或同一个包下的类可以访问

4、finally关键字

finally总是会被执行,正常在try语句后,抛异常在catch语句后,除非前序语句中有System.exit(0)。

finally中return会修改try或catch中return的变量值吗?

返回基本类型是值,返回引用类型是指向某个对象的地址;基础类型被分配在栈中,对象分配在堆中。如果返回的是基本类型,直接复制一个变量返回,finally块中的代码不会影响到返回结果;若返回值是引用类型,finally语句块可以修改其指向对象的值。

5、throw/throws关键字

throw 函数体,用于语句抛出异常,一般会用于程序出现某种逻辑时程序员主动抛出某种特定类型的异常。

throws 函数头,用于方法可能抛出异常的申明,声明方法时跟上throws,交给上层处理抛出的异常。

6、transient关键字

一个对象实现了Serializable接口,该对象就会序列化。若是某些属性不希望被序列化(如密码),可以在该属性前加transient修饰。如此,该字段的生命周期仅存在于调用者的内存中而不会被写到磁盘中持久化。

静态变量不管是否被transient修饰都不会被序列化。

在Java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。

7、synchronized关键字

synchronized 同步锁,使用锁的机制实现同步。

修饰一个代码块,同步代码块,作用对象是调用这个代码块的对象,指定对象加锁。

修饰一个方法,同步方法,作用对象是调用这个方法的对象,当前实例加锁。

修饰一个静态方法,作用对象是这个类的所有对象,当前类对象加锁。

修饰一个类,作用对象是这个类的所有对象,当前类对象加锁。

两个并发进程访问同一个对象object中的synchronized(this)同步代码时,一个时间内只有一个线程得到执行,另一个线程必须等到该线程执行完该代码块才可以执行。

当一个线程访问一个对象object中的synchronized(this)同步代码时,另一个线程可以访问该object的非同步代码块。

当一个线程访问一个对象object中的synchronized(this)同步代码时,其他线程对该object对象中的其他同步代码块的访问也被阻塞。 对象锁

注:使用该关键字,需要注意是否是对同一个对象加锁,对于静态方法或者是类,该类的所有对象同一把锁。

8、volatile关键字

修饰变量

保证不同线程对于这个变量进行操作时的可见性,即一个线程修改了该变量的值,该新值对于其他线程是立即可见的。如果是写操作,会导致其他CPU中对应的缓存行无效,需要到主存中读取该变量的值。

禁止进行指令重排序。

加入volatile关键字会多一个lock前缀指令,相当于一个内存屏障,可以保证指令重排序不会穿过屏障。

强制将对缓存的修改操作立即写入主存。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
浪人 浪人
2年前
深入不可变类 -- 谈谈Java String与包装类的底层实现
深入不可变类——谈谈String与包装类的底层实现一、走进不可变类不可变类是指在创建实例后该例变量不可以改变的类。比如String类和包装类。定义不可变类需要遵守:1.成员变量设置为priavte,final修饰2.提供带参构造器对成员变量进行初始化3.只提供getter,
Wesley13 Wesley13
2年前
java中一些常考知识
一、static的作用 static是修饰符,用于修饰成员变量(静态变量/类变量)。static修饰的成员被所有对象共享。static优先于对象存在。static修饰的成员可以用类名.静态成员来访问。注:1.静态方法只能访问静态成员,非静态方法既能访问静态成员又可以访问非静态成员。2.静态方法中不可
Wesley13 Wesley13
2年前
java核心技术36讲笔记
JavaBasic谈谈final、finally、finalize有什么不同?典型回答:final可以用来修饰类、方法、变量,分别有不同的意义,final修饰的class代表不可以继承扩展,final的变量是不可以修改的,而final的方法也是不可以重写的(override)。finally则是
Wesley13 Wesley13
2年前
Java中static、final、static final的区别
说明:不一定准确,但是最快理解。final:final可以修饰:属性,方法,类,局部变量(方法中的变量)final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。final修饰的属性表明是一个常数(创建后不能被修改)。
Stella981 Stella981
2年前
BATJ的常见java面试题
JAVA基础1.JAVA中的几种基本数据类型是什么,各自占用多少字节。2.String类能被继承吗,为什么。不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。3.String,Stringbuffer,StringBuilder的区别。String字符串常量StringBuffer
Wesley13 Wesley13
2年前
Java深究之final、finally、finalize三者的区别
       在java中final、finally、finalize三者在写法上很相近,但是实际含义和作用却是相差甚远。本文主要是来深层的研究下这三者的用法以及之间的区别1.final属性:java中的关键字,修饰符作用:用于修饰类、成员方法、变量(成员变量、局部变量)用法:如果类被声明为final,那么该类就不能再派生出新的子类
Wesley13 Wesley13
2年前
Java基础入门
类别关键字说明访问控制private私有的protected受保护的public公共的类、方法和变量修饰符abstract声明抽象class类extends扩充,继承final最终值,不可改变的implements实现(接口)interface接口native本地
Wesley13 Wesley13
2年前
Java修饰符类型
修饰符是一种添加到定义以更改其含义的关键字。Java语言有各种各样的修饰符,包括以下两种Java访问修饰符例如:private,protected,public等。Java非访问修饰符例如:static,final等。要使用修饰符,请在类,方法或变量的定义中包含修饰符关键字。修饰符位于语句之前,
Wesley13 Wesley13
2年前
Java中的权限修饰符
Java中修饰符总结:1.访问控制修饰符 作用:用于控制被修饰变量、方法、类的可见范围. public的访问级别是最高的,其次是protected、默认和private. 成员变量和成员方法可以处于4个访问级别中的一个:公开、受保护、默认或私有.