关于在Java中使用预定义类

 更新时间:2023年05月15日 09:04:24   作者:夏志121  
这篇文章主要介绍了关于在Java中使用预定义类,预定义类就是Java类库(或第三方库)中已经定义好的类,例如,Math 类和 Date 类,需要的朋友可以参考下

在Java中,没有类就无法做任何事情。然而,并不是所有的类都表现出面向对象的典型特征。以Math.Random为例,我们不必具体了解如何实现的,只需要方法名和参数。这正是封装的关键所在。Math类只封装了功能,所以不需要隐藏数据。由于没有数据,因此不必考虑创建对象和初始化它们的实例字段,因为根本没有实例字段。

一、对象与对象变量

要使用对象首先必须构造对象,并指定其初始化状态,然后对对象应用方法。

在Java中,要使用构造器(constructor,或称构造函数)构造新实例。构造器是一种特殊的方法,其作用是构造并初始化对象。

构造器总是与类名同名。因此,Date类的构造器就名为Date。要想构造一个Date对象,需要在构造器前面加上new操作符。如下例子:

new Date()

这个表达式会构造一个新对象。这个对象初始化为当前的日期和时间。

如果需要,可以将这个对象传递给一个方法

System.out.println(new Date());

或者对刚构造的对象应用一个方法。Date类中有一个toString方法。这个方法将生成日期的一个字符串描述,可以如下对Date对象应用toString方法:

String s = new Date().toString();

上面两个例子,构造对象仅使用了一次。通常,你可能希望保留所构造的对象从而能继续使用,为此,需要将对象存放值一个变量中:

Date rightNow = new Date();

对象和对象变量存在一个重要的区别,例如:

Date startTime;
s = startTime.toString(); //not yet

上例定义了一个对象变量startTime,它可以引用Date类型的变量。但是,startTime不是一个对象,而且实际上它甚至还没有引用任何对象,所以不能在这个变量上用任何Date方法,将会产生编译错误。

必须初始化startTime变量,让它引用一个新构造的对象:

startTime = new Date();

也可以设置这个变量,让它引用一个已有的对象:

startTime = rightNow;

重要的一点:对象变量并不实际包含一个对象,它只是引用一个对象

在Java中,任何对象变量的值都是一个引用,指向存储在另外一个地方的某个对象。

二、Java类库中的LocalDate类

标准Java类库分别包含了两个类:一个是用来表示时间点的Date类;另一个是用大家熟悉的日历表示法表示日期的LocalDate类。将时间度量与日历分开是一种很好的面向对象设计。

不要使用构造器来构造LocalDate对象。应用使用静态工厂方法(factory method),它会代表你调用的构造器,下面式表达式:

LocalDate.now()

上例会构造一个新对象,表示构造这个对象时的日期

可以提供年、月、日来构造对应一个特定日期的对象,并保存在一个对象变量中:

LocalDate newYearEve = LocalDate.of(2020,2,2)

也可以使用plusDays方法,把应用这个方法的对象称为当前对象,那么这个新日期对象则是距当前对象指定天数的一个新日期:

LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
int year = aThousandDays.getYear();
int month = aThousanDays.getMonthValue();
int day = aThousanDays.getDayOfMonth();

LocalDate类封装了一些实例字段来维护所设置的日期。

三、更改器方法与访问器方法

Java库较早版本曾经有另一个处理日历的类,名为GregorianCalender。如下这个类表示的是一个日期增加1000天:

GregorianCalendar someDay = new GregorianCalendar(1999,11,31);
someDay.add(Calender.DAY_OF_MONTH,1000);

LocalDate.plusDays方法不同,GregorianCalendar.add方法是一个更改器方法(mutator method)。调用这个方法后,someDay对象的状态会改变。

相反,只访问对象而不修改对象的方法有时称为访问器方法(accessor method)。例如,LocalDate.getYear和GregorianCalender.get就是访问器方法。

使用LocalDate类显示当前月的日历:

import java.time.DayOfWeek;
import java.time.LocalDate;
public class CalendarTest {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();
        date = date.minusDays(today - 1);
        DayOfWeek weekday = date.getDayOfWeek();
        int value = weekday.getValue();
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        for(int i = 1; i < value; i++){
            System.out.print("    ");
        }
        while (date.getMonthValue() == month){
            System.out.printf("%3d",date.getDayOfMonth());
            if(date.getDayOfMonth() == today){
                System.out.print("*");
            }else {
                System.out.print(" ");
            }
            date = date.plusDays(1);
            if(date.getDayOfWeek().getValue() == 1){
                System.out.println();
            }
        }
        if(date.getDayOfWeek().getValue()!=1){
            System.out.println();
        }
    }
}

执行结果:

java.time.LocalDate API:

  • static LocalDate now()

构造一个表示当前日期的对象

  • static LocalDate of(int year, int month, int day)

构造一个表示给定日期的对象

  • int getYear()
  • int getMonthValue()
  • int getDayOfMonth()

得到当前日期的年、月和日

  • DayOfWeek getDayOfWeek()

得到当前日期是星期几,作为DayOfWeek类的一个实例返回。在DayOfWeek实例上调用getValue来得到1-7之间的一个数,表示这是返回的星期几,1表示星期一,7表示星期日

  • LocalDate plusDays(int n)
  • LocalDate minusDays(int n)

生成当前日期之后或之前n天的日期

到此这篇关于关于在Java中使用预定义类的文章就介绍到这了,更多相关Java预定义类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java线性结构中的链表

    详解Java线性结构中的链表

    除了一些算法之外,我们还有掌握一些常见的数据结构,比如数组、链表、栈、队列、树等结构,所以接下来就给大家详细讲解一下线性结构中的链表,需要的朋友可以参考下
    2023-07-07
  • 后端java压缩图片超详细图文教程

    后端java压缩图片超详细图文教程

    这篇文章主要给大家介绍了关于后端java压缩图片的相关资料,片压缩是一种广泛采用的技术,它不仅能显著减小文件大小,释放更多存储空间,还能提升图片加载速度,避免长时间等待,需要的朋友可以参考下
    2024-04-04
  • MyBatis-Plus多数据源的示例代码

    MyBatis-Plus多数据源的示例代码

    本文主要介绍了MyBatis-Plus多数据源的示例代码,包括依赖配置、数据源配置、Mapper 和 Service 的定义,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • springmvc处理响应数据的解析

    springmvc处理响应数据的解析

    今天小编就为大家分享一篇关于springmvc处理响应数据的解析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Maven导入依赖时报错如何解决

    Maven导入依赖时报错如何解决

    这篇文章主要介绍了Maven导入依赖时报错如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • AsyncHttpClient RequestFilter请求筛选源码解读

    AsyncHttpClient RequestFilter请求筛选源码解读

    这篇文章主要为大家介绍了AsyncHttpClient RequestFilter请求筛选源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • SpringBoot利用filter实现xss防御功能

    SpringBoot利用filter实现xss防御功能

    Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击,攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行,利用这些恶意脚本,攻击者可获取用户的敏感信息,本文给大家介绍了SpringBoot利用filter实现xss防御功能,需要的朋友可以参考下
    2024-09-09
  • 提示:Decompiled.class file,bytecode version如何解决

    提示:Decompiled.class file,bytecode version如何解决

    在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配置文件,添加阿里云镜像并去掉默认镜像,解决了下载源的问题,同时,检查并修改了依赖版本,确保了问题的解决
    2024-12-12
  • Java concurrency线程池之线程池原理(一)_动力节点Java学院整理

    Java concurrency线程池之线程池原理(一)_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java concurrency线程池之线程池原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • idea mac版打开是出现打开失败问题及解决

    idea mac版打开是出现打开失败问题及解决

    这篇文章主要介绍了idea mac版打开是出现打开失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论