ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java核心技术卷 学习Day02

2022-07-14 05:00:07  阅读:202  来源: 互联网

标签:初始化 Java 核心技术 Day02 int Test date java LocalDate


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();
  • 使用localDate输出当月日历
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:私有

  • final

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

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

main方法也是静态方法。

5. 方法参数

  • 按值调用(java使用)
  • 按引用调用
  • 按名调用(Algol使用)

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

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

6. 对象构造

  • 重载
  • 相同名字
  • 不同参数(不包括返回类型)
  • 无参构造

初始化为默认值。

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

  • 显式字段初始化

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

  • 调用this来构造
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文件

jar cvf jarFileName file1 file2 ...

  • 清单文件

META-INF/MANIFEST.MF

jar cfm jarName manifestName ...

  • 可执行jar文件

java -jar jarName

  • 多版本jar文件

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. 类设计技巧

  • 保证数据私有
  • 数据初始化
  • 不要使用过多基本类型
  • 不是所有都需要get()set()
  • 分解过多责任的类
  • 类名和方法名可以体现职责
  • 优先使用不可变类

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有