Java基础知识点汇总

Java基础知识点汇总

该文章适合 Java 新手或者小白,需要掌握的知识点,是 Java 基础的汇总,在这里详细介绍了 Java 基础各个部分的知识点,如 Java 的基本数据类型、面向 对象的三大特性和面向对象的属性,方法,代码块,内部类,构造器等知识点。仔细地学习和掌握这篇文章,保证关于 Java 基础部分的面试和学习轻松过关。

Java 概述

什么是程序

程序:计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合

Java 重要特点

Java 语言是面向对象的Java 语言是健壮的。Java 的强类型机制、异常处理、垃圾的自动收集等,是 Java 程序健壮性的重要保证。Java 语言是跨平台性的,即一个编译好的.class 文件可以在多个系统下运行,这种特性称为跨平台Java 语言是解释性的

Java 核心机制 - Java 虚拟机 JVM

JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,包含在 JDK 中对于不同的平台,有不同的虚拟机Java 虚拟机机制屏蔽了底层运行平台的差别,实现了"一次编译,到处运行"。

什么是 JDK,JRE

JRE=JVM+Java SE 标准类库

JDK=JRE+开发工具集(例如 Javac.java 编译工具等)

Java 转义字符

\t :一个制表位,实现对齐功能

\n :换行符

\\ :一个\

" :一个"

\' :一个'

\r :一个回车

Java 中的注释类型

单行注释:// something多行注释:/ _something _/文档注释:/** _something _/

DOS 命令

cd,dir,tree,md,rd,cls,copy,del,echo,move,type(这些都是常用的)

路径

相对路径:从当前目录开始定位,形成的一个路径

和绝对路径:从顶级目录 d,开始定位,形成的路径

变量

变量概念

变量相当于内存中一个数据存储空间的表示,你可以把变量看做一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量。

变量使用注意事项

变量表示内存中的一个存储区域。不同的变量,类型不同,占用的空间大小不同。该区域有自己的名称(变量名)和类型(数据类型)变量必须先声明,再使用该区域的数据可以在同一类型范围内不断变化变量在同一作用域内不能重名变量=变量名+值+数据类型

数据类型

基本数据类型

数值型(基本数据类型)

整数类型,存放整数 byte[1],short[2],int[4],long[8]

浮点(小数)类型 float[4],double[8]

字符型 char[2],存放字符

布尔型 boolean[1 bit] 存放 true,false

引用数据类型

类 class

接口 interface

数组[ ]

基本数据类型转换

自动类型转换(数据类型按 精度/容量 大小顺序自动转换)

char-->int-->long-->float-->double

byte-->short-->int-->long-->float-->double

强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符,但可能造成精度降低或溢出,要格外注意。

细节说明:

当数据要从大的数据类型转换到小的,就需要强制转换强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级char 类型可以保存 int 的常量值,但不能保存 int 的变量值,需要强转byte 和 short,char 类型 在进行运算时,当做 int 类型处理。

基本数据类型和 String 类型的转换

基本类型转 String 类型:将基本类型的值+"",String a=(int)b+"";String 类型转基本数据类型通过基本类型的包装类调用相应的方法,int a=Integer.parseInt((String)b);{类似的 Double.parseDouble(), Float.parseFloat(), Short.parseShort() Long.parseLong(), Boolean. parseBoolean(), Byte.parseByte()}

字符编码表

ASCll,Unicode,utf-8,gbk,gb2312,big5 码

标识符

标识符的命名规则和规范

Java 对各种变量,方法和类德国命名时使用的字符序列称为标识符,凡是自己可以起名字的地方都叫标识符。命名规则必须遵守,命名规范看起来更加专业。

命名规则

由 26 个英文字母,0~9,$ 组成;数字不可以开头;不可以使用关键字和保留字,但能包含关键字和保留字;Java 中严格区分大小写,长度无限制;标识符不能包含空格。

命名规范

包名:对单词组成时所有字母都小写,xxxyyyzzz;类名、接口名:多单词组成时,所有单词的首字母大写,XxxYyyZxx;变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写,xxxYyyZzz;变量名:所有字母都大写,多单词时每个单词用下划线连接:XXX_YYY_ZZZ

关键字

定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串,关键字中所有字母都为小写举些列子:

用于定义数据类型的关键字

class, interface, enum, byte, short, int, long, float, double, char, boolean, void

用于定义数据类型的关键字

true, false, null

用于定义流程控制的关键字

if, else, switch, case, default, while, do, for, break, continue, return

保留字

Java 保留字,现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字,如 byValue, cast, future, generic, inner, operator, outer, rest, var, goto, const

