在java开发中,熟练掌握jdk内置的基础类是高效编码的关键。本章将系统讲解java的核心基础类,包括object类、基本数据类型包装类、字符串处理、随机数生成以及日期时间操作等内容,并通过丰富的代码示例帮助大家快速上手。
使用java语言开发应用程序都需要使用java jdk。
jdk中除了包含java编译器、java文档工具、java监视工具外,还包括非常重要的内容,这就是java定义的程序类,也就是java根据应用的需要已经事先定义了的一组java程序类。据不完全统计,jdk中定义了大约8000多个程序类。在这一章对java的基础程序类进行介绍。在后续章节中,还会介绍java其他常用类。当然,熟悉java jdk中的程序类的最有效方法时看jdk文档,在浏览器中搜索“java 17 doc”即可。
一、java基本类
java.lang包是jdk最重要的核心包,其中包含了java语言运行所需的基本类,例如我们熟悉的string、math等。
1.1 object类——万类之祖
object 类是java的根类,所有类都直接或间接继承自它。如果一个类在定义时没有显式指定父类,则默认继承 object。
方法名 | 功能 |
|---|---|
| 判断两个对象是否相等 |
| 将对象转换为可显示的字符串。默认输出:类名@内存地址 |
| 返回对象的哈希码(一个int整数) |
java代码演示:
package org.example;
public class main {
public static void main(string[] args) {
object obj1 = new object();
system.out.println(obj1.hashcode()); // 1324119927
system.out.println(obj1.tostring()); // java.lang.object@4eec7777
object obj2 = new object();
system.out.println(obj2.hashcode()); // 990368553
system.out.println(obj1.equals(obj2)); // false
}
}1.2 基本数据类型的包装类
java为每种基本类型都提供了对应的包装类,便于在面向对象环境中进行操作。
int→integerlong→longdouble→doublefloat→floatchar→characterboolean→boolean、
java代码演示:
package org.example;
public class main {
public static void main(string[] args) {
integer i1 = integer.valueof("12345");
integer i2 = 100; // 自动装箱
system.out.println("i1=" + i1 + ", i2=" + i2);//i1=12345, i2=100
system.out.println(integer.max(123, 234)); // 234
system.out.println(integer.max_value); // 2147483647
system.out.println(integer.min_value); // -2147483648
system.out.println(integer.bytes); // 4
}
}1.3 大数据类:biginteger与bigdecimal
当基本类型无法满足超大数值或高精度计算时,可以使用 biginteger(任意大整数)和 bigdecimal(任意精度实数)。
java代码演示
package org.example;
import java.math.bigdecimal;
import java.math.roundingmode;
public class main {
public static void main(string[] args) {
bigdecimal bd1 = new bigdecimal("2345631345674545656456.9734648348349539");
bigdecimal bd2 = new bigdecimal("5674545656456.1233834834987689032539");
bigdecimal sum = bd1.add(bd2);
bigdecimal div = bd1.divide(bd2, 10, roundingmode.ceiling);
system.out.println(sum); // 2345631351349091312913.0968483183337228032539
system.out.println(div); // 413360203.2095452758
}
}1.4 system类
system 类封装了系统相关的资源,如标准输入输出、系统时间等。
java代码演示:
package org.example;
import java.util.scanner;
public class main {
public static void main(string[] args) {
system.out.println("hello world!");
scanner sc = new scanner(system.in);
system.out.print("输入一个名字: ");
string name = sc.nextline();
system.out.print("输入一个整数: ");
int number = sc.nextint();
system.out.println(number);
system.out.println(name);
// 返回1970年1月1日至今的毫秒数
system.out.println(system.currenttimemillis());
// 终止jvm,返回状态码100
system.exit(100);
}
}输出结果:

