Java -- 浅谈API几个常用的类

野性酷女 2023-07-25 12:35 100阅读 0赞

Java有一个API手册,建议先看1.6或者1.8版本的,虽然有很多已经过时了,但是相对来说比较稳定,更有利于新手的学习和日常操作的使用,不建议一味地追求新版本,稳定最重要!
在一个城市站稳脚跟

API:Application Programming Interface应用编程接口,一切可以调用的东西都是API。
java.lang包,这个包会自动导入。
java.lang.Object
java.lang.String
java.lang.StringBuilder/StringBuffer
正则表达式
包装类等

一些简单的用法作用都融合在代码里面进行讲解

一、Object

1、概念
  • 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
2、常用方法
  • toString()返回该对象的字符串表示;
  • hashCode()返回该对象的哈希码值;
  • equals(Object obj)指示其他某个对象是否与此对象“相等”。
3、测试
  1. package cn.tedu.api;
  2. //这个类用来测试 Object工具类
  3. //总结:
  4. //1、toString():默认使用的是Object里的,也就是打印地址值,如果你要查看属性值,需要重写toString()
  5. //2、hashCode():获取对象在内存中的哈希码值
  6. //3、equals():如果比较的是对象的地址值,直接使用默认的object提供的就可以,如果要比较的是属性值就需要重写
  7. public class Test_Object {
  8. public static void main(String[] args) {
  9. //1、给属性设置值,两种方式:调用set() + 创建对象时利用构造方法
  10. Student s = new Student("daniel",18,"山东",130);// -- 触发含参构造
  11. //2、想要查看属性的值
  12. System.out.println(s.getAddr()+s.getAge()+s.getName()+s.getScore());//山东18daniel130.0
  13. //3、能不能简化,查看属性的值 -- 在打印对象时,底层会自动调用toString()
  14. //默认使用的是Object父类提供的,就相当于直接打印对象在内存中的地址值
  15. //重写toString前:cn.tedu.api.Student@380fb434
  16. //重写toString后:Student [name=daniel, age=18, addr=山东, score=130.0]
  17. System.out.println(s);
  18. System.out.println(s.hashCode());//5、返回对象在内存中的哈希码值 -- 编号940553268
  19. System.out.println("运算对象的地址值是:"+Integer.toHexString(940553268));//模拟对象的地址值的获取
  20. //equals():比较两个对象是否相等?
  21. Student s2 = new Student("daniel",18,"山东",130);
  22. //默认使用了Object提供的equals(),使用==比较
  23. // ==比较引用类型变量时,比较的是地址值
  24. // ==比较基本类型变量时,比较的是值本身
  25. //重写equals()前:false,因为比较的是地址值
  26. System.out.println(s.equals(s2));
  27. }
  28. }
  29. //创建学生类
  30. class Student extends Object{
  31. //构造方法
  32. public Student() { }
  33. //含参构造,右键 source --> 倒数第三个
  34. public Student(String name, int age, String addr, double score) {
  35. super();
  36. this.name = name;
  37. this.age = age;
  38. this.addr = addr;
  39. this.score = score;
  40. }
  41. // 封装 属性
  42. private String name;
  43. private int age;
  44. private String addr;
  45. private double score;
  46. //提供全局访问点,get获取,set设置
  47. public String getName() {
  48. return name;
  49. }
  50. public void setName(String name) {
  51. //当变量名相同时,通过this调用成员变量
  52. this.name = name;
  53. }
  54. public int getAge() {
  55. return age;
  56. }
  57. public void setAge(int age) {
  58. this.age = age;
  59. }
  60. public String getAddr() {
  61. return addr;
  62. }
  63. public void setAddr(String addr) {
  64. this.addr = addr;
  65. }
  66. public double getScore() {
  67. return score;
  68. }
  69. public void setScore(double score) {
  70. this.score = score;
  71. }
  72. /* * 重写tostring(): * -- 由于目前student类中没有提供toString(),如果打印对象时, * 就会找object里的toString()采用默认实现方式,来实现对象的地址值 * 解决方案: * -- 不能改Object里的toString() -- 我们只能重写toString() */
  73. @Override
  74. public String toString() {
  75. return "Student [name=" + name + ", age=" + age + ", addr=" + addr + ", score=" + score + "]";
  76. }
  77. //7、重写equals()方法,因为默认使用Object的equals()方法就是比较两个对象的地址值
  78. //比较两个对象间的属性值,就算是new两次,但是两次的属性一模一样,必须认为两个对象是同一个人,让equals()返回true
  79. // @Override
  80. // public boolean equals(Object obj) {
  81. // //要求参数obj必须是学生类型
  82. // Student s = (Student) obj;//向下转型
  83. //
  84. // //如果两个对象所有属性值相同,返回true
  85. // if (this.name == s.name && this.addr == s.addr && this.age == s.age && this.score == s.score) {
  86. // return true;
  87. // }
  88. // return false;
  89. // }
  90. //自动生成的重写的equals();方法
  91. @Override
  92. public boolean equals(Object obj) {
  93. if (this == obj)
  94. return true;
  95. if (obj == null)
  96. return false;
  97. if (getClass() != obj.getClass())
  98. return false;
  99. Student other = (Student) obj;//向下转型
  100. if (addr == null) {
  101. if (other.addr != null)
  102. return false;
  103. } else if (!addr.equals(other.addr))
  104. return false;
  105. if (age != other.age)
  106. return false;
  107. if (name == null) {
  108. if (other.name != null)
  109. return false;
  110. } else if (!name.equals(other.name))
  111. return false;
  112. if (Double.doubleToLongBits(score) != Double.doubleToLongBits(other.score))
  113. return false;
  114. return true;
  115. }
  116. }

