Java基础再学习

news2024/9/23 13:26:11

作为一名实习生,为了夯实基础、查缺补漏,我跟随 B 站学习了以下知识,欲将其留存纪念,故对其中内容进行优化,以使其更为优雅。

面向对象

  • 面向对象编程的定义:借助合适的对象来解决问题(如运用 scanner 库进行输入)。
  • 运用面向对象编程的缘由:更契合人类的思维模式,使程序代码更易于理解。
  • 面向对象的核心要点:学习获取现有的对象并加以运用,以及学习如何自行设计对象并予以使用。

类(设计图):乃是对对象共同特征的描绘。
对象:为真实存在的具体事物。

在 Java 中,务必先设计类,方可获取对象。

如何定义类

public class 类名 {
    // 成员变量(代表属性,通常为名词)
    // 成员方法(代表行为,通常为动词)
    // 构造器(后续学习)
    // 代码块(后续学习)
    // 内部类(后续学习)
}

例如:

public class Phone {
    // 属性(成员变量)
    String brand;
    double price;

    // 行为(方法)
    public void call() {
    }

    public void playGame() {
    }
}

如何获取类的对象

类名 对象名 = new 类名();
Phone p = new Phone();

如何使用对象

  • 访问属性:对象名。成员变量。
  • 访问行为:对象名。方法名 (...)。

案例学习:

在手机案例中所获心得:
于一个类中创建对象的属性与行为,并在测试类中通过 new 对象来进行调用,可使代码更为简洁有序。

例如:

// 在 phone 类中定义类的特征,在 PhoneTest 中对类进行实例化后进行赋值与调用行为
public class PhoneTest {
    public static void main(String[] args) {
        // 创建手机的对象
        Phone p = new Phone();
        // 赋值
        p.brand = "iphone";
        p.price = 10000;
        // 获取手机对象中的值
        System.out.println(p.brand);
        System.out.println(p.price);

        // 创建一个新手机
        Phone p2 = new Phone();
        p2.brand = "iphone2";
        p2.price = 20000;
        p2.call();
        p2.playGame();

        // 调用手机中的方法
        p.call();
        p.playGame();
    }
}

定义对象类之后,可通过在实例化时赋予不同的名称来创建出不同的对象。

定义类的注意事项

  • JavaBean 类用于描述一类事务,其中不包含 main 方法。
  • 类名的首字母宜大写,应具备见名知意的特性,并采用驼峰命名法。
  • 一个 Java 文件中可定义多个 class 类,但仅有一个类可由 public 修饰,且 public 修饰的类名必须与代码文件名一致。
  • 成员变量的完整格式为:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值。

对象的成员变量的默认值规则

定义类的建议

  • 类名首字母宜大写,使用英文,富有意义,满足驼峰命名要求,不使用关键字,符合标识符规定。
  • 一个代码文件中可定义多个类,但仅有一个类使用 public 修饰,且 public 修饰的类名必须是 Java 代码的文件名称。

开发中类的设计


首先审视需求中存在的事物类别,每个事物均应定义为一个独立的类,将事物的名词定义为属性,事物所能执行的操作定义为行为。

面向对象的三大特征 - 封装(如何恰当地设计对象的属性和方法)

  • 原则:对象代表何物,便应封装相应的数据,并提供数据对应的行为。
  • 例如:length()用于获取字符串的长度,toUppercase()用于将字符串转换为大写。
  • 封装的益处:降低学习成本。对象代表何物,就封装相应的数据,并提供相应的行为。

private修饰符:

  • 是一个权限修饰符,可用于修饰成员变量和成员方法。
  • private修饰的成员仅能在本类中访问,需提供getset方法后方可被其他类操作和使用。
  • getset方法用于为成员变量赋值,方法使用public修饰。

set方法和get方法的作用分别为:

  • set方法旨在设置对象的属性值,可对传入的值进行合法性检查,如检查格式是否正确、值是否在合理范围内。通过封装属性的设置过程,提升代码的安全性和可维护性,避免外部直接对属性进行不当修改,使属性的修改处于受控状态。
  • get方法用于获取对象的属性值,确保属性的获取过程一致且可控。可在获取属性值时进行一些额外处理,如返回属性的副本而非原始引用,以防止外部代码意外修改内部状态,提高代码的可读性和可维护性。外部代码可通过清晰的方法名获取属性值,而无需直接访问对象的内部状态。

构造器的作用是为属性赋予初始值,在对象创建时被调用,使对象在诞生之际就具备完整的意义和可用的状态。

This关键字:

遵循就近原则,离谁近就使用谁。使用this关键字后将使用成员变量。例如:this.name = name;将局部变量中的name赋值给成员变量中的name

在抽象类中定义抽象函数时,默认的修饰符为public abstract

