概述
优点:跨平台性(JVM),面向对象性,健壮性(无指针与内存申请释放),安全性高,简单性(C艹简化版),高性能(JIT实现),社区繁荣!
缺点:复杂,严谨(还是Python香),不适用于所有领域
JVM(全名JAVA虚拟机)
功能1:实现JAVA的跨平台性
使用JVM前后对比
功能2:自动内存管理
1.JAVA程序在运行过程中,涉及到运算的数据分配、存储等都由JVM来完成
2.JAVA消除了程序员回收无用内存空间的职责。提供了一种系统级线程跟踪存储空间的分配情况,在内存空间达到相应阈值时,检查并释放可被释放的存储器空间
3.GC的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放内存空间而导致的内存泄漏
(但JAVA程序依然会出现内存溢出和内存泄露问题!)
注:内存溢出:即为超出内存容量(易发现);内存泄露:即是垃圾但没回收(不易发现)
JDK 是 Java Development Kit(Java开发工具包)的缩写。它是用于开发 Java 应用程序和 Applet 的软件开发工具包,包括了 Java 运行环境(JRE),编译器(javac),调试器(jdb),一些 Java 工具(如 javadoc 和 javap),以及其他一些基本的工具。
JDK 通常包括以下主要组件:
-
Java Runtime Environment (JRE):Java 运行时环境,提供了在计算机上运行 Java 程序所需的所有类库和资源。JRE 是运行 Java 程序的基本环境,它包括 Java 虚拟机(JVM)和核心类库。
-
Java Compiler (javac):Java 编译器,用于将 Java 源代码文件(.java 文件)编译成 Java 字节码文件(.class 文件)。
-
Java Virtual Machine (JVM):Java 虚拟机,用于在计算机上执行 Java 字节码。JVM 是 Java 程序的运行时引擎,它负责解释和执行 Java 字节码。
-
Java Development Tools:Java 开发工具,如调试器(jdb)、文档生成工具(javadoc)等,用于帮助开发人员编写、调试和文档化 Java 程序。
JDK 是开发 Java 应用程序和 Applet 的必备工具,开发人员可以使用 JDK 提供的工具和类库来编写、编译和调试 Java 程序。在选择 JDK 版本时,通常会考虑到其功能、性能、稳定性以及与特定操作系统的兼容性等因素。
\n换行 \t制表符(四空格)
推荐自学书籍(来自shk):《JAVA核心技术》、《Effective JAVA》、《JAVA编程思想》
插入一些八股真题:
一个'.java'源文件中是否可以包括多个类?有什么限制?
可以!
一个源文件中可以声明多个类,但是最多只能有一个类使用public进行声明,且要求声明为public的类的类名与源文件名相同。(怀念py)
常用终端JAVA命令(javac, java, javap, jar, javadoc, jps, jstat, jconsole, jstack)
如何看待Java是一门半编译半解释型的语言(某程)
变量与运算符
关键字和保留字
关键字定义与特点
定义:被JAVA赋予特殊含义,用作专门用途的字符串(单词)
特点:关键字中所有字母都小写
官方地址:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
标识符
JAVA对各种变量、方法和类等要素命名时使用的字符序列称为标识符
技巧:凡是可以自己起名字的地方都叫标识符
定义合法标识符规则
由26个英文字母大小写,0-9,_或$组成
数字不许开头
不可以使用关键字和保留字,但可以包含他俩
JAVA中严格区分大小写,长度没有限制
标识符不许含空格
转义字符补充
当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本类型的值将自动转化为字符串(String)类型
逻辑运算符
位运算符细节(二进制)
运算符的优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。表中上一行优先于下一行
只有单目运算符、三元运算符、赋值运算符是从右到左运算的。
JAVA程序基本结构
顺序结构
程序从上到下逐行执行,中间没有任何判断和跳转。
分支结构
根据条件,选择性地执行某段代码,有if...else 和 switch-case两种
插:生成随机数用Math.random(),生成[0,1)的随机数
switch(表达式)中表达式的值必须是下述几种类型之一:
byte, short, char, int, 枚举(JDK5.0), String(JDK7.0)
case子句中的值必须是常亮,不能是变量名或不确定的表达式值;
同一个switch语句,所有case子句中的常量值互不相同;
break语句用来在执行完一个case分支后使程序跳出switch语句块,如果没有break,程序会顺序执行到switch结尾
default子句是可任选的。同时位置也灵活,当没有匹配的case时,执行default
问题:if和switch语句很像,具体什么场景用哪个语句?
如果判断具体数值不多且符合上述switch表达式类型,虽两种都可用,但使用switch效率稍高
其他情况:对区间判断,对结果为布尔类型判断,使用if,if使用范围更广
也就是说:使用switch-case的,都可以改写为if-else
循环结构
根据循环条件重复性执行某段代码,有while,do...while,for三种
注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。
语法格式
for循环:
while循环:
do-while循环:
特殊流程控制语句:
break语句:用于终止某个语句块的执行
{ ...
break;
...
}
当break出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块:
label1: { ......
label2: { ......
label3: {......
break label2;
......
}
}
}
continue语句:
只能出现在循环结构中;用于跳过其所在的循环语句块的一次执行,继续下一次循环;
出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过哪一层循环
return语句:
并非专门用于结束循环,他的功能是结束一个方法。当一个方法执行到一个return语句时,此方法将被结束。
与break, continue不同之处是,不管他处于多少层循环之内,都直接结束这个方法。