二、String

1、特点

String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String 对象是不可变的,所以可以共享。

2、创建String对象
  1. String s = "abc";
  2. String(char[] value)
  3. String(byte[] bytes)
3、常用方法
  • char charAt(int index)
    返回指定索引处的 char 值。
  • String concat(String str)
    将指定字符串连接到此字符串的结尾。
  • boolean endsWith(String suffix)
    测试此字符串是否以指定的后缀结束。
  • boolean equals(Object anObject)
    将此字符串与指定的对象比较。
  • byte[] getBytes()
    使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
  • int hashCode()
    返回此字符串的哈希码。
  • int indexOf(String str)
    返回指定子字符串在此字符串中第一次出现处的索引。
  • int lastIndexOf(String str)
    返回指定子字符串在此字符串中最右边出现处的索引。
  • int length()
    返回此字符串的长度。
  • String replace(char oldChar, char newChar)
    返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
  • String[] split(String regex)
    根据给定正则表达式的匹配拆分此字符串
  • boolean startsWith(String prefix)
    测试此字符串是否以指定的前缀开始。
  • String substring(int beginIndex)
    返回一个新的字符串,它是此字符串的一个子字符串。
  • String substring(int beginIndex, int endIndex)
    返回一个新字符串,它是此字符串的一个子字符串。
  • String toLowerCase()
    使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
  • String toUpperCase()
    使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
  • String trim()
    返回字符串的副本,忽略前导空白和尾部空白。
  • static String valueOf(long l)
    返回 long 参数的字符串表示形式。
