Java核心技术卷 学习Day02

2023-11-07

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()
  • 分解过多责任的类
  • 类名和方法名可以体现职责
  • 优先使用不可变类
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java核心技术卷 学习Day02 的相关文章

  • 通过 SSH 隧道远程访问 MySQL 数据库

    我正在尝试编写 Java 程序来使用 ssh 隧道访问远程 mySQL 数据库 下面是我的代码 int lport 5656 int rport 3306 String rhost 111 222 333 444 String host 1
  • 从 PDF 中提取不可选择的内容

    我正在使用 Apache PDFBox 从 PDF 文件中提取页面 但找不到提取不可选择的内容 文本或图像 的方法 从 PDF 文件中选择内容是没有问题的 请注意 相关 PDF 在复制内容方面没有任何限制 至少从我在文件的 文档限制摘要 中
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 模拟框架对我有什么作用?

    我听说有些我无法交谈的人是 jmock 的忠实粉丝 我已经做了以测试为中心的开发多年 所以我浏览了网站并查看了一些文档 但仍然不知道它有什么好处 我对春天也有同样的问题 如果您已经了解它是什么 他们的文档会很好地解释它 所以我并不认为 jm
  • 修复 java 内存泄漏的学习网站

    学习修复 java 内存泄漏的最佳地点是什么 我一直试图在网络上找到好的资源 但令我失望的是 我发现正在讨论玩具示例 我还能够对小型玩具转储进行故障排除 但现实世界的应用程序转储更具挑战性 并且提供的线索很少 我尝试过 Jhat JMap
  • Android 上的 setTimeOut() 相当于什么?

    我需要等效的代码setTimeOut call function milliseconds 对于安卓 setTimeOut call function milliseconds 您可能想查看定时任务 http developer andro
  • 如何检测线程是否被IO阻塞?

    在Java中 线程可以有不同的状态 新的 可运行的 阻塞的 等待的 TIMED WAITING 的 终止的 然而 当线程被IO阻塞时 其状态为 RUNNABLE 如何判断是否被IO阻塞 NEW 线程已创建但尚未处理 可运行 线程正在占用CP
  • x.person 上的 @OneToOne 或 @ManyToOne 引用未知实体:y.Person - 继承问题

    我的 Hibernate 架构有问题 我有一个 MappedSuperClass 人员 一名员工和一名客户 gt Person class MappedSuperclass Audited public class Person exten
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • Spring Batch:比较数据库之间的数据

    我有两个数据库 Oracle 和 MySQL 目标是将Oracle表中的值保存到MySQL中 要求 MySQL表中不存在数据 但我在理解 Spring Batch 时遇到了困难 步骤中 它包含itemReader itemProcessor
  • 在 Android 中使用 lambdaj

    有人尝试过在android开发中使用lambdaj库吗 当我创建一个简单的小型java应用程序时 它对我来说工作得很好 但我无法在android应用程序中使用它 UPDATE 我正在添加 lambdaj lambdaj 2 3 2 with
  • 小米和oppo等中国ROM上的工作管理器,在电池优化时,将工作的计划延迟增加几个小时

    小米和 Oppo 等中国 ROM 上的工作管理器在进行电池优化时 会将计划的工作延迟增加几个小时 但是 我注意到一些应用程序即使在电池优化下也能够让计划的作业安静地完美运行 我注意到的一个区别是 它们每次运行作业时都会显示一条通知 那么这是
  • 序言中不允许引用

    请帮我找到这个异常的原因 我使用以下罐子 core renderer jar itext paulo 155 jar 第一个文档 xhtml lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE h
  • java3d 中的面部着色

    使用java3d 如何不在每个顶点基础上着色 而是在每个面基础上着色 我尝试学习 java3d 但我生成的 Shape3d 看起来并不符合预期 我想用不同的颜色给不同的三角形着色 但我不知道该怎么做 纹理看起来有点大材小用 而且我根本没有掌
  • SOAP Web 服务中的用户身份验证

    我提出了一个关于JAX WS 身份验证和授权 如何 https stackoverflow com questions 5314782 jax ws authentication and authorization how to 讨论了安全
  • 对于每个抛出异常的语句,try/catch 是否被视为反模式?

    我目前正在审查同事的 Java 代码 我看到很多情况下 每个可能抛出异常的语句都被封装在自己的 try catch 中 其中 catch 块都执行相同的操作 哪个操作与我的问题无关 对我来说 这似乎是一种代码味道 我记得读到过它是一种常见的
  • 使用 Java 进行 AES 加密并使用 Javascript 进行解密

    我正在制作一个需要基于 Java 的 AES 加密和基于 JavaScript 的解密的应用程序 我使用以下代码作为基本形式进行加密 public class AESencrp private static final String ALG
  • 在调试模式下,哪些代码更改会自动反映在 Eclipse 中?

    我使用 eclipse 用于编写 调试 作为 IDE 在调试模式下 当我进行一些更改 例如初始化局部变量 时 它们会自动反映 但其他更改例如更改静态变量的值 有时我会收到一条消息 说我需要重新启动虚拟机 有时则不需要 现在的问题是哪些类型的
  • PostgreSQL 使用 JPA 和 Hibernate 抛出“列的类型为 jsonb,但表达式的类型为 bytea”

    这是我的实体类 映射到表中postgres 9 4 我正在尝试将元数据存储为jsonb在数据库中输入 Entity Table name room categories TypeDef name jsonb typeClass JsonBi
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media

