Java预定义类:让你的代码事半功倍

简介: Java预定义类:让你的代码事半功倍

🧑‍💻CSDN主页:夏志121的主页


📋专栏地址:Java核心技术专栏

 

在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天的日期


目录
相关文章
|
4天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
18天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
32 5
Java反射机制:解锁代码的无限可能
|
14天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
37 17
|
6天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
11天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
26 2
|
14天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
47 3
|
15天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
20天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
57 10
|
15天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置