java基础点总结
基础知识这种东西,没注意到的永远比想象中多.大部分都是在面试中问到的...
1.static关键字
变量,方法修饰;静态代码块;静态内部类;
静态导入:import static ,静态方法省略类名,直接调用.
2.final关键字
修饰基础数据类型时,表示数值恒定不变,修饰引用类型时,表示指向的引用不变,但引用的具体值确实可以修改的
使用final方法,在一定程度上有可能提高程序效率,将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里,编译器会忽略为执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除堆栈自变量;最后对返回值进行处理),而是使用方法体内实际代码的副本作为实际调用,避免方法调用时的系统开销,但是,方法体积大时,方法内部的时间抵消了系统开销。通常,只有在代码量非常小或者明确方法不被覆盖时,才将其定义为final.
3.transient关键字
在新建entity时,通常我们会将其进行序列化,常规操作为 implements java.io.Serializable , 但是实体中某些字段属性可能并不需要传输,此时,可以用transient关键进行修饰,则此字段不进行序列化;
另,除开Serializable 接口,Externalizable接口也可实现序列化,通过writeExternal()和readExternal()方法,可以执行一些特殊操作.
4.sleep()与wait()方法
二者都用于线程调度,二者都会释放cpu资源,但是,sleep()不会释放掉cpu的所有权,也就是说对象的锁并没有释放,其他线程仍无法访问这个对象;而wait()会释放掉锁,允许其他线程的访问.
5.常量池
Byte,Short,Integer,Long,Character,Boolean 这五种包装类型,默认[-128,127]间使用常量池;而Float,Double并没有实现常量池;
String类型使用引号创建的对象才会被放进常量池(包括使用+),而使用new创建出来的对象并不会放入常量池中;
String intern()方法,查询当前常量池中是否含有与某字符串equals()的常量,如果有则返回其引用,没有则将自己添加进常量池.
6.volatile
并发时,原子性与可见性作为两个保证安全条件,volatile具有可见性,但不具有原子性;
volatile变量修饰的值被修改时,底层命令带lock前缀,将处理器内存回写到内存,然后根据缓存一致性机制使其他缓存失效,保证可见性.
7.ConcurrentHashMap
hashMap 线程不安全,多线程下使用put()会引起死循环;hashTable效率低下,并发下访问其对象必须竞争同一把锁;
ConcurrentHashMap由可重入锁Segment 与 键值对 HashEntry 组成.ConcurrentHashMap使用锁分段技术保护不同段的数据,避免像hashTable一样并发竞争同一把锁引起的效率问题.
ConcurrentHashMap通过两次hash将元素分布到不同的Segment 上,然后Segment 分段保护其段上数据.
hashTable 在get()数据时也需要加锁,而ConcurrentHashMap的get()并不需要加锁(空值时加锁重读),因为HashEntry 中的值被定义为volatile,能够保持可见性.
ConcurrentHashMap的put()操作需要加锁,先定位到对应的Segment ,然后在Segment 中进行插入.
ConcurrentHashMap的size()并不是单纯的等于所有Segment 的和,计算时,其先进行两次不加锁的计算进行比较,若存在变动,则加锁进行计算.
ConcurrentHashMap 弱一致性.
8.finally块中的语句一定会执行到么?
try之前就return,则并不会执行到;
exit()方式执行,不会被执行到;
finally块的语句在try或catch中的return语句执行之后返回之前执行,finally块中的修改语句不能影响到try或者catch中return已经确定的值,会发生覆盖.
java基础点总结的更多相关文章
- 需要了解的几个Java基础点
关键字 native:表示要调用非Java语言写函数,比如用C语言使用JNI实现的接口.比如windows环境的dll文件.举例:Object.hashcode() 位运算 << n:左移 ...
- java基础点
1.eclipse什么时候编译java类文件 2.在同一包中的类可以相互引用,无需用import语句 3.在Java eclipse用ALT输入特殊符号 4.if else等语句,什么时候可以不加括号 ...
- java基础点<一>
1. 九种基本数据类型的大小,以及他们的封装类.byte,short,int,long,boolue,float,double,char,特殊voidByte,Short,Integer,Long,B ...
- Java学习---面试基础知识点总结
Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...
- Java如何打好牢固的基础?
如果纯粹是为了学Java,那么不建议阅读本文,因为本文不是从理论和教科书的角度讲述如何打好java基础,而是会从"快速用java挣钱"这个角度,讲边学.边做项目和边提升的方法. 在 ...
- spring-retry的简单使用
添加Maven依赖: <dependency> <groupId>org.springframework.retry</groupId> <artifactI ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java虚拟机垃圾回收:基础点(转载)
1.Java虚拟机垃圾回收 垃圾回收,或称垃圾收集(Garbage Collection,GC)是指自动管理回收不再被引用的内存数据. 在1960年诞生于MIT的Lisp语言首次使用了动态内存分配和垃 ...
- java类及编写public类的基础点
1.一个java文件中只能有一个public类.且公共类名称必须与java文件名一致,否则会出现错误提示.与其他面向对象编程语言的一样,在利用java分析问题时,基本思路即为将问题的属性(静)与行为( ...
随机推荐
- 企业BGP网络规划案例(三)
路由选路 1.分支的办公流和生产流默认走联通MSTP线路,DC流默认走电信MSTP线路,当其中某条互联的链路down后才会进行流量切换 XRV1配置 ========================= ...
- python的argpare和click模块详解
一.argparse模块 1.模块说明 # argparse是python的标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块,argparse能够根据程序中的定义的sys.ar ...
- python requests库爬取网页小实例:ip地址查询
ip地址查询的全代码: 智力使用ip183网站进行ip地址归属地的查询,我们在查询的过程是通过构造url进行查询的,将要查询的ip地址以参数的形式添加在ip183url后面即可. #ip地址查询的全代 ...
- Tableau可视化绘图教程
https://www.w3cschool.cn/tableau/tableau_environment_setup.html
- Mybatis order by语句使用<Choose><When>动态拼装无效的原因及解决方法
在使用 <choose> <when test=""> </when> <otherwise> </otherwise> ...
- [精华][推荐]CAS SSO单点登录服务端客户端学习
1.通过下载稳定版本的方式下载cas的相关源码包,如下: 直接选择4.2.1的稳定代码即可 2.我们项目中的版本版本使用maven apereo远程库去下载 通过远程maven库下载cas-serve ...
- Python批量执行oracle中的insert语句
从oracle导出一个表的数据,导出的格式是insert语句,数据量30万. 直接在PL/SQL Developer中执行,速度非常慢,脚本中也是100条数据提交一次.因为需要的时间太长,每次中断后, ...
- Windows 自动化补丁管理
Windows 自动化补丁管理 Desktop Central,这一倍受欢迎的补丁管理软件旨在修补可能导致安全薄弱.破坏关键系统数据或导致系统不可用的漏洞.管理此类软件漏洞对网络管理员来说简直是噩梦. ...
- python Flask框架mysql数据库配置
我是一个没有笔记习惯的低级程序员,但是我还是喜欢编程,从小学就开始跟着玩电脑,对抓鸡,ddos,跳板刷钻开始了自己的IT 旅程,之后学习了各种语言,但是可惜都不没有达到精通,都是略懂一二,现在想把Py ...
- 通过PRINT过程制作报表
通过PRINT过程制作报表 PRINT过程是SAS中用于输出数据集内容的最简单常用的过程,它可将选择的观测和字段以简单的矩形表格形式输出. 1.1 制作简单报表 使用PRINT过程最简单的语法形式如下 ...