细说那些被忽略的Java小知识(一)

来源:互联网 发布:python idle mac下载 编辑:程序博客网 时间:2024/05/23 14:12

1、Java到底是什么类型的语言?
对于初学者而言,想必有许多人不清楚什么是编译语言,什么是解释语言。
编译型语言:在程序执行前,有一个单独的过程,将程序编译成机器语言,以后运行时都不用再编译。
解释型语言:在程序运行时,将源文件解释成机器语言。
而Java既有编译过程,又有解释过程,那么它到底属于什么?
Java文件在运行前先被编译(工具:java.exe)成字节码文件(class文件),然后在虚拟机中被解释(工具:javac.exe)成机器语言。不过由于它每次运行都需要执行这样的过程,所以它还是被归入解释型语言。
2、在安装环境时JRE不得放入JDK包内
JDK开发工具自带JRE运行环境,如果再放一个JRE在其中,会导致冲突,从而失效。
3、关键字需要注意的细节
private:用于封装数据,被private修饰的方法和变量在继承中,不被子类继承
abstract:用于定义抽象类,被abstract修饰的方法没有方法体
static:定义共享数据,无论所属类被创建多少次,它只占一份内存
final:与static连用,定义全局常量
synchronized:用于解决多线程问题,使方法同步
import:用于解决类名冲突问题(java.lang包默认导入)
package:写在除注释外的第一行
4、基本类型数据作为成员变量拥有初始值
boolean:false char:null
byte:0 int:0
short:0 Long:0L
float:0.0f double:0.0d
5、数的不同进制表达
不同进制运算:0b-二进制,0-八进制,ox-十六进制
注:二进制配合位运算是最高效的运算方式
6、指数运算
指数记数法:num1 e (+-)num2 f = num1*10^(+-)num2
7、eclipse格式化快捷键无效
ctrl+shift+f 搜狗输入法的简繁转化会占用该快捷键
8、更换jdk导致eclipse无法使用

修改方式
9、如何减少gc(垃圾回收)对jvm的负担
(1)不要显式调用System.gc()
  此函数建议JVM进行主GC,虽然只是建议而非一定,但很多情况下它会触发主GC,从而增加主GC的频率,也即增加了间歇性停顿的次数。
  (2)尽量减少临时对象的使用
  临时对象在跳出函数调用后,会成为垃圾,少用临时变量就相当于减少了垃圾的产生,从而延长了出现上述第二个触发条件出现的时间,减少了主GC的机会。
  (3)对象不用时最好显式置为Null
  一般而言,为Null的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC收集器判定垃圾,从而提高了GC的效率。
  (4)尽量使用StringBuffer,而不用String来累加字符串
  由于String是固定长的字符串对象,累加String对象时,并非在一个String对象中扩增,而是重新创建新的String对象,如Str5=Str1+Str2+Str3+Str4,这条语句执行过程中会产生多个垃圾对象,因为对次作“+”操作时都必须创建新的String对象,但这些过渡对象对系统来说是没有实际意义的,只会增加更多的垃圾。避免这种情况可以改用StringBuffer来累加字符串,因StringBuffer是可变长的,它在原有基础上进行扩增,不会产生中间对象。
  (5)能用基本类型如Int,Long,就不用Integer,Long对象
  基本类型变量占用的内存资源比相应对象占用的少得多,如果没有必要,最好使用基本变量。
  (6)尽量少用静态对象变量
  静态变量属于全局变量,不会被GC回收,它们会一直占用内存。
  (7)分散对象创建或删除的时间
  集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM在面临这种情况时,只能进行主GC,以回收内存或整合内存碎片,从而增加主GC的频率。集中删除对象,道理也是一样的。它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主GC的机会。