Administrator
发布于 2023-01-19 / 7 阅读
0
0

Java入门(九)——常用类

Java包结构

java8在线api文档:https://www.matools.com/api/java8

java.* 是 java SE 的标准库,javax.* 是 java 标准库的扩展( x- extension)。我们主要了解下java.*下面的类包。

  • java.applet——Applet 是一种 Java 程序。它一般运行在支持 Java 的 Web 浏览器内。因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序。
  • java.awt——该包提供了用于GUI开发的窗口组件,布局管理,监听事件以及用户交互控制的一些类。
  • java.beans——包含与开发 bean相关的类 - 基于JavaBeans架构的组件。
  • java.io——该包提供和输入输出相关的类,用于不同设备对数据的输入输出处理。(重要)
  • java.lang——这是java的核心功能包,主要包括和语言相关的类,提供基本数据类型处理,基本数值函数,字符串处理,线程和异常处理等。该包由解释程序自动加载,不需要显示导入。(重要)
  • java.math——提供执行任意精度整数运算( BigInteger )和任意精度十进制运算( BigDecimal )的类。
  • java.net——提供实现网络应用程序的类。
  • java.nio——定义缓冲区,它们是数据容器,并提供其他NIO包的概述。这是Java1.4之后推出来的一套IO接口,NIO提供了一种完全不同的操作方式, NIO支持面向缓冲区的、基于通道的IO操作。
  • java.rim——提供 RMI 包。RMI 指的是远程方法调用。
  • java.security——提供安全框架的类和接口。
  • java.sql——提供使用Java编程语言访问和处理存储在数据源(通常是关系数据库)中的数据的API。
  • java.text——提供用于以独立于自然语言的方式处理文本,日期,数字和消息的类和接口。
  • java.time——日期,时间,瞬间和持续时间的主要API。
  • java.util——包含集合框架,旧集合类,事件模型,日期和时间设施,国际化和其他实用程序类(字符串tokenizer,随机数生成器和位数组)。(重要)

lang包

Object类

Object类是所有类的根基类,也就是说任何一个类在定义时候如果没有明确的继承一个父类的话,那么它就是Object类的子类。

常用方法:

1、toString

返回对象的字符串表示形式。