随机推荐

  • Qt中的线程详解

    概述 在多核时代 CPU 的主频已经进入瓶 颈 另辟蹊径地提高程序运行效率就是使用线程 充分利用多核的优势 线程可以看做是 轻量级进程 线程即可以由操作系统管理 也可以由应用程序管 1 为什么要使用线程 我们都知道 进程线程的概念是非常重要
  • 如何彻底卸载anaconda3(win10)

    前言 win10 anaconda3 参考文档 anaconda官方删除文档 第一步 找到anaconda的安装文件夹 双击运行Uninstall文件 优点 方便快捷 缺点 无法将anaconda的配置文件删除 第二步 删除anaconda
  • obj、gltf、glb、fbx、b3dm模型项目汇总

    网址 https github com einstein20050430 Fast Quadric Mesh Simplification 项目 Fast Quadric Mesh Simplification master 功能 有损压缩
  • Python实现PPT转化为Word和OCR识别

    文章目录 一 Python安装和卸载库的方法 1 1 安装 1 2 卸载 二 工具 三 将PPT内容转化为Word 3 1 将PPT文本框里的文字转化为Word 3 1 1 需要的库 3 1 2 实现代码 3 1 3 具体解释 3 2将PP
  • 微服务实例构建成 docker 镜像实例

    作者 Linux猿 简介 CSDN博客专家 华为云享专家 Linux C C 云计算 物联网 面试 刷题 算法尽管咨询我 关注我 有问题私聊 欢迎小伙伴们点赞 收藏 留言 目录 一 实验环境 二 制作 jar 二 打包镜像 2 1 编写 D
  • maven deploy -e -U -B 等集成命令

    1 maven的install可以将项目本身编译并打包到本地仓库 这样其他项目引用本项目的jar包时不用去私服上下载jar包 直接从本地就可以拿到刚刚编译打包好的项目的jar包 很灵活 避免每次都需要重新往私服发布jar包的痛苦
  • 【图像处理】索引色 抖色 反锯齿

    图片内容请参考 http www softii com cms article 5560 html 索引色 一些比较老旧的电脑相关硬件和文件格式只能处理 8 位的像素 3 个色频在 8 位的显示设备上所能表现的色彩范围实在是太少了 因此 8
  • linux删除软件

    linux删除软件 删除软件但不删除配置文件 sudo apt get remove softname 同时删除软件包和配置文件 sudo apt get remove purge softname 删除无用依赖包 sudo apt get
  • conda配置深度学习环境常用命令

    在深度学习中 安装完CUDA和cuDNN之后 经常需要创建虚拟环境 将深度学习框架pytorch tensorflow或caffe等安装在虚拟环境中 当深度学习框架有问题的时候 直接把环境删除掉 重新安装 conda中命令有很多 但是在深度
  • 爬虫爬取信息,抓包行为,超详细,附带源码

    爬虫爬取信息 无xpath 带源码 文章目录 爬虫爬取信息 无xpath 带源码 前言 操作步骤 1 在python中下载必要的库 2 完善运行环境 3 在网页中寻找到资源 4 写代码 5 结果展示 总结 前言 爬虫利用requests 库
  • Kubernetes 入门&进阶实战-转

    写在前面 笔者今年 9 月从端侧开发转到后台开发 第一个系统开发任务就强依赖了 K8S 加之项目任务重 排期紧 必须马上对 K8S 有概念上的了解 然而 很多所谓 K8S 入门 概念 的文章看的一头雾水 对于大部分新手来说并不友好 经历了几
  • kali Linux外网渗透控制Android安卓手机系统。

    免责声明 本文所介绍的内容仅做学习交流使用 严禁利用文中技术进行非法行为 否则造成一切严重后果自负 简介 Kali Linux的前身是BackTrack Linux发行版 Kali Linux是一个基于Debian的Linux发行版 它被认
  • 机器阅读理解相关论文汇总

    一 综述 1 Emergent Logical Structure in Vector Representations of Neural Readers 二 论文 1 Learning Recurrent Span Representat
  • EduCoder Java程序设计---Java面向对象(第八章) - 文件类答案

    第1关 创建文件 package step1 import java io File import java io FileFilter import java io IOException import java util Scanner
  • k8s基础11——安全控制之RBAC用户授权、RBAC用户组授权、SA程序授权

    文章目录 一 K8s安全框架 1 1 鉴权 1 1 1 HTTPS证书认证 1 1 2 HTTP Token认证 1 2 授权 1 3 准入控制 1 4 集群四大角色 二 RBAC给用户授权 TLS 2 1 签发客户端证书 2 2 生成ku
  • 使用Java的File类实现目录拷贝

    目录 准备工作 Case Analysis 代码实现 总结 准备工作 首先 我们来熟悉下File类 在 Java 中 File 类是 java io 包中唯一代表磁盘文件本身的对象 也就是说 如果希望在程序中操作文件和目录 则都可以通过 F
  • otsu算法_OTSU算法详解

    OTSU是阈值分割中一种常用的算法 它可以根据图像自动生成最佳分割阈值 OTSU的核心思想是类间方差最大化 OTSU算法详解 令 表示一幅大小为 像素的数字图像中的 个不同的灰度级 表示灰度级为 的像素数 图像中的像素总数为 像素的灰度级为
  • VS2017序列号

    趁着这两天微软发布了Visual Studio 2017 安装体验了这个史上最强IDE最新版 分享一下自己的安装过程 下载地址点击这里 该版本堪称史上最大IDE 随便勾了几个选项 就要占用几十个GB的安装空间 最后果断选择了最小安装包 只要
  • uniapp中单选按钮的实现

    标签说明 radio group 单项选择器 内部由多个
  • Java核心技术卷 学习Day02

    java学习 复习 本文主要参照 Java核心技术卷 作为学习对象 第四章 对象与类 1 类 面向对象程序设计OOP 类 封装实例字段 方法 类 gt 继承 is a 依赖 uses a 聚合 has a gt 类 2 预定义类 Math