4、测试案例
  1. package cn.tedu.String;
  2. import java.util.Arrays;
  3. //这个类用来测试String工具类
  4. //String 是一个最终类,不能被继承
  5. //String 底层维护了一个char[],一旦被创建,长度不能修改
  6. public class Test_String {
  7. public static void main(String[] args) {
  8. //1、创建字符串对象
  9. char[] chars = { 'a','b','c'};
  10. String str = new String(chars);//自动匹配char[]构造
  11. byte[] bytes = { 97,98,99,100};
  12. String str2 = new String(bytes);//自动匹配byte[]构造
  13. String str3 = "abc";
  14. //2、调用常见功能
  15. System.out.println(str.charAt(2));//c,获取指定下标对应的字符
  16. System.out.println(str.concat(" + concat拼接字符串"));//相当于拼接字符串
  17. //判断是否以指定元素结尾
  18. System.out.println(str.endsWith("a"));//false
  19. System.out.println(str.endsWith("c"));//true
  20. System.out.println(str=="abc");//false,==比较的是引用类型的变量,比较地址值
  21. System.out.println(str.equals("abc"));//true,判断是否与指定数据相等,String已经重写了equals()可以比较属性值
  22. System.out.println(str.getBytes());//[B@380fb434,用来把数据存入byte数组
  23. System.out.println(str.hashCode());//96354,获取对象在内存中的哈希码值
  24. System.out.println(str.indexOf("a"));//0,返回指定数据在字符串中第一次出现的下标
  25. str = "abcdea";//思考:我们真的把str的值改掉了吗??
  26. //-- 原来的值不会改变,看起来的重新赋值动作在底层会创建新的字符串
  27. System.out.println(str.lastIndexOf("a"));//获取指定数据在字符串中最后一次出现的下标
  28. System.out.println(str.length());//
  29. System.out.println(str.replace('a', 'x'));//把字符串中出现的所有a字符,替换成x字符
  30. str = "a0bdcc0gh";
  31. System.out.println(Arrays.toString(str.split("0")));//按照指定数据切割字符串
  32. System.out.println(str.startsWith("a"));//判断是否以指定数据开始
  33. System.out.println(str.substring(1));//从指定下标处开始,向后截取所欲字符串[1,n]
  34. System.out.println(str.substring(0, 2));//从指定下标处开始,到指定处结束,但是含头不含尾[a,b)
  35. str = "aBcDeF";
  36. System.out.println(str.toLowerCase());//将字符串中的所有元素变成小写
  37. System.out.println(str.toUpperCase());//将字符串中的所有元素变成大写
  38. str = " aBcD eF ";
  39. System.out.println(str.trim());//去除前导和后导的空格,不管中间的
  40. System.out.println(String.valueOf(9.9)+1);//把其他类型转成String类型
  41. //+1是为了验证9.9是不是字符串类型
  42. }
  43. }

三、StringBuffer/StringBuilder

1、特点
  1. 封装了char[]数组;
  2. 是可变的字符序列;
  3. 提供了一组可以对字符内容修改的方法;
  4. 常用append()来代替字符串做字符串连接;
  5. 内部字符数组默认初始容量是16:initial capacity of 16 characters;
  6. 如果大于16会尝试将扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。int newCapacity = value.length * 2 + 2;
  7. StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全
2、构造方法
  • StringBuilder()
    构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
3、常用方法
  • StringBuilder append(String str)
    将指定的字符串追加到此字符序列。
4、测试案例
  1. package cn.tedu.String;
  2. //这个类用来测试字符串优化效率
  3. /* * 总结: * 1、因为+拼接字符串效率低,因为字符串是常量,不能改,每次拼接时都会产生新的字符串对象 * 2、现在用工具类拼接字符串对象 */
  4. public class Test_StringBufferOrBuilder {
  5. public static void main(String[] args) {
  6. method2();
  7. method();//先用“+”拼接字符串
  8. }
  9. public static void method() {
  10. //1、定义字符串
  11. String str = "字符串";
  12. //2、拼接1000次并输出
  13. //定义变量,记录拼接结果
  14. String result = "";
  15. long start = System.currentTimeMillis();//计时开始ms
  16. for (int i = 0; i < 1000; i++) {
  17. result = result + str;
  18. }
  19. long end = System.currentTimeMillis();//计时结束
  20. System.out.println(end - start);//4
  21. }
  22. public static void method2() {
  23. String str = "字符串";
  24. //1、创建工具类对象、
  25. StringBuilder sb = new StringBuilder();
  26. long start = System.currentTimeMillis();//计时开始ms
  27. for (int i = 0; i < 10000; i++) {
  28. sb.append(str);//用工具类拼接
  29. }
  30. long end = System.currentTimeMillis();//计时结束
  31. System.out.println(end - start);//for循环执行时间--0
  32. }
  33. }

