基础知识这种东西,没注意到的永远比想象中多.大部分都是在面试中问到的...

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基础点总结的更多相关文章

  1. 需要了解的几个Java基础点

    关键字 native:表示要调用非Java语言写函数,比如用C语言使用JNI实现的接口.比如windows环境的dll文件.举例:Object.hashcode() 位运算 << n:左移 ...

  2. java基础点

    1.eclipse什么时候编译java类文件 2.在同一包中的类可以相互引用,无需用import语句 3.在Java eclipse用ALT输入特殊符号 4.if else等语句,什么时候可以不加括号 ...

  3. java基础点<一>

    1. 九种基本数据类型的大小,以及他们的封装类.byte,short,int,long,boolue,float,double,char,特殊voidByte,Short,Integer,Long,B ...

  4. Java学习---面试基础知识点总结

    Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...

  5. Java如何打好牢固的基础?

    如果纯粹是为了学Java,那么不建议阅读本文,因为本文不是从理论和教科书的角度讲述如何打好java基础,而是会从"快速用java挣钱"这个角度,讲边学.边做项目和边提升的方法. 在 ...

  6. spring-retry的简单使用

    添加Maven依赖: <dependency> <groupId>org.springframework.retry</groupId> <artifactI ...

  7. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  8. Java虚拟机垃圾回收:基础点(转载)

    1.Java虚拟机垃圾回收 垃圾回收,或称垃圾收集(Garbage Collection,GC)是指自动管理回收不再被引用的内存数据. 在1960年诞生于MIT的Lisp语言首次使用了动态内存分配和垃 ...

  9. java类及编写public类的基础点

    1.一个java文件中只能有一个public类.且公共类名称必须与java文件名一致,否则会出现错误提示.与其他面向对象编程语言的一样,在利用java分析问题时,基本思路即为将问题的属性(静)与行为( ...

随机推荐

  1. atom使用技巧

    文本 批量处理 正则 空格换成换行:Atom替换换行符直接[Ctrl]+[F],然后选择正则,输入\n

  2. Linux下使用RedisPool时报错:redis.clients.jedis.HostAndPort getLocalHostQuietly 严重: cant resolve localhost address

    项目在本地无错误,当部署到linux服务器以后,启动tomcat报错: 意思是找不到服务的名称. 后在网上检索相关答案,是因为在/etc/hosts文件中没有加入当前服务器实例的名称,将当前服务器实例 ...

  3. Microsoft SQL Server 错误:948

    版本655指的是SQL2008, 版本611指的是SQL2005, (还有一个版本539指的是SQL2000) 楼主的情况属于典型的从高版本降低至低版本使用的情景. 按微软的官方说法, 是不支持从高版 ...

  4. SpringBoot集成MongoDB

    前言 之前写了各种nosql数据库的比较,以及相关理论,现在我在本地以springboot+MongoDB框架,探究了具体的运行流程,下面总结一下,分享给大家. 运行前准备 安装并启动MongoDB应 ...

  5. 使用Fiddle对夜神模拟器进行抓包的设置

    注意: 设置完后, 不开启 Fiddle 的话,模拟器就不能上网了.  可以通过再把网络配置 改回去 就可以恢复网络正常访问了 一.配置Fiddle参数设置 1.Tools->Options 2 ...

  6. python添加post请求

    1.进入python的安装目录下的Scripts目录 ,利用pip install requests安装第三方模块 2.火狐浏览器自带firebug,打开http://10.148.111.111/q ...

  7. 【转】重写Equals为什么要同时重写GetHashCode

    .NET程序员都知道,如果我们重写一个类的Equals方法而没有重写GetHashCode,则VS会提示警告 :“***”重写 Object.Equals(object o)但不重写 Object.G ...

  8. anaconda安装qt错误

    windows下miniconda2安装python3下的qt包报错 conda install qt ERROR conda.core.link:_execute_actions(330): An ...

  9. Vs2017的git真S B

    1.先是无法克隆 2.修改用户还是无法克隆 3.修改用户凭据还是无法克隆 4.重装机器,将vs改为2017企业版,他妈的还是无法克隆 5.测试发现我这台机子无法克隆,其他的可以 6.提示永远是 Git ...

  10. 201621123002《java程序设计》第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...