Java 的API

Java 的API(API: Application(应用) Programming(程序) Interface(接口))

Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。

在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是所有Java类的源文件。可以在其中查看相对应的类的源码。

基本类型包装类

8种基本类型对应的包装类

基本数据类型对象包装类特点:用于在基本数据和字符串之间进行转换。

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

将字符串转成基本类型

parseXXX(String s);其中XXX表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生数字转换的问题 NumberFormatException

System.out.println(Integer.parseInt("123") + 2);
//打印结果为 125 其他类型同理

将基本数值转成字符串

  • 基本类型直接与””相连接即可
34+"";
  • 调用String的valueOf方法
String.valueOf(34);
  • 调用包装类中的toString方法
Integer.toString(34);

基本类型和对象转换

使用int类型与Integer对象转换进行演示,其他基本类型转换方式相同。

  • 基本数值---->包装对象
Integer i = new Integer(4);//使用构造函数函数
Integer ii = new Integer("4");//构造函数中可以传递一个数字字符
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
Integer iiii = Integer.valueOf("4");//使用包装类中的valueOf方法
  • 包装对象---->基本数值
int num = i.intValue();

自动装箱拆箱

在需要的情况下,基本类型与包装类型可以通用。有些时候我们必须使用引用数据类型时,可以传入基本数据类型。

基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的转换。

相对应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了基本数据类型向对象的转换。

  • 自动拆箱:对象转成基本数值
  • 自动装箱:基本数值转成对象
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; 加法运算完成后,再次装箱,把基本数值转成对象。
  • 自动装箱(byte常量池)细节的演示

当数值在byte范围之内时,进行自动装箱,不会新创建对象空间而是使用医来已有的空间。

Integer a = new Integer(3);
Integer b = new Integer(3);
System.out.println(a==b);//false
System.out.println(a.equals(b));//true
System.out.println("---------------------");
Integer x = 127;
Integer y = 127;
//在jdk1.5自动装箱时,如果数值在byte范围之内,不会新创建对象空间而是使用原来已有的空间。
System.out.println(x==y); //true
System.out.println(x.equals(y)); //true

System类

在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作。

System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。在JDK中,有许多这样的类。

Modifier and Type Method and Description
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将指定源数组中的数组从指定位置复制到目标数组的指定位置。
static String clearProperty(String key)
删除指定键指定的系统属性。
static Console console()
返回与当前Java虚拟机关联的唯一的Console对象(如果有)。
static long currentTimeMillis()
返回当前时间(以毫秒为单位)。
static void exit(int status)
终止当前运行的Java虚拟机。
static void gc()
运行垃圾回收器。
static Map getenv()
返回当前系统环境的不可修改的字符串映射视图。
static String getenv(String name)
获取指定环境变量的值。
static Properties getProperties()
确定当前的系统属性。
static String getProperty(String key)
获取指定键指示的系统属性。
static String getProperty(String key, String def)
获取指定键指示的系统属性。
static SecurityManager getSecurityManager()
获取系统安全界面。
static int identityHashCode(Object x)
返回与默认方法hashCode()返回的给定对象相同的哈希码,无论给定对象的类是否覆盖了hashCode()。
static Channel inheritedChannel()
返回从创建此Java虚拟机的实体继承的通道。
static String lineSeparator()
返回与系统相关的行分隔符字符串。
static void load(String filename)
加载由filename参数指定的本机库。
static void loadLibrary(String libname)
加载 libname参数指定的本机库。
static String mapLibraryName(String libname)
将库名称映射到表示本地库的平台特定字符串。
static long nanoTime()
以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
static void runFinalization()
运行任何对象等待定稿的最终化方法。
static void runFinalizersOnExit(boolean value)
已弃用
这种方法本质上是不安全的。 它可能导致在活动对象上调用finalizer,而其他线程同时操作这些对象,导致不稳定的行为或死锁。
static void setErr(PrintStream err)
重新分配“标准”错误输出流。
static void setIn(InputStream in)
重新分配“标准”输入流。
static void setOut(PrintStream out)
重新分配“标准”输出流。
static void setProperties(Properties props)
将系统属性设置为 Properties参数。
static String setProperty(String key, String value)
设置由指定键指示的系统属性。
static void setSecurityManager(SecurityManager s)
设置系统安全性。

currentTimeMillis()方法

获取当前系统时间与1970年01月01日00:00点之间的毫秒差值

exit()方法

用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态

gc()方法

用来运行JVM中的垃圾回收器,完成内存中垃圾的清除

getProperty()方法

用来获取指定键(字符串名称)中所记录的系统属性信息

20190617150316.jpg

arraycopy()方法

用来实现将源数组部分元素复制到目标数组的指定位置

Math类

Math 类是包含用于执行基本数学运算的方法的数学工具类,如初等指数、对数、平方根和三角函数。

类似这样的工具类,其所有方法均为静态方法,并且一般不会创建对象。如System类

什么是工具类 :能够完成一系列功能的类,在使用它们时,不用创建对象,该类中方法为静态方法

abs()方法

结果都为正数

double d1 = Math.abs(-5); // d1的值为5
double d2 = Math.abs(5); // d2的值为5

ceil()方法

结果为比参数值大的最小整数的double值

double d1 = Math.ceil(3.3); //d1的值为 4.0
double d2 = Math.ceil(-3.3); //d2的值为 -3.0
double d3 = Math.ceil(5.1); // d3的值为 6.0

floor()方法

结果为比参数值小的最大整数的double值

double d1 = Math.floor(3.3); //d1的值为3.0
double d2 = Math.floor(-3.3); //d2的值为-4.0
double d3 = Math.floor(5.1); //d3的值为 5.0

max()方法

返回两个参数值中较大的值

double d1 = Math.max(3.3, 5.5); //d1的值为5.5
double d2 = Math.max(-3.3, -5.5); //d2的值为-3.3

min()方法

返回两个参数值中较小的值

double d1 = Math.min(3.3, 5.5); //d1的值为3.3
double d2 = Math.max(-3.3, -5.5); //d2的值为-5.5

pow()方法

返回第一个参数的第二个参数次幂的值

double d1 = Math.pow(2.0, 3.0); //d1的值为 8.0
double d2 = Math.pow(3.0, 3.0); //d2的值为27.0

round()方法

返回参数值四舍五入的结果

double d1 = Math.round(5.5); //d1的值为6.0
double d2 = Math.round(5.4); //d2的值为5.0

random()方法

产生一个大于等于0.0且小于1.0的double小数

double d1 = Math.random();