键盘输入语句

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java 需要一个扫描器,就是 Scanner。System.in 是标准输入,指的是位置(键盘)。

进制

对于整数由四种表示方式:二进制(以 0b / 0B 开头),八进制(以 0 开头),十进制,十六进制(以 0x/0X 开头)

二进制

现代的计算机技术全部采用的是二进制,因为它只使用 0、1 两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制数用 0 和 1 两个数字及其组合来表示任何数。禁止规则是"逢 2 进 1",数字 1 在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

原码、反码、补码(重点,难点) 对于有符号的而言:

二进制的最高位是符号位,0 表示正数,1 表示负数;正数的原码,反码,补码都一样;负数的反码=它的原码符号位不变,其它位取反;负数的补码=它的反码+1,负数的反码=负数的补码-1;0 的反码,补码都是 0java 没有无符号数,换而言之,java 中的数都是有符号的。在计算机运算的时候,都是以补码的方式来运算的当我们看运算结果的时候,要看他的原码(重点)

运算符

运算符介绍

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等

算术运算符

算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多 +,-,*,/,%,++,--

关系运算符(比较运算符)

关系运算符的结果都是 boolean 型,true/false关系表达式 经常在 if 结构的条件中或循环结构的条件中==,!=,<,>,<=,>=,instanceof

逻辑运算符

用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值&& || ,短路与,短路或,当判断第一个条件成立时,第二个条件不会执行。& | , 逻辑与,逻辑或,当判断第一个条件成立时,第二个条件也会判断。!(非,取反),^(逻辑异或)

赋值运算符

赋值运算符就是将某个运算后的值,赋给指定的变量=,+=,-=,*=,/=,%=

三元运算符

条件表达式 ?表达式 1 :表达式 2;运算规则:

如果条件表达式为 true,运算后的结果是表达式 1;如果条件表达式为 false,运算后的结果是表达式 2.

运算符优先级

运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。

位运算符

'&' :按位与'|' :按位或'^' :按位异或'~' :按位取反'>>' :算数右移,低位溢出,符号位不变,并用符号位补溢出的高位'<<' :算数左移,符号位不变,低位补 0'>>>' :逻辑右移,也叫无符号右移,低位溢出,高位补 0

程序控制结构

在程序中,程序运行的流程控制决定程序是如何执行的?主要有三大流程控制语句,顺序控制,分支控制,循环控制

顺序控制

程序从上到下逐行地执行,中间没有任何判断和跳转。

分支控制

if,if-else,if-elseif-elseif-else ;

switch 分支,switch(表达式){ case 值: break; default: print();}

循环控制

for 循环, while 循环,do..while 循环

跳出控制语句

break,continue,return

数组

数组可 以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。

数组的使用

动态初始化:

int[]a =new int[100];int[] a; a=new[50];

静态初始化:

int[] a={1,2,3,4,5};

注意事项和细节

1.数组是多个相同类型数据的组合,实现对这些数据的统一管理2.数组中的元素可以是任何数据类型,包括基本类型和引用类型。但是不能混用,跟集合不一样。3.数组创建后,如果没有赋值,有默认值。int-0, short-0, byte-0, long-0, float-0, dobule-0.0, char-\u0000, boolean-false, String-null4.使用数组的步骤:声明数组并开辟空间,给数组各个元素赋值,使用数组5.数组的下标是从 0 开始的6.数组下标必须在指定范围内使用,否则会出现下标越界异常等。

二维数组的使用

动态初始化:

int[][] a =new int[50][100]

静态初始化:

int[][] a={{1,2},{1,2,4},{1,2,3}};

面向对象基础

类和对象

类是抽象的,概念的,代表一类事物,即它是数据类型。对象是具体的,实际的,代表一个具体事物,是实例。类是对象的模板,对象是类的一个个体,对应一个实例。类是对象的概括或者抽象,对象是类的实例化。

属性(字段,成员变量)

属性的声明: [修饰符] 数据类型 变量名 [= 初始值];注意事项和细节

1.属性和局部变量可以重名,访问时遵循就近原则2.在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名3.属性生命周期较长,局部变量生命周期较短4.作用域范围不同

全局变量/属性:可以被本类使用,或其他类使用5.修饰符不同

全局变量/属性可以加修饰符

局部变量不可以加修饰符

成员方法

[修饰符] 返回值类型 方法名([数据类型 参数名,……]){}

方法重载

Java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致注意事项和使用细节

方法名:必须相同

形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)

返回类型:无要求

可变参数

Java 允许同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。

类似 public void sell(String.... str){}

注意事项和细节

