包装类

概述

Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率。

然而很多情况,会创建对象使用,因为对象可以做更多的功能。

如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类。如下:

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

装箱与拆箱

基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:

  • 装箱:基本类型 --> 对应的包装类对象。

  • 拆箱:包装类对象 --> 对应的基本类型。

用Integer与 int为例:(看懂代码即可)

基本数值---->包装对象

Integer i = new Integer(4);//使用构造函数函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法

包装对象---->基本数值

int num = i.intValue();

自动装箱与自动拆箱

由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,

基本类型与包装类的装箱、拆箱动作可以自动完成。例如:

package com;

/**
* 自动装箱和拆箱:基本类型的数据和包装类之间可以自动的互相转换
*
*/
public class IntegerTest {
public static void main(String[] args) {
// 自动装箱,直接把int类型的整数赋值给包装类
Integer i = 1; //相当于 Integer i = new Integer(1); // 自动拆箱:i是包装类,无法直接参与运算,可以自动转为基本类型再进行计算
// i = i + 2 相当于 i = i.intValue() + 2
// 计算出结果后又自动装箱
i = i +2;
System.out.println(i);
}
}

基本类型与字符串之间的转换

基本类型转换为String

基本类型转换String总共有三种方式,查看课后资料可以得知,这里只讲最简单的一种方式:

  1. 直接拼接空串,遇到串之后的数据都当成字符串拼接,之前的数据正常运算。比如

    "" + 1 + 2 + 3  // 得到123
    1 + 2 + "" + 3 // 得 33
    1 + 2 + 3 + "" // 得 6
  2. 调用String的valueOf方法

    int num = 123;
    String str = String.valueOf(num);
    System.out.println(str);
  3. 转换成封装类调用toString方法

    Integer num = 6;
    String str = num.toString();
    System.out.println(str);
基本类型直接与””相连接即可;如:34 + ""

String转换成对应的基本类型

除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:

  • public static byte parseByte(String s):将字符串参数转换为对应的byte基本类型。
  • public static short parseShort(String s):将字符串参数转换为对应的short基本类型。
  • public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
  • public static long parseLong(String s):将字符串参数转换为对应的long基本类型。
  • public static float parseFloat(String s):将字符串参数转换为对应的float基本类型。
  • public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。
  • public static boolean parseBoolean(String s):将字符串参数转换为对应的boolean基本类型。

代码使用(仅以Integer类的静态方法parseXxx为例)如:

public class IntegerParse {
public static void main(String[] args) {
int num = Integer.parseInt("100");
}
}

注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常。

System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。它不能被实例化。

System 类中,有标准输入、标准输出和错误输出流;

对外部定义的属性和环境变量的访问;加载文件和库的方法;

还有快速复制数组的一部分的实用方法。

字段摘要

字段摘要 描述
static PrintStream err “标准”错误输出流。
static InputStream in “标准”输入流。
static PrintStream out “标准”输出流。

方法摘要

方法 描述
static long currentTimeMillis() 返回以毫秒为单位的当前时间。
static void arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
static String clearProperty(String key) 移除指定键指示的系统属性。
static Console console() 返回与当前 Java 虚拟机关联的唯一 Console 对象(如果有)。
static void exit(int status) 终止当前正在运行的 Java 虚拟机。
static void gc() 运行垃圾回收器。
static Map<String,String> 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 void load(String filename) 从作为动态库的本地文件系统中以指定的文件名加载代码文件。
static void loadLibrary(String libname) 加载由 libname 参数指定的系统库。
static String mapLibraryName(String libname) 将一个库名称映射到特定于平台的、表示本机库的字符串中。
static long nanoTime() 返回最准确的可用系统计时器的当前值,以毫微秒为单位。
static void runFinalization() 运行处于挂起终止状态的所有对象的终止方法。
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) 设置系统安全性。

在System类的API文档中,常用的方法有:

  • public static long currentTimeMillis():返回以毫秒为单位的当前时间。

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    将数组中指定的数据拷贝到另一个数组中。

currentTimeMillis方法

实际上,currentTimeMillis方法就是 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值

package com;

import java.text.SimpleDateFormat;
import java.util.Date; public class SystemTest {
public static void main(String[] args) { //获取当前时间毫秒值
long ms = System.currentTimeMillis();
System.out.println("当前时间戳:" + ms);
Date date = new Date(ms);
System.out.println("默认日期格式:" + date);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("指定日期格式:" + simpleDateFormat.format(date));
}
}

练习

验证for循环打印数字1-9999所需要使用的时间(毫秒)

public class SystemTest1 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("共耗时毫秒:" + (end - start));
}
}

arraycopy方法

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    将数组中指定的数据拷贝到另一个数组中。

