最近在学java的时候发现前边学的忘得差不多了,所以准备回过头来看看。
本文主要是霍斯特曼所著《java核心技术卷1》的代码理解。
4.1 面向对象程序设计概述
面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能和隐藏的实现部分。程序中的很多对象来着标准库,还有一些是自定义的。
传统的结构化程序设计通过设计一系列过程(算法)来求解问题,一旦确定了这些过程,就要考虑存储数据的适当格式。
面向过程 VS 面向对象
面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。
在日常生活或编程中,简单的问题可以用面向过程的思路来解决,直接有效,但是当问题的规模变得更大时,用面向过程的思想是远远不够的。所以慢慢就出现了面向对象的编程思想。世界上有很多人和事物,每一个都可以看做一个对象,而每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。
编程思想 | 优点 | 缺点 |
面向过程 |
|
|
面向对象 |
|
|
4.1.1 类
类(class)是构造对象的模板或蓝图,我们可以将类想象成制作小甜饼的模具,将对象想象成小甜饼。由类构造(construct)对象的过程称为创建类的实例(instance)。
4.1.2 对象
对象的三个主要特性:
对象的行为:可以对对象完成哪些操作,或者可以对对象应用哪些方法?
对象的状态:当调用哪些方法时,对象会如何响应?
对象标识:如何辨别具有相同行为与状态的不同对象?
4.1.3 类之间的关系
类之间,最常见的关系:
- 依赖(“use-a”)
- 聚合(“has-a”)
- 继承(“is-a”)
4.2 使用预定义类
要想使用对象,就必须首先构造对象,并指定其初始状态,然后对对象应用方法。
4.2.1 new对象
java中,使用构造器(constructor)构造新实例,构造器是一种特殊的方法,用来构造并初始化对象。例如:标准java库中的Date类,使用new操作符构造对象。
new Date()
将对象传递给一个方法:
System.out.println(new(Date));
或者对创建的对象应用一个方法。Date类中的toString方法。
String s = new Date().toString();
4.2.2 java类库中的LocalDate类
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
System.out.println(new Date());
String s = new Date().toString();
System.out.println(s);
System.out.println(LocalDate.now());
System.out.println(LocalDate.of(2022,9,26));
LocalDate timenow = LocalDate.now();
System.out.println(timenow.getYear());
System.out.println(timenow.getMonthValue());
System.out.println(timenow.getMonth());
System.out.println(timenow.getDayOfMonth());
System.out.println(timenow.getDayOfYear());
LocalDate athounsandsdaysLater = timenow.plusDays(1000);
System.out.println("一千天后的时间:"+athounsandsdaysLater);
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.println(" ");
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();
}
}
以上代码中,LocalDate类是用日历表示法表示日期的类。
LocalDate.now()
会构造一个新对象,表示构造这个对象时的日期。同理,可以提供年、月、日来构造对应一个特定日期的对象:
LocalDate.of(1999,12,31)
当然,我们可以将其保存于一个对象变量中:
LocalDate newYearsEve = LocalDate.of(1999,12,31)
一旦有了一个LocalDate对象,便可以使用方法getYear,getMonthValue,getDayofMonth得到年月日,同时可以使用plusDays方法对日期进行增加1000天的操作。
仪式代码运行结果:
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.println(" ");
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();
以上代码将显示当前月的日历,其格式为: