Java基础(一)——2019/12/19
- Java中如何支持正则表达式操作
Java中的String类提供了支持正则表达式操作的方法:matches()、 replaceAll()、split()等。此外,Java还提供了Pattern类和Matcher类来支持正则表达式操作。
- 简单描述一下正则表达式的用途
我们在处理编写处理字符串的程序时,常常需要依据某种模式(pattern)对字符串进行一定的操作:查询、剪切、替换等,正则表达式正是我们用来定义模式(pattern)的强大工具。绝大多数语言均支持正则表达式。
- 比较一下Java和JavaScript
- Java:面向对象、编译性语言、强类型语言
- JavaScript:基于对象和事件驱动、解释型语言、弱类型语言
- 编程语言的分类
分类标准 | 类别 | 特征 | 优点 | 缺点 | 代表语言 |
---|---|---|---|---|---|
程序执行方式 | 编译型语言 | 需要通过编译器将源代码编译成机器码, 然后才能执行的语言 |
性能较高 | 修改程序时需要重新编译,可移植性较差 | C、C++ |
解释型语言 | 源代码不需要编译, 在执行的时候逐行翻译 |
跨平台(前提是安装了解释器)、可以快速部署 | 性能较差 | JavaScript、Python、PHP | |
混合型语言 | 混合型语言也叫做半编译型语言,源代码先被编译成中间码, 执行时由JIT执行中间码 |
可移植性强 | 性能中等 | Java、C# | |
对数据类型检查的时间 | 动态类型语言 | 在运行时确定数据类型, 不需要类型声明,变量的类型通常为被赋值的值的类型 |
Python、JavaScript、PHP、swift | ||
静态类型语言 | 在编译时确定数据类型, 需要声明数据类型 |
C、C++、C#、Java | |||
对数据类型的处理方式 | 强类型语言 | 当一个变量被定义成某种类型,如果不进行强制类型转换(显示转换),其类型不会改变。 | 运行效率较高、内存利用率较高 | Java、C#、Python | |
弱类型语言 | 数据类型可以被忽略,一个变量可以赋不同数据类型的值。 给一个整型变量a赋一个字符串值,那么a就变成字符类型。 |
运行效率较低(存在隐式类型转换)、 内存利用率较低(考虑通用性而多分配内存)、 对数据类型的检测力度不够 |
JavaScript、PHP |
- Attentions
- JIT:Just-In-Time Compiler,即时编译器,将Java字节码转换成机器码。
- V8引擎:V8引擎被设计用来提高浏览器执行JavaScript的性能,V8引擎会将js代码转换成机器码(不同于中间码),而不是依赖解释器执行js代码。
- 通常情况下解释型语言是动态类型语言、编译型语言是静态类型语言。
- C和C++虽然能过隐式类型转换,但也是编译器通过调用相应的类型转换函数完成的,C和C++是强类型语言。
- Java中如何跳出多重嵌套循环
首先嵌套循环的深度不宜过深,超过3层就要考虑是否能够选择其他的方式或者对代码进行重构。可以在循环外部设置flag,然后通过修改flag的值来控制是否跳出嵌套循环。
- &和&&的区别
&(按位与)、&&(逻辑与),需要注意的是&不支持短路,&&支持短路。所以在大多数逻辑判断中应该使用&&而不是&,否则程序会崩溃,当然在进行位运算时只能使用&。
比如:username != null && !username.equal("")如果写成username != null & !username.equal("")在username为null时就会出现空指针异常。
- int和Integer有什么区别
int是基本数据类型,Integer是引用数据类型,是int的包装类(wrapper class)。Java为每个基本数据类型都引入了对应的包装类型,从Java5开始引入了自动装箱/拆箱机制,使得两者之间可以自动转换。
- String是否属于基本数据类型
Java中的基本数据类型只有:byte、char、short、int、long、float、double、boolean,其他数据类型均为引用数据类型。
- String、StringBuilder与StringBuffer
类型 | 特征 | 适用场景 |
---|---|---|
String | 字符串常量,一旦创建便不可修改。 对String类型的变量进行赋值操作时,会创建新的String对象, 并将指针指向新的String对象。 所以当创建的临时String对象过多时,JVM的GC便会开始工作, 相应地程序的性能便会下降。 |
只涉及少量的字符串操作 |
StringBuilder | 使用StringBuilder对字符串进行操作时不会产生临时的String对象, 线程不安全。 |
单线程字符缓冲区的大量操作 |
StringBuffer | 类似于StringBuilder,但是StringBuffer是线程安全的。 | 多线程字符缓冲区的大量操作(通过synchronized实现线程安全) |