并发、IO、容器的工具类不会在本文提及,后面会有专题一一道来。
字符串
String
StringBuffer
StringBuilder
日期时间
Date
SimpleDateFormat
Calendar
数学
Number
Math
参考资料
2025年3月4日小于 1 分钟
并发、IO、容器的工具类不会在本文提及,后面会有专题一一道来。
空白行,或者注释的内容,都会被 Java 编译器忽略掉。
Java 支持多种注释方式,下面的示例展示了各种注释的使用方式:
public class HelloWorld {
/*
* JavaDoc 注释
*/
public static void main(String[] args) {
// 单行注释
/* 多行注释:
1. 注意点a
2. 注意点b
*/
System.out.println("Hello World");
}
}
String 类型可能是 Java 中应用最频繁的引用类型,但它的性能问题却常常被忽略。高效的使用字符串,可以提升系统的整体性能。当然,要做到高效使用字符串,需要深入了解其特性。
我们先来看下 String
的定义:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
Java 控制语句大致可分为三大类:
- 选择语句
- if, else-if, else
- switch
- 循环语句
- while
- do...while
- for
- foreach
- 中断语句
- break
- continue
- return
Java 泛型(generics)是 JDK 5 中引入的特性。
为什么要引入泛型机制呢?
回答这个问题前,先让我们来看一个示例。
public class NoGenericsDemo {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("abc");
list.add(18);
list.add(new double[] {1.0, 2.0});
Object obj1 = list.get(0);
Object obj2 = list.get(1);
Object obj3 = list.get(2);
System.out.println("obj1 = [" + obj1 + "]");
System.out.println("obj2 = [" + obj2 + "]");
System.out.println("obj3 = [" + obj3 + "]");
int num1 = (int)list.get(0);
int num2 = (int)list.get(1);
int num3 = (int)list.get(2);
System.out.println("num1 = [" + num1 + "]");
System.out.println("num2 = [" + num2 + "]");
System.out.println("num3 = [" + num3 + "]");
}
}
// Output:
// obj1 = [abc]
// obj2 = [18]
// obj3 = [[D@47089e5f]
// Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
// at io.github.dunwu.javacore.generics.NoGenericsDemo.main(NoGenericsDemo.java:23)
反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。
通过反射机制,可以在运行时访问 Java 对象的属性,方法,构造方法等。
反射的主要应用场景有:
Java 中的数据类型有两类:
String
、数组)Java 语言提供了 8 种基本类型,大致分为 4 类
基本数据类型 | 分类 | 比特数 | 默认值 | 取值范围 | 说明 |
---|---|---|---|---|---|
boolean |
布尔型 | 8 位 | false |
{false, true} |
|
char |
字符型 | 16 位 | '\u0000' |
[0, $2^{16} - 1$] |
存储 Unicode 码,用单引号赋值 |
byte |
整数型 | 8 位 | 0 |
[-$2^7$, $2^7 - 1$] |
|
short |
整数型 | 16 位 | 0 |
[-$2^{15}$, $2^{15} - 1$] |
|
int |
整数型 | 32 位 | 0 |
[-$2^{31}$, $2^{31} - 1$] |
|
long |
整数型 | 64 位 | 0L |
[-$2^{63}$, $2^{63} - 1$] |
赋值时一般在数字后加上 l 或 L |
float |
浮点型 | 32 位 | +0.0F |
[$2^{-149}$, $2^{128} - 1$] |
赋值时必须在数字后加上 f 或 F |
double |
浮点型 | 64 位 | +0.0D |
[$2^{-1074}$, $2^{1024} - 1$] |
赋值时一般在数字后加 d 或 D |
方法(有的人喜欢叫函数)是一段可重用的代码段。
方法定义语法格式:
[修饰符] 返回值类型 方法名([参数类型 参数名]){
...
方法体
...
return 返回值;
}
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。几乎所有程序设计语言都支持数组。
数组代表一系列对象或者基本数据类型,所有相同的类型都封装到一起,采用一个统一的标识符名称。
数组的定义和使用需要通过方括号 []
。
Java 中,数组是一种引用类型。
Java 中,数组是用来存储固定大小的同类型元素。