1.可变参数的实参可以为 0 个或任意多个2.可变参数的实参可以为数组3.可变参数的本质就是数组4.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后5.一个形参列表中出现一个可变参数

作用域

在 Java 编程中,主要的变量就是属性和局部变量我们说的局部变量一般是指在成员方法中定义的变量Java 中作用域的分类

全局变量:也就是属性,作用域为整个类体局部变量:也就是除了属性之外的其他变量,作用域为定义它的代码块中

全局变量可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值。

构造器

一个类可以定义多个不同的构造器,即构造器重载构造器没和类名要相同构造器美哟返回值构造器是完成对象的初始化,并不是创建对象在创建对象时,系统自动的调用该类的构造方法如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显式的定义一下。

this 关键字

哪个对象调用,this 就代表哪个对象

注意事项和使用细节

this 关键字可以用来访问本类的属性、方法、构造器this 用于区分当前类的属性和局部变量访问成员方法的语法:this.方法名(参数列表)访问构造器语法:this(参数列表),注意只能在构造器中使用 (即只能在构造器中访问另外一个构造器,必须放在第一条语句)this 不能再类定义的外部使用,只能在类定义的方法中使用。

面向对象中级

本质就是创建不同的文件夹/目录来保存类文件,package 关键字(表示打包),com.olderhard(表示包名)

包的三大作用

区分相同名字的类当类很多时,可以很好的管理类控制访问范围

访问修饰符

Java 提供四种访问控制修饰符号,用于控制方法和属性的访问权限

公开级别:public 修饰,对外公开受保护级别:protected 修饰,对子类和同一个包中的类公开默认级别:没有修饰符号,向同一个包的类公开私有级别:private 修饰,只有类本身可以访问,不对外公开。

面向对象三大特征(封装,继承和多态)

封装

封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(方法),才能对数据进行操作。

封装的实现步骤(3 步)

将属性进行私有化 private提供一个公共的(public)set 方法,用于对属性判断并赋值提供一个公共的(public)get 方法,用于获取属性的值

继承

继承可以解决代码复用,当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来声明继承父类即可。子类继承父类,子类继承父类的属性和方法,子类同时可以加一些自己特有的属性和方法。

注意事项和细节

子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问子类没有继承父类的构造器,但必须调用父类的构造器,完成父类的初始化当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化。super 在使用时,必须放在构造器第一行,super 和 this 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器Java 所有类都是 Object 类的子类,Object 是所有类的基类父类构造器的调用不限于直接父类,将一直往上追溯直到 Object 类子类最多只能继承一个父类,在 Java 中是单继承机制不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系

super 关键字

super 代表父类的引用,用于访问父类的属性、方法、构造器

基本语法

访问父类的属性,但不能访问父类的 private 属性访问父类的方法,不能访问父类的 private 方法访问父类的构造器:super(参数列表)

方法的重写

方法重写(覆盖)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法。注意事项和使用细节

子类的方法的形参列表,方法名称,要和父类方法的形参列表,方法名称完全一样子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类子类方法不能缩小父类方法的访问权限

多态

方法或对象具有多种形态,多态是建立在封装和继承基础之上的。

多态的具体体现

1.方法的多态:重写和重载就体现多态2.对象的多态:

(1).一个对象的编译类型和运行类型可以不一致(2).编译类型在定义对象时,就确定了,不能改变,(3).运行类型时可以变化的。

注意事项和细节

多态的前提是,两个对象(类)存在继承关系多态的向上转型

本质:父类的引用指向了子类的对象语法:父类类型 引用名= new 子类类型();特点:可以调用父类中的所有成员,不能调用子类中特有成员,最终运行效果看子类的具体实现(动态绑定机制)

多态的向下转型 1.语法:子类类型 引用名 = (子类类型) 父类引用 2.只能强转父类的引用,不能强转父类的对象 3.要求父类的引用必须指向的是当前目标类型的对象。 4.当向下转型后,可以调用子类类型中所有的成员。 5.属性没有重写之说,属性的值看编译类型

java 的动态绑定机制 1.当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定 2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用。多态的应用

多态数组:数组的定义类型为父类类型,里面保存的实际元素类型为子类类型多态参数:方法定义的形参类型为父类类型,实参类型允许为子类类型

Object 类详解 (Object 中的方法)

equals(Object a) :只能判断引用类型。与==不同,==基本数据类型判值,引用类型判地址。finalize() : 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。getClass()hashCode() : 返回该对象的哈希码值。toString() : 返回该对象的字符串表示。

面向对象高级

类变量和类方法(static 所修饰的)

