-
JVM(Java virtual Machine java虚拟机) compiler(编译器)interpreter(解释器),JVM包含解释器
-
JDK:Java Development Kit(java开发工具包) JRE:java Runtime Environment(java运行时环境)
-
IDE:集成开发环境(IDE)是一类软件,它将程序开发环境和调试环境集合在一起,提高开发效率的第三方工具,如Eclipse(绿色版)、MyEclipse、NetBeans、IDEA
-
标识符:用于给 Java 程序中变量、类、方法等命名的符号。
使用标识符时,需要遵守几条规则:
(1)标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符,不能以数字开头。譬如:123name 就是不合法的
(2)标识符不能是 Java 关键字和保留字( Java 预留的关键字,以后的升级版本中有可能作为关键字),但可以包含关键字和保留字。如:不可以使用 void 作为标识符,但是 Myvoid 可以
(3) 标识符是严格区分大小写的。
(4) 标识符的命名最好能反映出其作用,做到见名知意。 -
变量可以先声明后赋值,也可以声明的同时赋值
-
常量名一般使用大写字符,语法:final 常量名 = 值;
-
float是单精度浮点数,内存分配4个字节,占32位,有效数字8位;double是双精度浮点数,内存分配8个字节,占64位,有效数字17位
(1)double精度高,有效数字16位,float精度8位。但double消耗内存是float的两倍,double的运算速度比float慢得多,所以在使用计算过程中,能用单精度时不要用双精度,以省内存,加快运算速度;
(2)当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f;
(3)小数的加减乘除应转换成BigDecimal运算; -
在 Java 的领域里,基本数据类型变量存的是数据本身,而引用类型变量存的是保存数据的空间地址。
-
String转Long等基本类型:
(1)Long.valueOf(“String”) 返回Long包装类型
(2)Long.parseLong(“String”) 返回long基本数据类型 -
自动装箱和自动拆箱:
(1)自动装箱:编译器自动将基本数据类型转换为包装类型;
(2)自动拆箱:编译器自动将包装类型转换为基本数据类型。 -
货币金额和浮点数处理注意事项:
(1)【强制】任何货币金额,均以最小货币单位且整型类型来进行存储。比如说人民币的最小单位是分,那假设一个商品的价格是1元钱,那就存到数据库的 price 字段,字段类型是 int 或者 bigint,值为 100,单位是分,也就是100分。
(2)【强制】浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals
来判断。
(3)double类型转BigDecimal禁止用new BigDecimal(),优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法。
BigDecimal recommend1 = new BigDecimal("0.1");
BigDecimal recommend2 = BigDecimal.valueOf(0.1);
(4)BigDecimal转double:不要直接使用Double.parseDouble转,使用BigDecimal类里面doubleValue()方法
BigDecimal d = new BigDecimal("0.1");
double b = d.doubleValue()
-
堆、栈、常量池的区别:
(1)heap(堆):存放new关键字构造出来的对象,优点是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据,缺点是存取速度较慢。
(2)stack(栈):存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用。优点是存取速度比堆快,栈数据可以共享,缺点是,存放在栈中的数据占用多少内存空间需要在编译时确定下来,缺乏灵活性。)
(3)常量池(存放字符串常量和基本类型常量(public static final),好处是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。 -
简单的说,静态变量是常驻内存的,一般把配置信息等常用内容放在里面。比如文件路径、字符集编码、一般设置参数等。
-
元空间:主要作用是存储类的元数据信息,包括类的结构信息、方法信息、字段信息、注解信息等。与永久代不同,元空间的内存空间并不在虚拟机堆中,而是在本机物理内存中分配,因此元空间的大小不受虚拟机堆的大小限制,也不会触发垃圾收集器的工作。
-
JDK1.6及以前,常量池在方法区,这时的方法区也叫做永久代;
JDK1.7的时候,方法区合并到了堆内存中,这时的常量池也可以说是在堆内存中;
JDK1.8及以后,方法区又从堆内存中剥离出来了,但实现方式与之前的永久代不同,这时的方法区被叫做元空间,常量池就存储在元空间。 -
for循环与while循环的区别
(1)从内存角度考虑:局部变量在栈内存中存在,当for循环语句结束,那么变量会及时被gc(垃圾回收器)及时的释放掉,不浪费空间;如果使用循环之后还想去访问循环语句中控制那个变量,使用while循环。
(2)从应用场景角度考虑:如果一个需求明确循环的次数,那么使用for循环(开发中使用for循环的几率大于while循环);如果一个需求,不知道循环了多少次,使用while循环。 -
System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序。