1.5 math类
math 类提供了丰富的数学运算静态方法,如三角函数、平方根、绝对值等。
java代码演示:
package org.example;
public class main {
public static void main(string[] args) {
system.out.println(math.sin(20)); // 0.9129452507276277
system.out.println(math.cos(20)); // 0.40808206181339196
system.out.println(math.sin(20)*math.sin(20) + math.cos(20)*math.cos(20)); // 1.0
system.out.println(math.sqrt(20)); // 4.47213595499958
system.out.println(math.abs(-20)); // 20
}
}二、字符串类
2.1 string类——不可变字符串
string 对象一旦创建,其内容不可更改。常用创建方式:
java代码演示:
string s1 = "hello, world"; // 字面量方式
string s2 = new string("hello, world"); // 构造器方式string常用方法
方法名 | 功能 |
|---|---|
| 返回字符或子串首次出现的索引(从0开始) |
| 返回字符或子串最后一次出现的索引 |
| 返回字符串长度 |
| 判断是否为空串 |
| 转小写 |
| 按正则表达式拆分字符串 |
| 截取子串 |
| 去除首尾空格 |
| 忽略大小写比较 |
java代码演示:
package org.example;
public class main {
public static void main(string[] args) {
string s1 = "hello, world";
string s2 = new string("hello, world");
system.out.println(s1.equalsignorecase(s2)); // true
system.out.println(s1.charat(1)); // e
system.out.println(s1.substring(1, 5)); // ello
system.out.println(s1); // hello, world
system.out.println("------------------");
string s3 = "one,two,three,four";
string[] ss = s3.split(",");
for (string s : ss) {
system.out.println(s);
}
// one
// two
// three
// four
}
}2.2 stringbuffer类——可变字符串
与 string 不同,stringbuffer 对象的内容可以动态修改,适合频繁拼接字符串的场景。
方法名 | 功能 |
|---|---|
| 追加字符串或数据 |
| 在指定位置插入 |
| 删除指定位置字符 |
| 删除子串 |
| 替换子串 |
| 反转字符串 |
| 转为string对象 |
java代码演示:
package org.example;
public class main {
public static void main(string[] args) {
stringbuffer sb = new stringbuffer("hello, world");
sb.append(".你好,中国");
system.out.println(sb.tostring()); // hello, world.你好,中国
sb.replace(1, 2, "iii");
system.out.println(sb.tostring()); // hiiillo,world.你好,中国
}
}三、随机数生成类
3.1 random类——经典随机数生成器
random 类可以生成 int、long、float、double 以及 boolean 类型的随机数。
java代码演示:
package org.example;
import java.util.random;
public class main {
public static void main(string[] args) {
random random = new random(system.currenttimemillis());
system.out.println(random.nextint(100)); // 0~99
system.out.println(random.nextint()); // 0 ~ integer.max_value
system.out.println(random.nextfloat(100)); // 0.0 ~ 100.0
system.out.println(random.nextfloat()); // 0.0 ~ 1.0
system.out.println(random.nextboolean()); // true/false
}
}3.2 randomgenerator接口——更优质的随机数
java 17+ 引入了 randomgenerator 接口,支持多种高性能随机算法,如 l128x1024mixrandom、l64x128starstarrandom、splittablerandom 等。
java代码演示:
package org.example;
import java.util.random.randomgenerator;
public class main {
public static void main(string[] args) {
randomgenerator rg1 = randomgenerator.of("l128x1024mixrandom");
system.out.println(rg1.nextint()); // 全范围整数
system.out.println(rg1.nextint(20)); // 0~19
system.out.println(rg1.nextint(40, 50)); // 40~49
randomgenerator rg2 = randomgenerator.of("l64x128starstarrandom");
system.out.println(rg2.nextfloat()); // 0.0~1.0
system.out.println(rg2.nextfloat(20)); // 0.0~20.0
system.out.println(rg2.nextfloat(40, 50)); // 40.0~50.0
randomgenerator rg3 = randomgenerator.of("splittablerandom");
system.out.println(rg3.nextdouble()); // 0.0~1.0
system.out.println(rg3.nextdouble(20)); // 0.0~20.0
system.out.println(rg3.nextdouble(40, 50)); // 40.0~50.0
system.out.println(rg3.nextboolean()); // true/false
}
}四、日期时间类
4.1 date类——基础日期时间
date 类用于表示特定的瞬间,精确到毫秒。
方法名 | 功能 |
|---|---|
| 构造当前日期时间对象 |
| 构造指定日期时间(已过时) |
| 判断是否在指定时间之后 |
| 判断是否在指定时间之前 |
| 返回自1970年1月1日以来的毫秒数 |
| 设置时间 |
4.2 calendar类——灵活日历操作
calendar 是抽象类,通过静态方法 getinstance() 获取实例,提供更丰富的日期字段操作。
java代码演示:
calendar c = calendar.getinstance(); date d = c.gettime();
方法名 | 功能 |
|---|---|
| 返回对应的date对象 |
| 获取指定字段值,如 |
| 判断是否在指定时间之后 |
| 判断是否在指定时间之前 |
| 获取毫秒数 |
| 设置时间 |
4.3 simpledateformat类——日期格式化
simpledateformat 用于日期与字符串之间的相互转换。
模式字符 | 含义 |
|---|---|
| 年 |
| 月 |
| 日 |
| 24小时制小时 |
| 分 |
| 秒 |
| 毫秒 |
java代码演示:
package org.example;
import java.text.simpledateformat;
import java.util.calendar;
import java.util.date;
public class main {
public static void main(string[] args) throws exception {
// 当前时间
date d1 = new date();
simpledateformat sdf = new simpledateformat("yyyy-mm-dd hh:mm:ss");
system.out.println(d1); // thu jan 12 09:58:50 cst 2023
system.out.println(sdf.format(d1)); // 2023-01-12 09:58:50
// 解析字符串为date
date d2 = sdf.parse("2022-12-12 09:42:08");
system.out.println(d2); // mon dec 12 09:42:08 cst 2022
system.out.println(sdf.format(d2)); // 2022-12-12 09:42:08
// 使用calendar获取各字段
calendar c = calendar.getinstance();
c.settime(d2);
system.out.println("年: " + c.get(calendar.year)); // 2022
system.out.println("月: " + c.get(calendar.month)); // 11(月份从0开始)
system.out.println("日: " + c.get(calendar.day_of_month)); // 12
}
}五、使用java基础类最佳实践
- 善用jdk文档:官方文档是最权威的学习资料,搜索“java 17 doc”即可获取。
- 优先使用新版api:如
randomgenerator替代旧版random,localdatetime系列替代date/calendar。 - 注意线程安全:
stringbuffer是线程安全的,stringbuilder性能更高但非线程安全。 - 避免频繁创建string对象:使用
stringbuilder或stringbuffer进行大量字符串拼接。
六、案例实战:猜数游戏
6.1 任务描述
生成一个1~100之间的随机整数,用户最多猜3次,每次给出“猜大了”或“猜小了”提示,猜对则胜利。
6.2 代码实现
java代码演示:
package com.ttt.basic;
import java.util.scanner;
import java.util.random.randomgenerator;
public class guesser {
private static final randomgenerator rg = randomgenerator.of("l128x1024mixrandom");
private static final scanner sc = new scanner(system.in);
private int secret;
public guesser() {
secret = rg.nextint(1, 101);
}
public boolean guess() {
int count = 0;
while (count < 3) {
system.out.print("请猜数: ");
int n = sc.nextint();
if (n == secret) {
return true;
} else if (n > secret) {
system.out.println("猜大了");
} else {
system.out.println("猜小了");
}
count++;
}
return false;
}
public static void main(string[] args) {
guesser game = new guesser();
if (game.guess()) {
system.out.println("你赢了!");
} else {
system.out.println("你输了");
}
}
}七、课后练习:计算闰年
编写程序,从键盘接收日期(格式:yyyy-mm-dd),判断该年份是否为闰年。
提示:
- 能被400整除,或能被4整除但不能被100整除的年份为闰年。
总结
本文系统介绍了java基础类库中的核心组件,包括:
- object类:所有类的基类
- 包装类:基本类型的对象化
- 大数据类:高精度与大数值计算
- 字符串类:不可变与可变字符串的选择
- 随机数生成:从random到randomgenerator的演进
- 日期时间处理:date、calendar、simpledateformat的使用
掌握这些基础类,将为后续深入学习java集合框架、io流、多线程等高级特性打下坚实基础。
到此这篇关于java基础类深度解析(最新整理)的文章就介绍到这了,更多相关java基础类内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论