一个类的静态变量会被该类的所有对象所共享。当一个方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。在程序员实际开发,往往将一些通用的方法,设计成静态方法,这样我们不需要创建对象就可以使用了。静态变量可以应用于普通方法和静态方法,普通变量只能应用于普通方法,不能应用于静态方法。同义,静态方法只能调用静态属性,普通方法可调用所有属性。

main 主方法 (形式:public void main(String[] args){})

JVM 虚拟机调用 main 方法Java 虚拟机需要调用类的 main()方法,所以该方法的访问权限必须是 publicJava 虚拟机在执行 main()方法时,不必创建对象,所以该方法必须是 static该方法接收 String 类型的数组参数,该数组中保存执行 Java 命令时,传递所运行的类的参数(形似:java 运行程序名 参数 1 参数 2 参数 3)

代码块

代码块又称为初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显示调用,而是加载类时,或创建对象时隐式调用。理解:

代码块相当于对构造器的补充机制,可以做初始化的操纵。例如,当多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重要性。

单例模式

所谓类的单例设计模式,就是采用一定的方法保证整个的软件系统中,对某个类只能存在一个对象实例,并且该类值提供一个取得其对象实例的方法单例模式有两种方式:饿汉式,懒汉式

饿汉式和懒汉式的实现步骤

构造器私有化类的内部创建对象向外暴露一个静态的公共方法

final 关键字

final 可以修饰类、属性、方法和局部变量当不希望类被继承时,可以用 final 修饰当不希望父类的某个方法没子类重写时,可以用 final 修饰当不希望类的某个属性的值被修改时,可以用 final 修饰当不希望某个局部变量被修改,可以使用 final 修饰

抽象类

父类方法的不确定性导致的,当父类的某些方法,需要声明,但是又不确定如何实现时,科技将其声明为抽象方法,那么这个类就是抽象类(abstract)。抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。

接口

在 Java 中接口不仅仅是程序开发过程中“约定”,更是更加抽象化的抽象类,对抽象类的进一步抽象,给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。

注意事项和细节

接口不能被实例化,没有 new AI();抽象类实现接口,可以不用实现接口的方法,但是一个普通类实现接口,必须将该接口的所有方法都实现。

浅显地说,这个接口是将一些没有实现的方法封装到一起,当一些不同的类要实现这些方法的时候,可以提供一个接口,让这些不同的类来实现。这样当调用这些类的方法的时候,会统一的调用,大大降低了一种情况——功能方法相同时,名字不同。接口中的属性都是 public static final 的,当然定义的时候可以不用这么写,但一定要有值,访问接口属性方式:接口名.属性名一个类可以同时实现多个接口。接口和接口之间存在继承关系,接口可以继承多个别的接口

继承的价值主要在于:解决代码的复用性和可维护性

接口的价值主要在于:设计,设计好各种规范(方法),让其他类去实现这些方法。浅显地说,想使用一个接口,要写一个类,实现该接口,并创建该类的对象。当然还可以使用匿名类的方式,调用该接口,不过到时候得重新实现每个方法,还只能用一次。接口的多态特性

类似继承的多态,接口是编译类型,实现接口方法的类是运行类型,如多态参数,多态数组。接口的多态的传递现象,interface A{}, interface B extends A{},实现了 B 接口的类,也实现了 A 接口。

内部类

一个类的内部又完整的嵌套了另一个类结构。内部类的最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系。如果定义在局部位置(方法内部/代码块内部)有两种:局部内部类,匿名内部类

如果定义在成员位置(类似属性和方法的位置)有两种:成员内部类,静态内部类

局部内部类【相当于局部变量】:

定义在 局部位置(方法或代码块) 中且有类名,正常类作用:可以直接访问外部类的所用成员,包含私有的,例如 外部类名.this.属性。外部类要访问内部类,需要在该方法中创建内部类的对象,再调用它的方法。

匿名内部类(简化开发):

本质是类,内部类,该类没有名字,同时还是一个对象,定义在 局部位置(方法或代码块) 中。当你想使用一个类和接口时,并且只使用一次,就可以类似的操作,IA 是一个接口,IA a =new IA(){ 实现接口方法;};系统会创建一个匿名的类 类似就是 class XXXX implements IA{实现接口方法};,创建实例 ,a 再指向这个实例,结束。接口是创建一个类;类是创建一个子类,其中的方法可以重写。匿名内部类跟局部内部类一样,在它的方法中可以访问外部类的所有东西匿名内部类应用:【可以当做一个实参直接传递】(例如在使用接口的时候,就不用那么麻烦地使用,虽然只能用一次)

成员内部类