Jdk8 的抽象类中可以编写普通方法,但需添加defaultstatic进行修饰。

// jdk8 提供默认的方法
default void defaultGet() {
    System.out.println("defaultGet");
}

static void staticDel() {
    System.out.println("staticDel");
}

在子类实现抽象类时,不强制要求重写defaultstatic方法。

Lambda 表达式


Lambda 表达式的优点:简化匿名内部类的调用。
Lambda 表达式 + 方法引用 → 使代码更加精简。

接口的调用方法:

  1. 通过匿名内部类进行 new。
  2. 定义子类,让父类接收。

匿名内部类调用:

public class Test02 {
    public static void main(String[] args) {
        // 通过匿名内部类进行调用
        orderService orderService = new orderService() {
            @Override
            public void get() {
                System.out.println("get");
            }
        };
        orderService.get();

        // 使用 Lambda 表达式进行调用
        new OrderService() {
            @Override
            public void get() {
                System.out.println("get");
            }
        }.get();
    }
}

接口中仅有一个抽象方法,则该接口为一个函数接口(函数接口中只能有一个抽象方法,但可以有多个普通方法)。

@FunctionalInterface
public interface MyFunctionalInterface {
    void get();

    default void defaultAdd() {
        System.out.println("我是默认的方法");
    }
}

@FunctionalInterface 标识该接口为函数接口。
Object 父类中的方法可在函数接口中重写。

Lambda 基础语法


() - 参数列表
-> 分割
{} 方法体
(a, b) -> {}
(函数接口的参数列表,无需写类型,需定义函数名称) -> {方法体}

无参方法调用:

public interface AcanthopanaxInterface {
    void get();
}

AcanthopanaxInterface acanthopanaxInterface = () -> {
    System.out.println("使用 Lambda 表达式调用方法");
};

acanthopanaxInterface.get();

有参方法调用:

public class Test04 {
    public static void main(String[] args) {
        // 1. 使用匿名内部类调用
        YouShenInterface youShenInterface = new YouShenInterface() {
            @Override
            public String get(int i, int j) {
                return i + "--" + j;
            }
        };
        System.out.println(youShenInterface.get(1, 2));

        // 2. 使用 Lambda 调用有参数函数方法
        YouShenInterface youShenInterface2 = (i, j) -> {
            return i + "--" + j;
        };
        System.out.println(youShenInterface2.get(1, 1));
    }
}
public class Test05 {
    public static void main(String[] args) {
        AcanthopanaxInterface acanthopanaxInterface = () -> {
            System.out.println("我是方法");
        };
        acanthopanaxInterface.get();

        // 精简代码
        ((AcanthopanaxInterface) () -> {
            System.out.println("我是方法");
        }).get();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可视化表单设计生成器可以实现流程化办公吗?

实现流程化办公一直都是很多客户朋友追求的目标。那么,如何才能实现这一目标?如何为客户提供更优良的产品助力提质、降本、增效?低代码技术平台拥有可视化操作界面、更灵活、更高效、更可靠,是专注于职场办公,助力流程…

牛客笔试小题

目录 牛客.小红取数 牛客.哈夫曼编码​编辑 牛客.字符编码(上一道题的资料) 牛客.最小的完全平方数 牛客.小红取数 01背包问题:在满足总和必须为k的倍数的情况下,选择最大的总和 1.状态表示: dp[i][j]:表示从前面i个数字中挑选,总和%k等于j时候,最大的…

Java SpringBoot+Vue实战教程:如何一步步实现Cosplay论坛设计与实现

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

JWT-JSON Web Token

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。 1 跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 用户向服务器发送用户名和密码。服务器验证通过后,在当前对话(session)里面保存相关数据,比如用…

8.23题目:矩阵数字查找

一些闲话&#xff1a; 小编打算给这个刷题系列改个名&#xff0c;以后就用日期做标题吧&#xff0c;哪一天写了就写哪一天的日期&#xff0c; 不然就跑题了&#xff0c;你说是吧&#xff01;啊啊啊&#xff0c;根本做不到每日一题&#xff01;&#xff01;~~>_<~~ 一、…

Mix|使用VS2017CMake构建Qt工程 仿照MVS(仅用于学习)

MVS下载链接&#xff1a;https://www.hikrobotics.com/cn/machinevision/service/download/?module0 CMake工程构建参考&#xff1a;CMake|VS2017CMake3.8搭建Qt项目 文章目录 效果图整体结构实现代码最外层CMakeLists.txt代码实现及CMakeLists.txt搭建CMakeLists.txt搭建主函…

适应CLIP作为图像去雾的聚合指导

Adapt CLIP as Aggregation Instructor for Image Dehazing 2408.12317 (arxiv.org) 大多数去雾方法都存在感受野有限的问题&#xff0c;并且没有探索视觉-语言模型中蕴含的丰富语义先验&#xff0c;这些模型已在下游任务中被证明是有效的。 本文介绍了CLIPHaze&#xff0c;这…

如何使用ssm实现汽车养护管理系统

TOC ssm038汽车养护管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。…

NAND闪存制造商Kioxia申请IPO,预计市值达103亿美元

据《日本经济新闻》报道&#xff0c;全球第三大NAND闪存制造商Kioxia已向东京证券交易所提交了首次公开募股&#xff08;IPO&#xff09;申请&#xff0c;计划于10月上市。根据《金融时报》的消息&#xff0c;Kioxia希望通过此次IPO筹集至少5亿美元的资金&#xff0c;并可能获得…

Circuitjs web 在线电路模拟器应用简介

Circuitjs 是一款 web 在线电路模拟器, 可以在浏览器上方便地模拟各种模拟或数字的电路, 用户无需安装各种软件, 生成的电路也支持在线分享给其它用户. 访问地址 下述地址我部署的一个版本: https://cc.xiaogd.net/ 此版本的特色是界面翻译成中文时尽量保留了英文, 因此在某…

VBA语言専攻T3学员领取资料通知0823

T3学员领取资料通知0823 各位学员∶本周MF系列VBA技术资料增加706-725讲&#xff0c;T3学员看到通知后请免费领取,领取时间8月23日晚上19:00-8月24日上午11:00。本次增加内容&#xff1a; MF706:在同一页面上打印多个范围 MF707:通过合并行打印多个范围 MF708:将多表中的多…

mathtype7永久激活码密钥及2024最新序列号附安装教程

MathType7是一款强大的数学公式编辑器&#xff0c;它可以在各种文档中插入复杂的数学公式和符号。它的特点包括&#xff1a; MathType最新mac官方版本下载如下: https://wm.makeding.com/iclk/?zoneid61764 MathType最新win官方版本下载如下: https://wm.makeding.com/icl…

代谢组数据分析(十八):随机森林构建代谢组诊断模型

本文参考Metabolomic machine learning predictor for diagnosis and prognosis of gastric cancer撰写。 使用随机森林算法和LASSO特征选择构建了一种胃癌(GC)诊断预测模型。参与者(队列1,n=426)通过随机分层抽样分为发现数据集(n=284)和测试集(n=142)。接下来,在发…

社区流浪动物救助系统-计算机毕设Java|springboot实战项目

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

Linux下进程间的通信--信号

信号的概念&#xff1a; 在Linux操作系统中&#xff0c;信号是一种软件中断机制&#xff0c;用于通知进程某个事件已经发生。信号是Linux进程间通信&#xff08;IPC&#xff09;的一种简单且快速的方式&#xff0c;它可以用来处理各种异步事件&#xff0c;如用户输入、硬件事件…

DAG计算框架:实现业务编排

文章目录 DAG如何实现DAG计算框架Node的实现Engine的实现Graph的实现具体某个节点如何使用 在工作几年之后&#xff0c;大部分人如果还在继续做着 CRUD的简单重复工作&#xff0c;即使领导不提出对你更高的期望&#xff0c;自身也会感到焦虑吧。学如逆水行舟不进则退&#xff…

解锁Spring Boot、Prometheus与Grafana三合一:打造你的专属自定义指标炫酷大屏!

1. 集成Prometheus到Spring Boot 需要在Spring Boot应用中集成Prometheus。可以通过micrometer库来实现。micrometer是一个应用程序监控库&#xff0c;它支持多种监控系统&#xff0c;包括Prometheus。 一招制胜&#xff01;Spring Boot、Prometheus和Grafana三剑合璧&#x…

数仓工具使用Docker部署DolphinScheduler 3.2.0 (分布式任务调度系统)-单机模式

Apache DolphinScheduler——开源大数据调度器神器 Apache DolphinScheduler(海豚调度),国人之光&#xff0c;是许多国人雷锋开源在Apache的顶级项目&#xff0c;主要功能就是负责任务的调度处理&#xff0c;Apache DolphinScheduler是一个分布式去中心化&#xff0c;易扩展的可…

C++--map和set

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.2 map 3.3 multiset 3.4 multimap 4.底层结构 4.3红黑树与AVL树的比较 1. 关联式容器 前面我们已经接触过 STL 中的部分容器&#xff0c;比如&#xff1a; vector 、 list 、 deque、 forward_list(…

自建CDN/WAF解决方案--GoEdge

目录 概述 核心功能 典型应用场景 优点 适用对象 安装 使用 域名准备 DNSPOD的API秘钥申请 添加DNS厂商账号 添加集群 添加节点 添加网站 工作原理 概述 GoEdge 是一款高性能的、支持多种功能的反向代理服务器&#xff0c;通常用于流量管理、负载均衡、安全防护等…