Main类
JVM运行Java应用程序的时候,首先会调用main方法 ,调用时不实例化这个类的对象,而是通过类名直接调用
因此需要是限制为 public static
main()方法定义:public static void main(String[] 字符串数组参数名)
jvm有限制,不能有返回值,因此返回值类型为void
1 | public class Main { |
Object类
Object类在java.lang包中,所有Java类都直接或间接扩展Object类,所有Java类都是Object类的子类Object类是所有类的超类。Object类本身没有超类 ,Object类的引用变量可以保存任何类的对象的引用;
Object类方法
| 方法 | 描述 |
|---|---|
public String toString() |
我们可以自定义它, 它返回对象的字符串表示形式 通常它用于调试目的 如果类中未重写该方法,则输出:”类名@十六进制的hashcode值”,若重写,则输出表述该对象信息的字符串 |
System.out.println(xx) |
括号里面的“xx”对象如果不是String类型的话,就自动调用xx的toString()方法 |
public boolean equals(Object obj) |
默认是比较对象的内存地址,但是个别的类重写了该方法,如String类 |
public int hashCode() |
它返回对象的哈希码(整数)值, 根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值 |
protected void finalize() throws Throwable |
不是在Object类中实现 它在对象被销毁之前被垃圾收集器调用 |
public final Class getClass() |
返回对象的Class对象的引用即可以返回对象的父类等相关信息 |
1 | public class ObjectTest { |
运行结果:
1 | 类名:java.lang.String |
String StringBuffer StringBuilder类
String 类一旦创建将不会改变 ,与String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
StringBuffer用法和StringBuilder一样,不过,StringBuffer是线程安全的 ;StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder类
String类方法
char charAt(int index):取字符串中的某一个字符,其中的参数index指的是字符串中序数,字符串的序数从0开始到length()-1;int compareTo(String anotherString):当前String对象与另一个String比较 相等关系返回0;不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差 ,另一种情况,较长字符串的前面部分恰巧是较短的字符串,返回它们的长度差 。
1 | public static void main(String[] args) { |
运行结果
1 | hello world |
Scanner类
Scanner类包括文件输入和字符输入两种格式;
注意:Scanner类只能返回String类的对象 不能返回StringBuffer类的对象,要想调用StringBuffer方法必须将String类型转化成StringBuffer类型
Scanner类方法
hasNexthasNextLine作为判断判否还有下一行输入- next
nextLine返回输入源中的下一行字符串
1 | public static void main(String[] args) throws FileNotFoundException { |
nextInt() nextLine() next() 方法分析
next()
1 | import java.util.Scanner; |
next() 从开始接收到遇到空格结束接收–> 空格 换行符跳出结束

并且next()从第一个非空格字符开始接收

nextLine()
1 | public static void main(String[] args) { |
nextLine() 可以接收空格 遇到 回车换行符结束接收并退出

同时nextLine() 可以从空格开始接收 ,所以其只是遇到换行结束并退出。

nextInt()
1 | public static void main(String[] args) { |
nextInt()并不会自动判断规避字符而选择性的读取整型数据
但是仅当数字前有空格时nextInt() 并不会报错—> nextInt() 从第一个非空格数字读取 一直到非数字字符结束遇到回车换行才跳出结束。

当有多个接收对象时候
1 | public static void main(String[] args) { |
只有当所有的接收对象的值都接收到才退出程序 –> 否则始终等键盘输入
当所有对象接收完毕后 —> 回车换行才退出结束

当nextInt() nextLine()同时存在时
1 | public static void main(String[] args) { |
通过下图我们发现,当我们刚输入完两个数字还没来得及输入字符串程序就已经退出了–> 这是为什么呢??
下面的输入可以描述为
1 | 5\n2\n |
我们一共需要接收三个变量 分别是 a b s,我们所有的输入首先会存入缓冲池中,当输入5时,变量a的nextInt() 判断是整型数字–> 开始接收遇到 \n 结束,然后变量 b 的nextInt() 判断2是数字开始读取 直到读取到空格或者是字符即结束读入 ,此时遇到的是 \n 所以结束读入,当变量s开始读入的时候nextLine() 判断 当前的字符为 \n所以 结束读取 ,读取内容为null,并退出程序。
那我们会好奇那第一个 \n跑哪里去了呢??
因为当第一个变量a读取完后,变量b是整型变量,它并不关心当前是否有\n –> 我只想拿到整型数据就走人\n与空格 都会被自定越过,但是当我没有先接收数字而是字符等等 那我就要报错了…
那么nextInt() 与 nextLine() 到底能否同时使用呢?
答案是肯定的 –> 当然要在同一行输入 –> 避免在字符串还没接收的情况下就先遇到 \n
注意下图中的love 其前面是有空格的,也就是说当数字变量a,b接收完毕后,字符串变量会判断从第一个字符开始接收(包括空格);
当nextInt() next()同时存在时
1 | public static void main(String[] args) { |
与nextLine()不同的是 next() 会等待输入,因为其并不是遇到\n就结束,而是遇到空格结束读取,遇到\n退出程序
同时其读取依旧是从非空格开始读取—> 当我们同时需要接收整型和字符串变量时我们优先考虑 nextInt() + next()的组合。
System类
System类中包括类有 3 个静态成员变量 ->分别是 PrintStream out、InputStream in 和 PrintStream err
System类方法
arrayCopy():数组复制,即从指定源数组中复制一个数组currentTimeMillis():返回当前的计算机时间identityHashCode(Object x):返回指定对象的精确hashCode值
identityHashCode(Object x)与hashCode()两种方法的区别
Object的hashCode()默认是返回内存地址的,但是hashCode()可以重写,所以hashCode()不能代表内存地址的不同 System.identityHashCode(Object x)方法可以返回对象的内存地址,不管该对象的类是否重写了hashCode()方法,该方法返回指定对象的精确hashCode值,也就是根据该对象的地址计算得到的hashCode值,可以唯一地标识一个对象,判断两个对象是否是指向同一地址,应该用System.identityHashCode(Object x)方法进行判断
1 | public static void main(String[] args) { |
运行结果
1 | 输出原数组: |
Math类
提供了两个静态变量:PI和E,值分别为:π和e
包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数等
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用
1 | public static void main(String[] args) { |
Random类
Random类专门用于生成一个随机数 ,它有两个构造器,一个是使用默认的种子(以当前时间为种子),另一个是显式传入一个long整型的种子
使用相同的种子可以产生相同的随机数,为了避免产生相同的随机数常推荐使用当前时间作为 Random对象的种子 Random rand = new Random (System.currentTimeMills());
相比于Math的random()方法,Random类提供了更多的方式来生成各种伪随机数 ,既可以生成浮点类型的伪随机数,也可以生成整数类型的伪随机数,还可以指定生成随机数的范围 ,ThreadLocalRandom类是Random的增强版 ,在并发访问的环境下,使用ThreadLocalRandom来代替Random可以减少多线程资源竞争,保证线程安全,它提供了一个静态方法current( )方法来获取对象,然后调用各种nextXxx( )方法来获取各种基本类型的随机数
1 | public static void main(String[] args) { |
运行结果
1 | true |
Runtime类
Runtime类描述Java程序的运行时环境 ,每个Java程序都有一个与之对应的Runtime实例 ,该类会被自动创建,我们可以通过Runtime.getRuntime() 方法来获取当前程序的Runtime实例,应用程序通过该对象与其运行的环境相连接 可以访问JVM的相关信息,如处理器数量、内存信息等
Runtime类方法
- public static Runtime getRuntime(): 此方法返回与当前Java应用程序关联的实例或Runtime对象。
- public long freeMemory():此方法返回JVM(Java虚拟机)中的可用内存量
- public long totalMemory():此方法返回JVM(Java虚拟机)中的总内存量
- public long maxMemory():此方法返回Java虚拟机将尝试使用的最大内存量
- public Process exec(String command)抛出IOException:此方法在单独的进程中执行给定的命令
- public void gc():此方法运行垃圾收集器。调用此方法表明Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用
1 | public static void main(String[] args) throws IOException { |
运行结果
1 | jvm中可用的内存数:130560456 |
Date类
Data类共有两种构造器分别是无参和有参数的构造器
- Date() 生成一个代表当前日期时间的对象
- Date(long date) 根据指定的long型整数来生成一个Date对象
Date类方法
- boolean after(Date date):判断当前日期是否在date之后
- boolean before(Date date):判断当前日期是否在date之前
- long getTime():返回该时间对应的long型整数,即从1970年1月1日00:00:00到当前对象之间的时间差
- int compareTo(Date date) :比较当调用此方法的Date对象和指定日期->两者相等时候返回0,调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数
1 | public static void main(String[] args) { |
运行结果
1 | Sat Jul 31 15:50:36 CST 2021 |
Calendar类
Calendar类是一个抽象类,因此不能用构造器来创建对象,必须通过静态方法getInstance( )方法来获取Calendar对象 Calendar类可以直接对date的年份,月份或者日期进行更改
roll以及add的区别
- add方法的月份增加年份会进行递增
- roll方法月份的增加只会自身进行循环1
1 | public static void main(String[] args) { |
运行结果
1 | Sat Jul 31 15:53:13 CST 2021 |
BigDecimal类
float和double类型的主要设计目标是为了科学计算和工程计算 ,因在于我们的计算机是二进制的 浮点数没有办法是用二进制进行精确表示 商业计算往往要求结果精确,这时候BigDecimal就派上大用场 。
BigDecimal类的常用构造方法
- public BigDecimal(double val): 将double表示形式转换为BigDecimal 不建议使用
- public BigDecimal(int val):将int表示形式转换成BigDecimal
- public BigDecimal(String val):将String表示形式转换成BigDecimal
注意:参数类型为double的构造方法的结果有一定的不可预知性 String 构造方法是完全可预知的 所以BigDecimal类最好使用String类的构造器
BigDecimal类的常用方法
- public BigDecimal add(BigDecimal value): 加法
- public BigDecimal subtract(BigDecimal value): 减法
- public BigDecimal multiply(BigDecimal value): 乘法
- public BigDecimal divide(BigDecimal value): 除法
1 | public static void main(String[] args) { |
运行结果
1 | 0.01 |
正则表达式
正则表达式定义了字符串的模式,相当于构建了一个java字符串的自定义模板
java.util.regex 包主要包括以下两个类:
- Pattern 类: pattern 对象是一个正则表达式的编译表示 ,Pattern 类没有公共构造方法 要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数
- Matcher 类:Matcher 对象是对输入字符串进行解释和匹配操作的引擎与Pattern 类一样,Matcher 也没有公共构造方法需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象
Matcher 类的方法
- public int start() :返回以前匹配的初始索引
- public int end() :返回最后匹配字符之后的偏移量
- public boolean find():尝试查找与该模式匹配的输入序列的下一个子序列
1 | public static void main(String[] args) { |
运行结果
1 | 17824852705 |