StringBuilder和StringBuffer的区别:
1、 在线程安全上,
–StringBuffer是旧版本就提供的,线程安全的。@since JDK1.0
–StringBuilder是jdk1.5后产生,线程不安全的。@since 1.5
2、 在执行效率上,StringBuilder > StringBuffer > String
3、 源码体现:本质上都是在调用父类抽象类AbstractStringBuilder来干活,只不过Buffer把代码加了>同步关键字,使得程序可以保证线程安全问题。
abstract class AbstractStringBuilder implements Appendable, CharSequence {}
在这里插入图片描述
在这里插入图片描述

四、包装类

1、概念

为了丰富基本类型的功能,提供了对应的包装类型;

  • 与基本类型的对应关系









































基本类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

简单介绍两个的用法,其余的都一样

(一)Integer

Integer ——包装了基本类型的int

1、创建对象
  • Integer(int value)
    构造一个新分配的 Integer 对象,它表示指定的 int 值。
  • static Integer valueOf(int i)
    返回一个表示指定的 int 值的 Integer 实例。
2、常用方法
  • int intValue()
    以 int 类型返回该 Integer 的值。
  • static int parseInt(String s)
    将字符串参数作为有符号的十进制整数进行解析。
3、测试案例

测试案例内部涉及【自动装箱】和【自动拆箱】的功能

  1. package cn.tedu.api;
  2. //这个类用来测试包装类
  3. public class Test_Integer {
  4. public static void main(String[] args) {
  5. //包装类和基本类型可以相互转换
  6. //基本类型转包装类:valueOf() 或者构造方法 -- 目的是使用包装类型身上的功能 -- 自动装箱
  7. //包装类转基本类型:intValue() -- 拿到包装类包着的值做运算 -- 自动拆箱
  8. //1、创建Integer对象
  9. //就是拿到基本类型 的参数 5 ,经过包装,,形成了包装类型的对象
  10. Integer in = new Integer(5);
  11. Integer in2 = Integer.valueOf(5);
  12. //静态方法valueOf()高效(-128~127范围内),超出范围就不高效了
  13. //如果要保存相同数据,只是第一次没存时会存一次,以后要存相同的数据时就不会再存储了。
  14. Integer in3 = Integer.valueOf(5);
  15. System.out.println(in2);
  16. System.out.println(in3);
  17. System.out.println(in2 == in3);//true
  18. Integer in4 = Integer.valueOf(500);
  19. Integer in5 = Integer.valueOf(500);
  20. System.out.println(in4 == in5);//false
  21. //2、调用常用方法
  22. int value = in.intValue();
  23. int sum = in.parseInt("100");//把字符串类型的数字转换成基本类型
  24. System.out.println(sum + 1);//101
  25. //TODO double -- Double
  26. //自动装箱:把基本类型double变成包装类型,Double --valueOf()
  27. // Double d1 = new Double(9.9);
  28. Double d = Double.valueOf(9.9);
  29. //自动拆箱:把包装类型转换成基本类型 --doubleValue()
  30. double d4 = d.doubleValue();
  31. double d3 = d.parseDouble("8.8");//把字符串类型的数字,转换成基本类型
  32. }
  33. }

自动装箱和自动拆箱:

1、自动装箱:把基本类型包装成一包装类的对象
Integer a = 5;//a是引用类型,引用了包装对象的地址。
编译器会完成对象的自动装箱:Integer a = Integer.valueOf(5);

2、自动拆箱:从包装对象中,自动取出基本类型值
int i = a;//a现在是包装类型,没法给变量赋值,需要把5取出来。
编译器会完成自动拆箱:int i = a.intValue();

五、日期类

1、概述
  • 存在于java.util.Date包;
  • 用来封装一个毫秒值表示一个精确的时间点;
  • 从1970-1-1 0点开始的毫秒值。
2、创建对象
  • Date()
    分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒);
  • new Date():封装的是系统当前时间的毫秒值
  • new Date(900000000000L):封装指定的时间点