数组的拷贝动作是系统级的,性能很高。System.arraycopy方法具有5个参数,含义分别为:

参数名称 参数类型 参数含义
src Object 源数组
srcPos int 源数组索引起始位置
dest Object 目标数组
destPos int 目标数组索引起始位置
length int 复制元素个数

练习

将src数组中前3个元素,复制到dest数组的前3个位置上

复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]

复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]

import java.util.Arrays;

/**
* 将src数组中前3个元素,复制到dest数组的前3个位置上
* 复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]
* 复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]
*/
public class SystemPractise {
public static void main(String[] args) {
int[] src = {1, 2, 3, 4, 5};
int[] dest = {5, 6, 7, 8, 9}; System.out.println("复制之前:");
System.out.println(Arrays.toString(src));
System.out.println(Arrays.toString(dest)); System.arraycopy(src,0,dest,0,3);
System.out.println("复制之后:");
System.out.println(Arrays.toString(src));
System.out.println(Arrays.toString(dest));
}
}

常用API - 包装类、System类的更多相关文章

  1. Java的常用API之System类简介

    Syetem类 java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有: public static long c ...

  2. java常用API之System类

    System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象.System类中的都是static方法,类 ...

  3. 01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】

    day01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 java.lang.O ...

  4. 日期类&&包装类&&System类&&Math类&&Arrays数组类&&大数据类

    day 07 日期类 Date 构造函数 Date():返还当前日期. Date(long date):返还指定日期 date:时间戳--->距离1970年1月1日 零时的毫秒数 常用方法 日期 ...

  5. Java—包装类/System类/Math类/Arrays类/大数据运算/Collection接口/Iterator迭代器

    基本类型包装类 8种基本类型对应的包装类如: 将字符串转成基本类型: 将基本数值转成字符串有3种方式: 基本类型直接与””相连接即可:34+" " 调用String的valueOf ...

  6. [Day17]常用API(System、Math、Arrays、BigInteger、BigDecimal)

    1.基本类型包装类 1.1 8种基本类型对应的包装类 字节型 byte Byte 短整型 short Short 整型 int Integer 长整型 long Long 字符型 char Chara ...

  7. 常用API - 时间日期类

    Date类 概述 java.util.Date类 表示特定的瞬间,精确到毫秒. 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期 ...

  8. Java常用API及Math类

    一.API的概述 API——Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...

  9. Java常用API、Math类介绍

    一.API的概述 API——Application Programing Interface:应用程序编程接口,是java提供的一些预定义的函数: 目的:基于API实现程序的快速编写,只需了解其作用, ...

随机推荐

  1. 浅谈js运行机制

    前言 因为js的运行机制十分重要,理解起来也十分抽象,仍还是在这里做个记录,加深自己的记忆. 总之,希望本文的内容能够对您的学习或者工作有所帮助.另,如果有任何的错误或者不足请指正! 如何理解js单线 ...

  2. 给Linux小白的CentOS8.1基本安装说明

    写在前面的话:用过Linux的同学应该都会觉得Linux安装是件非常简单的事情,根本不值得用博客记下来!但是我发现,其实没接触过Linux的同学还真不一定会装,就像在IT行业工作过几年但一直用Wind ...

  3. java Exception 处理汇总

    1.java.lang.Exception: No runnable methods 测试类,没有可以运行的方法 解决: 方法添加注释:@Test

  4. Python函数&异常处理

    1. 函数基础 1.1 参数和返回值 1.1.1 参数 位置参数.关键字参数 def my_func1(x, y, z): print(x+y+z, "计算结束") my_func ...

  5. Spark读取Hbase中的数据

    大家可能都知道很熟悉Spark的两种常见的数据读取方式(存放到RDD中):(1).调用parallelize函数直接从集合中获取数据,并存入RDD中:Java版本如下: JavaRDD<Inte ...

  6. TensorFlow从0到1之浅谈深度学习(10)

    DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感知机(Perceptron)以来 ...

  7. spark源码分析以及优化

    第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...

  8. 【01JMeter基础】测试计划

    测试计划 整个脚本的集合根目录,所有线程组集合的承载,可以添加线程组.测试片段.非测试元件.配置元件.监听器.定时器.前置/后置处理起器.断言等 一.用户自定义变量 可以使用在所有的线程组中,通过${ ...

  9. add shell 出现 error: no devices/emulators found

    解决方案: adb kill-server adb reconnect

  10. 效率思维模式与Zombie Scrum

    Scrum是由Ken Schwaber和Jeff Sutherland在20世纪90年代提出的概念,并在1995年首次正式确定.起初Scrum是为了解决产品和软件开发固有的复杂性,然而现在Scrum被 ...