java中引用的概念 java synchronized锁对象,当对象引用是null的时候,锁的是什么?
java synchronized锁对象,当对象引用是null的时候,锁的是什么?
谢邀!
Java语言规范中明确指出如果锁住的对象是null,则会NullPointerException,规范内容如下:
The type of Expression must be a reference type, or a compile-time error occurs. A synchronized statement is executed by first evaluating the Expression. Then: If evaluation of the Expression completes abruptly for some reason, then the synchronized statement completes abruptly for the same reason. Otherwise, if the value of the Expression is null, a NullPointerException is thrown.
Java的哪个语法特性让你觉得写Java代码很享受?
本人在日常主要使用的语言为c#和Java,就语法而言,写c#更让人享受。主要原因为c#更多的语法糖,linq真的好用,其次visual studio号称宇宙第一IDE。但是个人还是更愿意用java。
从java8出来后,感觉java在追赶着c#的步伐, java和c#的语法上越来越像(本来也挺像的,哈哈)。以下做一个小小的比较。
c#
java
以上实现的功能差不多,在java8中加入lambda表达式后,个人感觉越来越像c#了。
抛开语法层面,现在来说一说为什么更愿意用java
1、首先当然是看收益啦,在国内基本上没有用c#的大厂,本来携程在用,后来也转为java了。
2、从技术层面来讲,因为java造轮子的多,有很多优秀的框架可以使用。在实际做项目中你遇到的问题,其他人肯定遇到过,能够很好的找到问题关键。
3、从生态上来讲,Java无疑是最好的选择之一,因为其开源的早,建立生态的时间早。
4、从性能来说,Sun/Oracle的HotSpot JVM内置的JIT编译器在运行时对字节码已经做出了非常大的优化努力,如果不是对性能十分敏感的应用,java足够用了。
谢谢。
Java中的注解到底是如何工作的?
注解是用来描述Java类的,可以自定义注解,然后通过反射获取注解执行指定的动作。
举个简单的例子
这样就可以通过反射来获取到一些元信息了,相当于配置和业务逻辑实现了分离。
当然这个自定义注解还需要依赖一些特定的注解,我们称为元注解。一共有5种:
@Retention:存活的周期
RetentionPolicy.SOURCE
保留在源码阶段RetentionPolicy.CLASS
编译RetentionPolicy,RUNTIME 运行阶段
@Documented 将注解中的元素包含到JavaDoc中
@Target 注解可以用到的地方 有类、方法、属性等
@Inherited 继承
@Repeatable 可重复
Java对象使用后设置为null会减少内存占用吗?
首先科普一下,Java对象是引用变型的,它会用两种内存区:堆内存、栈内存。Java对象是存储在堆内存中的,而对此对象的引用(理解为变量)存储在栈内存中。
比如:String str=new String("字符串") 这行代码用的是两块内存,new String("字符串") 存在堆内存中,str 变量存储在栈内存中。
当我们设置对象为 null 后(即:str=null),此时str变量与堆内存中的数据就断开联系了,GC算法会在必要时回收 str 及堆内存中的对象,但这个GC任何回收我们是无法干预的。
总结说就是:Java对象在使用后设置为null,在GC对此对象回收后,内存会相应减少,但不是说将一个对象引用设置为null后内存就立马释放了。GC会在合适的时间来回收垃圾数据。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。