定义在外部类的成员位置,类的属性和方法的位置,不是局部变量,是外部类的一个成员成员内部类访问-->外部类的东西:直接访问;外部类访问-->成员内部类的东西:创建对象,再访问;外部其他类访问-->成员内部类的东西,创建对象,再访问;

静态内部类

定义在外部类的成员位置,并且有 static 修饰静态内部类可以访问外部类的所有静态成员,但不能直接访问非静态成员。静态内部类访问-->外部类 :可直接访问它的所有静态成员外部类访问-->静态内部类:创建对象,再访问;外部其他类访问-->静态内部类;

常用类

一、包装类

针对八种基本数据类型,相应的引用类型——包装类

boolean—Boolean;char—Character;byte—Byte;short—Short;int—Integer;long—Long;float—Float;double—Double;包装类与基本数据类型相互转换,直接转,底层已经帮助实现;包装类与 String 互相转换

Integer.toString ,StringvalueOf(Integer),Interger+"";Interger.valueOf(String),Integer.parseInt(String),new Integer(String);

二、String 类

String 是 final 类型的!!!,所以它改,肯定是新的。String 可以串行化,属性有 final char[] value,String 是 final 类String 的常用方法

equals,equalslgnoreCase,length,indexOf,lastIndexOf,substring(l,r),trim,charAt(i),toUpperCase,toLowerCase,concat,replace,split,compareTo,toCharArray,format;char[] c=s.toCharArray();String p=s.substring(s.begin(),s.end());String p=String.format("%s %d",name,age);

三、StringBuffer 类

StringBuffer 代表可变字符序列,可以对字符串内容进行增删,很多方法与 String 相同,但 StringBuffer 是可变长度的,StringBuffer 是一个容器。StringBuffer 的对象可以串行化,父类中属性有 char[] value,StringBuffer 是 final 类,已同步,线程安全;

四、StringBuilder 类

几乎跟 StringBuffer 相同,不过是未同步,效率最高;String vs StringBuffer vs StringBuilder的选择

如果字符串存在大量的修改操作,一般使用 StringBuffer 或 StringBuilder如果字符串存在大量的修改操作,并在单线程的情况下,使用 StringBuffer如果字符串存在大量的修改操作,并在多线程的情况下,使用 StringBuider如果我们字符串很少修改,被多个对象引用,使用 String,比如配置信息等

五、Math 类

Math 的方法都是静态的方法,可以直接使用,不用创建对象随机数: int ans=(int)(a+Math.random()*(b-a+1)); //范围[a,b]向上取整,向下取整:ceil,floor;

六、Arrays 类

Arrays 里面包含一系列静态方法,用于管理或操作数组,比如排序和搜索 (使用的对象是类,也可以是自定义的类),copyOf()、fill()、equals、asList

Arrays.toString(a);Arrays.sort()Integer[] a={0,2,3,54,6};System.out.println(Arrays.toString(a));Integer[] b=Arrays.copyOf(a,a.length);Arrays.fill(a,1);Arrays.sort(books, new Comparator() { //自定义比较方法,特重要!@Overridepublic int compare(Book o1, Book o2) {return 1;}});

七、System 类

跟系统相关的类System.exit(0)System.currentTimeMillis() //返回当前时间距离 1970-1-1 00:00 的毫秒数

八、BigInterger 和 BigDecimal 类

BigInteger 适合保存比较大的整型;BigDecimal 适合保存精度更高的浮点型(小数)不过对于这两个类的数,不能直接进行运算,得调用这两个类的方法哦!

九、日期类

Date 类:精确到毫秒,代表特定的瞬间,第一代

这里的 Date 是指的是在 java.util 包下的 Date

Date date=new Date();System.out.println(date); //系统当前时间,默认输出格式:Tue Jul 30 11:34:54 CST 2024

创建 SimpleDateForma 对象,可以指定相应格式(特定的)

SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");System.out.println(s.format(date)); //输出:2024年07月30日 11:43:27 周二Date d=s.parse(s.format(date)); //也能将规范的格式,转回来

Calendar 类:日历,第二代

抽象类,构造器是 private,通过 getInstance()获取实例对象,提供大量的方法和字段

Calendar calendar = Calendar.getInstance();System.out.println(calendar.get(Calendar.YEAR)); //返回字段信息

第三代 (补充 Date 和 Calendar 的不足)

LocalDate(日期) ,LocalTime(时间) ,LocalDateTime(日期时间);

LocalDate b= LocalDate.now();LocalTime c= LocalTime.now();LocalDateTime a =LocalDateTime.now();DateTimeFormatter d=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");System.out.println(d.format(a)); //格式化LocalDateTime 时间

Instant(时间戳,类似 Date)

Instant i =Instant.now();