java语言特点
1、面向对象
2、支持多线程
3、可靠性
4、安全性
JVM虚拟机
1、java虚拟机(JVM)是运行Java字节码的虚拟机。jvm有针对不同系统的特定实现(windows、linux、macOS)
2、JVM不仅仅只有一种,只要满足JVM规范,每个公司、组织或者个人都可以开发自己的专属JVM
JDK和JRE
JDK是Java Development Kit 缩写,它是功能齐全的java SDK。它拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序
字节码
在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class
的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以, Java 程序运行时相对来说还是高效的
java与python的区别
java是编译型语言,class文件需要解析器来运行,python是脚本语言,需要有相应的脚本引擎才能运行
java注释
1、单行注释 :注释单行代码
2、多行注释:解释一段代码的作用
3、文档代码:用于生成开发文档,在实际开发中应用较少
标识符和关键字
标识符:为程序、类、变量、方法等取名字
关键字:被赋予特殊含义的标识符
自增自减运算符
在写代码的过程中,常见的一种情况是需要某个整数类型变量增加 1 或减少 1,Java 提供了一种特殊的运算符,用于这种表达式,叫做自增运算符(++)和自减运算符(--)。
++和--放在变量之前,代表先自增/自减后再赋值;当++和--放在变量之后,代表先赋值后自增/自减
continue、break、return的区别
1、continue:跳出当前的这一次循环,继续下一次循环
2、break:指跳出整个循环体,继续执行循环下面的yujv
3、return :跳出当前执行的方法、结束该方法的运行
java基本数据类型
基本类型和包装类型的区别
- 成员变量包装类型不赋值就是
null
,而基本类型有默认值且不是null
。 - 包装类型可用于泛型,而基本类型不可以。
- 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被
static
修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。 - 相比于对象类型, 基本数据类型占用的空间非常小
基本数据类型的成员变量如果没有被 static
修饰的话,就存放在堆中。
包装类型的缓存机制
Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。
Integer i1 = 3;
Integer i2 = 3;
System.out.println(i1 == i2);// 输出 true
Float i11 = 2f;
Float i22 = 2f;
System.out.println(i11 == i22);// 输出 false
Double i3 = 5.0;
Double i4 = 5.0;
System.out.println(i3 == i4);// 输出 false
自动装箱与拆箱
- 装箱:将基本类型用它们对应的引用类型包装起来;
- 拆箱:将包装类型转换为基本数据类型;
Integer i = 100; //装箱
int n = i; //拆箱
Integer i = 100
等价于Integer i = Integer.valueOf(10)
int n = i
等价于int n = i.intValue()
;
注意:如果频繁拆装箱,也会严重影响系统的性能
浮点运算的时候精度丢失
为什么?这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示
如何解决浮点数运算精度丢失?
通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal
来做的。
BigDecimal a = new BigDecimal("3.0");
BigDecimal b = new BigDecimal("2.0");
BigDecimal c = new BigDecimal("1.0");
BigDecimal x = a.subtract(b);
BigDecimal y = b.subtract(c);
System.out.println(x); /* 0.1 */
System.out.println(y); /* 0.1 */
System.out.println(Objects.equals(x, y)); /* true */
超过long整型的数据如何表示
long l = Long.MAX_VALUE;
System.out.println(l + 1); // -9223372036854775808
System.out.println(l + 1 == Long.MIN_VALUE); // true
参考:
https://javaguide.cn/java/basis/java-basic-questions-01.html