3、常用方法
  • int getDate()
    已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代;
  • int getDay()
    已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代;
  • int getHours()
    已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代;
  • int getMinutes()
    已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代;
  • int getMonth()
    已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代;
  • int getSeconds()
    已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代;
  • long getTime()
    返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数;

虽然这些方法都已经过时,但是不影响我们的正常使用,他只是被某些新的方法替代了而已。

4、测试案例
  1. package cn.tedu.api;
  2. //这个类用来测试包装类
  3. public class Test_Integer {
  4. public static void main(String[] args) {
  5. //包装类和基本类型可以相互转换
  6. //基本类型转包装类:valueOf() 或者构造方法 -- 目的是使用包装类型身上的功能 -- 自动装箱
  7. //包装类转基本类型:intValue() -- 拿到包装类包着的值做运算 -- 自动拆箱
  8. //1、创建Integer对象
  9. //就是拿到基本类型 的参数 5 ,经过包装,,形成了包装类型的对象
  10. Integer in = new Integer(5);
  11. Integer in2 = Integer.valueOf(5);
  12. //静态方法valueOf()高效(-128~127范围内),超出范围就不高效了
  13. //如果要保存相同数据,只是第一次没存时会存一次,以后要存相同的数据时就不会再存储了。
  14. Integer in3 = Integer.valueOf(5);
  15. System.out.println(in2);
  16. System.out.println(in3);
  17. System.out.println(in2 == in3);//true
  18. Integer in4 = Integer.valueOf(500);
  19. Integer in5 = Integer.valueOf(500);
  20. System.out.println(in4 == in5);//false
  21. //2、调用常用方法
  22. int value = in.intValue();
  23. int sum = in.parseInt("100");//把字符串类型的数字转换成基本类型
  24. System.out.println(sum + 1);//101
  25. //TODO double -- Double
  26. //自动装箱:把基本类型double变成包装类型,Double --valueOf()
  27. // Double d1 = new Double(9.9);
  28. Double d = Double.valueOf(9.9);
  29. //自动拆箱:把包装类型转换成基本类型 --doubleValue()
  30. double d4 = d.doubleValue();
  31. double d3 = d.parseDouble("8.8");//把字符串类型的数字,转换成基本类型
  32. }
  33. }

六、日期工具——SimpleDateFormat

1、概述

日期格式化工具,可以把Date对象格式化成字符串,也可以日期字符串解析成Date对象;

2、创建对象
  • SimpleDateFormat(String pattern)
    用给定的模式和默认语言环境的日期格式符号构造

    new SimpleDateFormat(格式)
    格式:yyyy-MM-dd HH:mm:ss
    MM/dd/yyyy..

在这里插入图片描述
以下示例显示如何在美国地区中解释日期和时间模式。 给定的日期和时间是2001-07-04 12:08:56当地时间在美国太平洋时间时区。
在这里插入图片描述

3、常见方法
  • Date parse(String text)
    解析字符串的文本,生成 Date。
  • String format(Date date)
    将Date类型的日期,转成 字符串类型
4、练习:计算自己的生存天数

接收用户输入的出生日期,计算存活天数

  1. package cn.tedu.api;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import java.util.Scanner;
  6. //这个类用来测试日期格式化工具:计算存活天数
  7. public class Test_SimpleDateFormat {
  8. public static void main(String[] args) throws ParseException {
  9. //1、输入出生日期 -- String
  10. //nextLine():接收用户输入的一整行数据
  11. String birthday = new Scanner(System.in).nextLine();
  12. //2、把String类型的日期转成Date类型
  13. //参数中需要指定日期的格式 :y-年,M-月,d-天
  14. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  15. Date birth = sdf.parse(birthday);
  16. //3、做个时间差
  17. long bir = birth.getTime();//获取到出生日期对应的毫秒值
  18. long now = System.currentTimeMillis();//获取现在的毫秒值
  19. System.out.println((now - bir)/1000/60/60/24);
  20. }
  21. }

七、BigDecimal/BigInteger

