编程语言
首页 > 编程语言> > Java核心技术卷 学习Day02

Java核心技术卷 学习Day02

作者:互联网

java学习&复习,本文主要参照《Java核心技术卷》作为学习对象。

第四章 对象与类

1. 类

面向对象程序设计OOP

类:封装实例字段+方法

类>继承(is a)/依赖(uses a)/聚合(has a)>类

UML图符号

2. 预定义类

// Math

// Date
Date date = null;		//类似于cpp的对象指针
date = new Date();
System.out.println(date.toString());

localDate

// LocalDate
System.out.println(LocalDate.now());
LocalDate date = LocalDate.now();				//构造当前日期
date = LocalDate.of("year","month","day");		//构造指定日期
int today = date.getDayOfMonth();
int getYear();
int getMonthValue();
int getDayofMonth();
int getDayofWeek();								//1~7

// 先前n天,向后n天
date = date.minusDays(n);
date = date.plusDays(n);

// is闰年
date.isLeapYear();

// 当前年的天数和当前月的天数
date.lengthOfYear();
date.lengthOfMonth();
public class chapter04main {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();
        date = date.minusDays(today-1);     //当月第一天
        DayOfWeek week = date.getDayOfWeek();
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        for(int i=0;i<week.getValue();i++) System.out.printf("   ");
        while (date.getMonthValue() == month){
            int now = date.getDayOfMonth();
            System.out.printf("%3d",now);                 //输出日期
            if(now == today) System.out.printf("*");
            else System.out.printf(" ");
            date = date.plusDays(1);            //下一天
            if(date.getDayOfWeek().getValue() == 1) System.out.println();
        }
    }
}

日历输出结果

3. 自定义类

class Test{
	//field
    private int t;
    
    //constructor
    public Test(/*...*/){
        //...
    }
    
    // method
    public void test(int n){
        System.out.println("just test");
    }
}
javac Test*.java
// 使用构造函数
Test test1 = new Test();
var test2 = new Test();

// 发现null
t = Objects.requireNonNullElse(n,"unknown");		//报警但接收
Objects.requireNonNull(n,"not to be null");			//直接拒绝

test1.test(3)中test1即为隐式参数,方法中的3即为显式参数。

不要返回类的私有对象

public:共有

private:私有

必须初始化,且无法修改指针指向,不过指向的对象可以改变。

private final StringBuilder eva;
eva = new StringBuilder();			//必须初始化
eva.append("ok!\n");				//合法

4. 静态方法和静态字段

static int number = 1;						//静态字段,被类共享

static final double PI = 3.141592653589;	//静态常量

static int getNum(){...}

没有隐式函数,直接使用类来调用。eg.Test.getNum()

  • 不用对象状态
  • 只需访问类的静态字段

类似于LocalDateNumberFormat的构造。

main方法也是静态方法。

5. 方法参数

按值调用,参数为副本(基本数据类型)。

对象引用,让参数为对象引用,但仍为按值传递。eg.不能swap交换两个类。

6. 对象构造

  • 相同名字
  • 不同参数(不包括返回类型)

初始化为默认值。

P.S. 当存在自定义时,需自己写一个无参。

private String name = "";直接在class中初始化。

public Test(double s){
	this("Test "+Double.toString(s));
}
class Test{
	private static int Aid = 1;
	
	private int id;
	// 初始化块
    // static 如果有,在类第一次加载时运行。
	{
		id = Aid;
		Aid ++;
	}
	
	//...
}

只要构造对象,初始化块就会执行。先运行初始化块。

Java可以自动垃圾回收

7. 包

package

直接使用包内的所有类。

使用其他包公共类。

  • 完全限定名

java.time.LocalDate today = java.time.LocalDate.now();

  • import导入

import java.time.*; | import java.time.LocalDate;

只能使用*来导入包,

import static java.lang.System.*;

可以直接使用out.println();

package cc.dreaife.chapter04;

没有package语句的话,该文件中的类属于无名包

未指定publicprivate,可以被同一个包访问。

类可以存储于JAR文件中,可以包含多个类文件和子目录。

JAR使用ZIP格式组织文件和子目录。

# 设置类路径
java -classpath ${PATH(JAR)} ${className};
export CLASSPATH=${PATH};
set CLASSPATH=${PATH}

8. JAR文件

jar cvf jarFileName file1 file2 ...

META-INF/MANIFEST.MF

jar cfm jarName manifestName ...

java -jar jarName

9. 文档注释

javadoc=>HTML文件

  • 模块
  • 公共类和接口
  • 公共的、受保护的字段
  • 公共的、受保护的构造器和方法

/**...*/ 注释

@ param 标记 + 自由格式文本(第一句概要,可以使用HTML修饰符)

import后,类定义前

  • @param

参数,可以占多行,可以使用HTML修饰符

  • @return

返回值,可以占多行,可以使用HTML修饰符

  • @throws

抛出异常

	/**
     * testA
     * @param s
     * @param num
     * @return string
     */
    public String testA(String s,int num){
        return s + Integer.toString(num);
    }
  • @author name
  • @since text
  • @version text
  • @see | @link (使用超链接 #包隔类和方法)

在包目录中添加单独文件。

  • package-info.java
  • package.html 抽取<body>...</body>之间的文本
javadoc -encoding UTF-8 -d ../doc Chapter04		#抽取包
javadoc -encoding UTF-8 -d docTest test.java	#抽取类

10. 类设计技巧

标签:初始化,Java,核心技术,Day02,int,Test,date,java,LocalDate
来源: https://www.cnblogs.com/dreaife/p/16476170.html