包装类

概述

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. 哦,Vendor

    vendor踩坑笔记: 接过公司里面X平台golang部分的后端后,需要新添加一个业务功能,美滋滋~ 拿过项目一顿写之后后遇到事了. 报错的描述如下: 报错的大意说:方法的入参类型不匹配,我们不能把 ...

  2. tensorflow2.0学习笔记第二章第一节

    2.1预备知识 # 条件判断tf.where(条件语句,真返回A,假返回B) import tensorflow as tf a = tf.constant([1,2,3,1,1]) b = tf.c ...

  3. 对学长TD课程通(.apk)的评价

    界面简介: 界面分为三个部分,第一部分是对课程表的添加,第二部分是对空闲教室的查询,第三部分是实时时间的展示和对软件的评价,实用性很强,仅限于本校学生,界面观赏性较差,从界面上对人的吸引力不够, 实用 ...

  4. 存储系列之 DAS、SAN、NAS三种常见架构概述

    随着主机.磁盘.网络等技术的发展,对于承载大量数据存储的服务器来说,服务器内置存储空间,或者说内置磁盘往往不足以满足存储需要.因此,在内置存储之外,服务器需要采用外置存储的方式扩展存储空间,今天在这里 ...

  5. Java——String类(常用类)

    一.String类——描述字符串 常用的方法简单介绍: 1.charAt() 获取对应位置的字符 2.length() 获取字符串的长度 3.concat() 在字符串的尾部追加内容-----相当于连 ...

  6. TensorFlow从0到1之常量、变量和占位符详解(6)

    最基本的 TensorFlow 提供了一个库来定义和执行对张量的各种数学运算.张量,可理解为一个 n 维矩阵,所有类型的数据,包括标量.矢量和矩阵等都是特殊类型的张量.   TensorFlow 支持 ...

  7. 拒绝降权!教你用 Python 确保制作的短视频独一无二

    1. 场景 前段时间有人私信我,说自己辛辛苦苦剪辑的短视频,上传到某平台后,由于播放量太大,收到 降权 的通知,直接导致这个账号废掉了! 其实,各大视频平台都有自己的一套鉴别算法,针对视频的二次创作, ...

  8. 使用torch实现RNN

    (本文对https://blog.csdn.net/out_of_memory_error/article/details/81456501的结果进行了复现.) 在实验室的项目遇到了困难,弄不明白LS ...

  9. 在IntelliJ IDEA中注释使用的说明

    /** * @author 标明该类模块的开发作者 * @version 标明该类模块的版本 * @see 参开转向,也就是相关的主题 * @param 对方法中的某些参数进行说明 * @return ...

  10. 手写简易版Promise

    实现一个简易版 Promise 在完成符合 Promise/A+ 规范的代码之前,我们可以先来实现一个简易版 Promise,因为在面试中,如果你能实现出一个简易版的 Promise 基本可以过关了. ...