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

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. 20. Valid Parentheses (JAVA)

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  2. shell执行Python并传参

    shell: python test.py a1 222 test.py import sys print(sys.argv[1], type(sys.argv[1])) # a1 str print ...

  3. nltk分词

    1.安装nltk 2.运行如下 >>>import nltk>>> nltk.download('punkt') 3.代码: import nltk sentenc ...

  4. Servlet中的转发与重定向

    Sevlet 的转发与重定向都可以使得浏览器指向另一个资源文件,但它们的运行机制不相同. 一.Servlet的转发 有两种方式获得转发对象(RequestDispathcer): HttpServle ...

  5. MySQL开发设计规范

    1.库命名规则:dbname_suffix,分为_dev/_test/_pre/_mertest/_perf/_prod六个环境 2.适度反范式设计,冗余表字段数据减少JOIN关联提高访问效率 3.普 ...

  6. JavaScript数据类型,构造函数

    JavaScript 的数据类型分为两类:原始类型和对象类型. JavaScript中的原始类型包括数字.字符串和布尔值 JavaScript中有两种特殊的原始值:null和undefined. Ja ...

  7. 当Vue中img的src是动态渲染时不显示问题

    最近遇见动态渲染img时,想起了当初刚开始写vue时,曾经遇见的一个小小坑. Vue中:img的src属性是动态渲染时不显示问题1.需求:展示用户头像,数据从后台获取,如果没有拿到则显示默认图片. 如 ...

  8. Java中的Integer和int

    Java中的Integer是引用类型,而int是基本类型.Integer是int的包装器类型. java中的基本类型有布尔类型boolean;字符类型char;整数类型byte,int,long,sh ...

  9. HttpServletRequest字符集问题

    post中文处理 1post在spring里的设置web.xml文件 <!-- 字符处理 UTF8 --> <filter> <filter-name>encodi ...

  10. PAT A1010.Radix 二分法

    PAT A1010.Radix 链接: https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 算法 ...