public String toString() {
    //getClass()-返回类对象的运行时类的Class对象  hashCode()-返回该对象的哈希码值。
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

使用System.out.println输出对象obj时,默认调用obj.toString()方法(对象不为空时)。一般建议子类重写此方法,输出有意义的字符串。

2、equals

比较两个对象的内存地址是否相等,只适用于引用数据类型。

public boolean equals(Object obj) {
    return (this == obj);
}

包装类

java是一种面向对象的语言,8种基本数据类型都设计了对应的包装类,除了int (包装类为Integer)和char(包装类为Character)外,其他数据类型的包装类型都是自己的首字母大写。

包装类的主要用途有两种:

  1. 作为基本数据类型对应的类存在,方便有关对象的操作

  2. 可以用设定每种基本数据类型的属性大小及使用方法

装箱和拆箱

装箱:基本数据类型->包装类;拆箱:包装类->基本数据类型

public class Test {
    public static void main(String[] args) {
        int x = 12345;
        Integer xz = new Integer(x);//装箱操作
        System.out.println("xz=" + xz);
        int xc = xz.intValue();//拆箱操作
        
        Integer yz = 12345;//自动装箱操作 jdk1.5之后
        int yc = yz;//自动装箱操作 jdk1.5之后
        System.out.println("yc=" + yc);
        
        System.out.println("=============");
        System.out.println(x == yc);//基本数据类型 值比较
        System.out.println(xc == yz);//基本数据类型和包装类型 值比较
        System.out.println(xz == yz);//引用数据类型 内存地址比较
        System.out.println(xz.equals(yz));//引用数据类型 值比较
    }
}

输出结果

xz=12345
yc=12345
=============
true
true
false
true

基本数据类型和字符串之间的转换

包装类->字符串:1.+拼接空字符串 2.包装类.toString方法 3.String.valueOf    字符串->包装类:包装类的parseXXX方法。(除了Character类

注意:包装类有缓存范围,对于缓存范围内的值,包装类对象会在内存中被重用,超过这个范围的话,会新建一个对象,在使用==比较包装类的时候需要注意。

String类

String类代表字符串。Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。

同时,我们可以了解下StringBuffer和StringBuilder

System类

System类包含几个有用的类字段和方法。 它不能被实例化。

System类提供的System包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 一种加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。

常用方法:

修饰符和返回类型 方法描述
static long currentTimeMillis()

返回当前时间(以毫秒为单位)。

static void exit(int status)

终止当前运行的Java虚拟机。

static Properties getProperties()

确定当前的系统属性。

static void load(String filename)

加载由filename参数指定的本机库。

还有常见的字段属性

System.in:“标准”输入流。 该流已经打开,准备提供输入数据。 通常配合Scanner类使用,提供控制台输入。

System.out:“标准”输出流。 此流已经打开并准备好接受输出数据。 通常,此流对应于显示输出或由主机环境或用户指定的另一个输出目标。

对于简单的独立Java应用程序,编写一行输出数据的典型方法是:

System.out.println(data)

Math类

Java Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。

Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

【常用值与函数】

Math.PI 记录的圆周率

Math.E 记录e的常量

Math中还有一些类似的常量,都是一些工程数学常用量。

Math.abs 求绝对值

Math.sin 正弦函数 Math.asin 反正弦函数

Math.cos 余弦函数 Math.acos 反余弦函数

Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数

Math.toDegrees 弧度转化为角度 Math.toRadians 角度转化为弧度

Math.ceil 得到不小于某数的最大整数

Math.flfloor 得到不大于某数的最大整数

Math.IEEEremainder 求余

Math.max 求两数中最大

Math.min 求两数中最小

Math.sqrt 求开方

Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常

Math.exp e的任意次方

Math.log10 10为底的对数

Math.log 自然对数

Math.rint 求距离某数最近的整数(可能比某数大,也可能比它小)

Math.round 同上,返回int型或者long型(上一个函数返回double型)

Math.random 返回01之间的一个随机数

Thread类

线程类,后续学习巩固多线程时再详细了解。

math包

BigDecimal类

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。

构造器使用

BigDecimal(double val) 将双精度浮点型转换为BigDecimal 可能丢失精度
BigDecimal(String val) 将字符串形式转换为BigDecimal(推荐)

方法使用

方法 说明
add(BigDecimal)
subtract(BigDecimal)
multiply(BigDecimal)
divide(BigDecimal ,int,RoundingMode) 除,3个参数,分别表示除数,保留小数点,小数点处理方式

小数点处理方式

我们可用 setScale单独进行小数点处理。

日期时间相关

Java中,最早对日期和时间的支持只能依赖java.util.Date类。 关于java中的时间类方法我们要掌握好Date和Calendar。而Java8日期/时间提供了LocalDate、LocalTime和LocalDateTime. 我们也要对他们的方法比较熟悉。

    Date类

    Date类在Java史中是一个历史悠久的类,使用起来有一些缺陷。例如:不方便创建指定日期时间的实例,目前除了创建默认时间和指定毫秒数之外的构造函数均已被弃用,而通过毫秒数创建时间对于开发者并不友好。Date类的toString方法返回的字符串并不符合人们的阅读习惯,总是需要借助于其他类格式化输出。不方便仅获取对象的年、月或日的值。Date类的年份是从1970年开始的,月份是从0开始的,容易理解错误。Date类是可变的,存在维护风险。

    Date 类提供两个构造函数来实例化 Date 对象。

    Date d1 = new Date();//获取当前日期时间
    
    Date d2 = new Date(long millisec);//该参数是从1970年1月1日起的毫秒数。

    常用方法

    Modifier and Type Method and Description
    boolean after(Date when)

    测试此日期是否在指定日期之后。

    boolean before(Date when)

    测试此日期是否在指定日期之前。

    long getTime()

    返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒  。

    void setTime(long time)

    设置此 Date对象以表示1970年1月1日00:00:00 GMT后的 time毫秒的时间点。

    SimpleDateFormat类

    SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。

    代码示例

    public class Test {
        public static void main(String args[]) {
            Date now = new Date( );
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            System.out.println("当前时间为: " + sdf.format(now));
        }
    }
    

    输出结果

    当前时间为: 2023-01-29 11:12:01

    时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:

    Calendar类

    介绍一下Date 与 Calendar 的区别

    Date用于记录某一个含日期的、精确到毫秒的时间。重点在代表一刹那的时间本身。
    Calendar用于将某一日期放到历法中的互动——时间和年、月、日、星期、上午、下午、夏令时等这些历法规定互相作用关系和互动。Calendar本身代表公历的一个简化缩水版,姑且叫“计算机历”。

    完整的公历是格里高利历,Java SE中以GregorianCalendar类来提供相关的历法功能。

    常用方法

    成员属性

    LocalDate/LocalTime/LocalDateTime 类

    java8之前有Date类和Calendar类,但存在着不少缺陷,在java8中Date类的很多方法已经被弃用。

    Date类不格式化可读性差,所以就需要格式化,使用SimpleDateFormat来进行格式化操作,线程不安全。
    Calendar类时一个共享变量,而且没有做线程不安全处理,当多个线程同时使用SimpleDateFormat调用format方法时,多个线程会同时调用calendar.setTime()方法,从而导致time的值一直被修改,最终返回的时间时错误的。并且SimpleDateFormat中format和parse方法都是线程不安全的。


    在java8之后出现了LocalDate、LocalTime和LocalDateTime这些类,这些类使用final修饰,使得这些类是不可变的,一旦实例化值就固定了,线程安全。其中LocalTime是适用于时分秒,LocalDate是适用于年月日,LocalDateTime是适用于年月日时分秒。


    评论