1、概念
  • BigDecimal用来解决java中浮点数运算不精确的现象
  • BigInteger用来解决java中大整数的运算

以BigDecimal为例

1、概念

用来解决java中浮点数运算不精确的现象

2、创建对象
  • BigDecimal(double val)
    将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式。
  • BigDecimal(String val)
    将 BigDecimal 的字符串表示形式转换为 BigDecimal。
3、常用方法
  • add(BigDecimal bd): 做加法运算
  • subtract(BigDecimal bd) : 做减法运算
  • multiply(BigDecimal bd) : 做乘法运算
  • divide(BigDecimal bd) : 做除法运算(比较特殊,注意与其他方法的区别)
  • divide(BigDecimal bd,保留位数,舍入方式):除不尽时使用
  • setScale(保留位数,舍入方式):同上
  • pow(int n):求数据的几次幂
4、测试案例

接收用户输入的两个数字,做运算。

  1. package cn.tedu.api;
  2. import java.math.BigDecimal;
  3. import java.util.Scanner;
  4. public class Test_BigDecimal {
  5. public static void main(String[] args) {
  6. // method();//暴露不精确的现象
  7. method2();//解决方案
  8. }
  9. public static void method2() {
  10. double a = new Scanner(System.in).nextDouble();
  11. double b = new Scanner(System.in).nextDouble();
  12. //1、把a和b变成BigDecimal类型
  13. //!!!构造方法不建议使用double参数的(还是不精确),我们建议使用String参数的构造方法
  14. BigDecimal bd = new BigDecimal(a+"");//加上一个空字符串使其转换成字符串类型
  15. BigDecimal bd2 = new BigDecimal(b+"");
  16. BigDecimal bd3,bd4,bd5,bd6;
  17. bd3 = bd.add(bd2);//加法运算
  18. bd4 = bd.subtract(bd2);//减法运算
  19. bd5 = bd.multiply(bd2);//乘法运算
  20. // bd6 = bd.divide(bd2);//除法运算,
  21. //除法报错,如果除法运算不精确就会报异常,BigDecimal.divide(BigDecimal) line: not available
  22. //divide(m,n,o);m是要做除法运算的对象名,n是要保留几位小数,o是舍入方式(四舍五入)
  23. BigDecimal bd7 = bd.divide(bd2,3,BigDecimal.ROUND_HALF_UP);
  24. System.out.println(bd3);
  25. System.out.println(bd4);
  26. System.out.println(bd5);
  27. // System.out.println(bd6);
  28. System.out.println(bd7);
  29. }
  30. public static void method() {
  31. //1、接收用户输入的两个整数
  32. double a = new Scanner(System.in).nextDouble();
  33. double b = new Scanner(System.in).nextDouble();
  34. //2、做+-*/运算
  35. System.out.println(a+b);//不精确
  36. System.out.println(a-b);//不精确
  37. System.out.println(a*b);//不精确
  38. System.out.println(a/b);//不精确
  39. }
  40. }

【温馨提示】
API里面的内容很多,方法也很多,需要自己抽出时间去测试每个方法的使用,并且记忆;单靠这几个常用的是不能保证自己的工作效率的,当然你也可以选择使用的时候去api里面查,现学现卖!!

在这里插入图片描述

【下篇预告】

  • IO流
  • IO工具类们~~~

发表评论

表情:
评论列表 (有 0 条评论,100人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVAPair抽象

    1.业务场景 业务开发中会遇到一种情况,返回两个参数值,这两个参数值都有用到,所以我们一般都会用map集合进行key-value封装,或者写一个类来封装两个属性来返回,还有

    相关 Java -- API常用

    Java有一个API手册,建议先看1.6或者1.8版本的,虽然有很多已经过时了,但是相对来说比较稳定,更有利于新手的学习和日常操作的使用,不建议一味地追求新版本,稳定最重要!

    相关 Java种随机数

    摘要:众所周知,随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相同的:产生一个0到1之间的随机数。看似简单,但有时我们也会忽略了一些有趣的功能。 众所周