2-1 java中的封装
概念:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法类实现对隐藏信息的操作和访问。

好处:
1. 只能通过规定的方法访问数据
2. 隐藏类的实例细节,方便修改和实现

封装的步骤:
1. 修改属性的可见性 设置为private
2. 创建getter/setter 方法 用于属性的读写
3. 在getter/setter方法中加入属性控制语句 对属性值得合法性进行判断

2-2 使用包管理类

2-3 java中的访问修饰符
访问修饰符——可以修饰属性和方法的访问范围

访问修饰符 本类 同包 子类 其他
private √
默认 √ √
protected √ √ √
public √ √ √ √

2-4 java中的this关键字
1. this关键字代表当前对象
this.属性 操作当前对象的属性
this.方法 操作当前对象的方法
2. 封装对象的属性的时候,经常使用this关键字

2-5 什么是 Java 中的内部类

问:什么是内部类呢?
答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!!
答:内部类的主要作用如下:

1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

问:内部类有几种呢?
答:内部类可分为以下几种:
成员内部类
静态内部类
方法内部类
匿名内部类

2-6 java中的成员内部类 com.imooc2.Demo05
成员内部类的使用方法:

1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,
Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等
2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,
而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a
3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,
而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
4、 编译上面的程序后,会发现产生了两个 .class 文件

其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class
另外,友情提示哦:
1、 外部类是不能直接使用内部类的成员和方法滴
可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。
2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,
如果要访问外部类的成员变量,可以使用 this 关键字。

2-7 Java中的静态内部类 com.imooc2.Demo06

静态内部类是 static 修饰的内部类,这种内部类的特点是:

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;
如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

2-8 Java中的方法内部类 com.imooc2.Demo07

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

3-1 Java 中的继承
关键字 : extends
继承的初始化顺序
1. 初始化父类,再初始化子类
2. 先执行初始化对象中属性,再执行构造方法中的初始化

父类对象 -> 父类属性初始化 -> 父类构造方法 -> 子类对象 -> 子类属性初始化 -> 子类构造方法

3-5 java 中的final使用
使用final关键字做标识 有“最终的”含义,final可以修饰类,方法,属性和变量
final修饰类,则该类不允许被继承
final修饰方法,则该方法不允许被覆盖(重写)
final修饰属性
则该类的属性不会进行隐式的初始化;
或在构造方法中赋值(但只能选其一)
final 修饰变量,则该变量的值只能赋一次值,即成为常量

3-6 java 中的super关键字
在对象的内部使用,可以代表父类对象。
1. 访问父类的属性
super.age
2. 访问父类的方法
super.eat()
3. super的应用
子类的构造的过程中必须调用其父类的构造方法,
当我们创建子类对象的时候,其实会自动执行,创建父类对象,并初始化父类构造方法,
此时就已经隐式的使用了super关键字

当我们需要显式的使用super关键字,必须将super()父类构造方法放入子类构造方法的第一行。
constructor call must be the first statement in a constructor

如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。

3-7 java 中的object 类

object 类是所有子类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类。
object 类中的方法,适合所有的子类。

常用object类中的方法:

1. toString() :

在Object类里面定义toString()方法的时候默认返回对象的哈希code码 (对象地址字符串);
可以重写toString()方法表示出对象的属性

@override
public void toString()
{
return "Dog[age="+age+"]";
}

2. equals():

比较的时对象的引用是否指向同一块内存地址;

比如:Dog dog = new Dog();
此时创建的dog 是创建的dog引用指向内存中的一个地址,
而通过调用dog对象的在内存中的地址,间接的使用对象

但是一般情况下,比较两个对象时,是比较两个对象的值是否相同,所以需要重写此equals方法。

@override
public boolean equals(Object obj)
{
if(this==obj)
return true;
if(obj==null)
return false;
if(getClass()!=obj.getClass())
return false;
Dog other=(Dog)obj;

if(age!=other.age)
return false;
return true;
}

4-1 java中的多态
1. 引用的多态
父类的引用可以指向本类的对象:Animal obj1 =new Animal();
父类的引用可以指向子类的对象:Animal obj2 =new Dog();

2. 方法的多态
创建本类对象时,调用方法为本类的方法
创建子类对象时,调用方法为子类重写的方法或者继承的方法

4-2 java 中的引用类型转换
1. 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
不存在风险,也叫自动类型转换
2. 向下类型转换(强制类型转换),是大类型到小类型的转换
存在风险,当小类型装不下大类型时,可能出现数据溢出
3. instanceof 运算符 ,来解决引用对象的类型,避免类型转换的安全性问题。
判断一个引用是否是某个类型或者某个类型的子类型,返回boolean值

4-3 java 中的抽象类

抽象类前使用abstract关键字修饰,则该类为抽象类
应用场景:
1. 在某些情况,某个父类只是知道某个子类包含怎样的方法,但是无法准确知道这些子类如何实现这些方法。
也就是说抽象类是约束子类必须有哪些方法,而不关心子类如何具体如何实现的
2. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类做为子类的模板,从而避免子类设计的随意性。
作用:
限制规定子类必须实现某些方法,但不关心实现的细节,但约束子类有哪些特征。
使用规则:
1. abstract 定义抽象类
2. abstract 定义抽象方法,只有声明,不需要实现
3. 包含抽象方法的类是抽象类
4. 抽象类可以包含普通的方法,也可以没有抽象方法
5. 抽象类不能直接创建,可以定义引用变量

4-4 java 中的接口

接口可以理解为一种特殊的类,由全局常量和公共抽象方法所组成。

1. 接口概念
类是一种具体的实现体,而几口定义了某一批类所需要的遵守的规范,
接口不关心这些类的内部数据,也不关心这些类里的方法的实现细节,它只规定这些类里必须提供某些方法。
2. 接口定义
和类定义不同,定义接口不再使用class关键字,而是使用 interface关键字。
3. 定义的基本语法:

[修饰符] interface 接口名 [extends 父接口1,父接口2...]
{
零个到多个常量定义...
零个到多个抽象方法定义...
}

接口就是用来被继承,被实现的,修饰符一般采用Public
注意: 不能使用Private 和protect 修饰接口

常量:
接口中的属性是常量,即使定义时不添加 public static final 修饰符,系统也会自动添加。

方法:
接口中的方法只能是抽象方法,总是使用,即使定义时不添加public abstract 修饰符,系统也会自动加上。

4. 使用接口

一个类可以实现一个或者多个接口,实现接口使用implements关键字。java中的一个类只能继承一个父类,是不够灵活的,
通过实现多个接口可以做补充。

继承父类实现接口的语法为:

[修饰符] class 类名 extends 父类 implements 接口1,接口2...
{
类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法。

}

如果要继承父类,继承父类必须在实现接口之前,就是说关键字extends 必须在 implements之前。

* 比如,有一个父抽象类【电话Telphone】,包含两个子类,分别为【蜂窝电话CellPhone】和【智能电话SmartPhone】,
CellPhone可以通过键盘打电话和发短信,SmartPhone可以通过语音打电话和发短信,而此时SmartPhone还可以用来玩游戏,
针对SmartPhone具有玩游戏的功能,SmartPhone和PSP都具有玩游戏的功能,不能让PSP继承抽象类Telphone,因为PSP和Telphone不是
同一个类型,但是它们具有相同的特征(玩游戏),那么此时就可以考虑使用接口来描述这个特征,将玩游戏的功能定义为接口

* 通过接口可以描述两个不同类型对象之间的共同特性,并且通过接口使用它们。

5. 使用接口
接口在使用过程当中,还经常与匿名内部类配合使用。

匿名内部类:就是没有名字的内部类,多用于关注实现而不关注实现类的名字。

Interface i = new Interface(){
public void method(){
System.out.println("匿名内部类实现接口的方式");
}
};

4-7 UML 简介

1. UML 概念
Unified Modeling Language (UML)
又称统一建模语言,或者 标准建模语言

是一个支持模型化和软件系统开发的图形化语言,
为软件开发的所有阶段提供模型化和可视化支持。
2. UML图示
UML 2.2 中一共定义了14中图示(diagrams)

3. 常用UML图

a. 用例图 (The Use Case Diagram)
用例图能够以可视化的方式,表达系统如何满足所收集的业务规则,以及特定的用户需求等信息。

Restaurant (simplified)
--> eat food
Food Critic --> pay for food
--> Drink wine
Cook food > eat():void | 方法
-----------------------------

Dog 继承 Animal 属性与方法 ,标出Dog重写了Animal的eat()方法;

*UML 可以从不同的环节,来了解系统的功能,这样在书写系统的时候,理解的更精确,并且更透彻.
d. 建模工具
Visio、Rational Rose、PowerDesign、Enterprise Architect 建模工具应用最广

http://www.uml.org.cn/umltools

6-1 综合练习
根据所学知识,编写一个控制台版的 "租车系统"

功能:
1. 展示所有可租车辆
2. 选择车型、租车量
3. 展示租车清单、包含:总金额、总载货量及其车型、总载人量及其车型

项目分析:
1. 数据模型分析
a. 通过对显示世界的事与物主要特征的分析、抽象,为信息系统的实施提供数据存取的数据结构以及相应的约束。
b. 数据结构组成:操作(方法)、属性

2. 业务模型分析
a. 在设计应用程序之前,应该明确该应用程序必须执行的哪些任务
分析业务需求是应用程序开发中最重要的步骤之一
确认业务需求的目的在于创建一个能同时满足零售商和消费者需要的解决方案。
b. 在租车系统中只需要考虑消费者业务需求即可。
消费者业务需求:
*选择车辆
*租车天数
*统计金额
*载客、货量

3. 显示和流程分析
a. 显示:用户可以看到的信息提示界面
b. 流程:显示信息的执行过程,步骤。
c. 租车系统中,要以命令行的方式显示提示信息和输出结果信息,
要考虑其样式,用户输入的数据不同,信息该如何提示、如何处理并显示出结果,这部分的知识囊括了显示与流程的内容。

如: 请选择车辆 -> 请输入序号 -> 输出总金额...

[Java] Java record的更多相关文章

  1. Java/Java Web中乱码解决汇总

    在开发Java/Java Web Application过程中,往往会出现乱码问题,而且有的时候真会弄得人很烦,浪费太多的时间. 记得之前看过一篇帖子,详细解释了Encoding/Decoding过程 ...

  2. 新手如何学习Java——Java学习路线图

    推荐初学者阅读:新手如何学习Java——Java学习路线图

  3. [Jmeter]通过批处理调用java,java从CSV动态读取登录的用户名和密码,并将其作为参数组合成字符串,写入外部.bat文件,然后通过Java执行这个外部批处理文件

    问题1:怎样通过批处理调用java代码? 问题2:怎样通过java从CSV文件获取到用户名和密码存入变量? 问题3:怎样将获取到的用户名和密码组合成字符串,写入外部批处理文件? 问题4:怎样在批处理文 ...

  4. [JAVA] JAVA 类路径

    Java 类路径 类路径是所有包含类文件的路径的集合. 类路径中的目录和归档文件是搜寻类的起始点. 虚拟机搜寻类 搜寻jre/lib和jre/lib/ext目录中归档文件中所存放的系统类文件 搜寻再从 ...

  5. JAVA | Java对象的内存分配过程是如何保证线程安全的?

    JAVA | Java对象的内存分配过程是如何保证线程安全的? 专注于Java领域优质技术,欢迎关注 作者 l Hollis 来源 l Hollis(ID:hollischuang) JVM内存结构, ...

  6. SonarQube执行代码分析时,报错ERROR: Unable to create symbol table for : /**/*.java java.lang.IllegalArgumentException: Unsupported class file major version 55

    若要转载本文,请务必声明出处:https://www.cnblogs.com/zhongyuanzhao000/p/11686633.html 起因: 最近正在尝试SonarQube的简单使用,但是当 ...

  7. Log4j log for java(java的日志) 的使用

    log4j的使用,Log4j log for java(java的日志) 是java主流的日志框架,提供各种类型,各种存储,各种格式,多样化的日志服务. 可以再Apache官网下载得到. 我们下载lo ...

  8. IWAB0398E Error in generating WSDL from Java: java.lang.ClassNotFoundException

    今天想用Eclipse创建WebService,报错信息 IWAB0398E Error in generating WSDL from Java: java.lang.ClassNotFoundEx ...

  9. JAVA | Java 解决跨域问题

    JAVA | Java 解决跨域问题 Table of Contents 引言 什么是跨域(CORS) 什么情况会跨域 解决方案 前端解决方案 后端解决方案 具体方式 一.使用Filter方式进行设置 ...

  10. JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈

    C 和 C++ 之类的编译语言性能远超Java,但是生成的代码只能在有限的几种系统上执行,这就有了Java的存在基础(JVM-跨平台) 早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之 ...

随机推荐

  1. Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Spark .时间不一样,SBT是白天编译,Maven是深夜进行的,获取依赖包速度不同 ...

  2. 机器学习&数据挖掘笔记_12(对Conjugate Gradient 优化的简单理解)

    数学优化方法在机器学习算法中至关重要,本篇博客主要来简单介绍下Conjugate Gradient(共轭梯度法,以下简称CG)算法,内容是参考的文献为:An Introduction to the C ...

  3. [C] C语言中的布尔值

    C不具备显示的布尔类型,所以使用整数来代替,规则是:零是假,任何非零值皆为真. 反过来说,如果逻辑表达式为真其值一定为真,若逻辑表达式为假其值一定为零.

  4. Android 2.x中使用actionbar - Actionbarsherlock (2)

    先前有一个项目,是基于android4.0来开发,使用到了Fragment及ActionBar,没打算支持android2.1-android2.3系列版本 写完之后,我将此应用发布到百度应用,一天以 ...

  5. Windows Azure Web Site (15) 取消Azure Web Site默认的IIS ARR

    <Windows Azure Platform 系列文章目录> 我们知道,Azure Web Site (改名为Azure Web App)默认是可以保留Session的.Azure We ...

  6. Java中的逆变与协变

    看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); ...

  7. 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法

    废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...

  8. C#简单问题,不简单的原理:不能局部定义自定义类型(不含匿名类型)

    今天在进行代码测试时发现,尝试在一个方法中定义一个委托,注意是定义一个委托,而不是声明一个委托变量,在编写的时候没有报错,VS也能智能提示,但在编译时却报语法不完整,缺少方括号,但实际查询并没有缺少, ...

  9. .NET魔法堂:工程构建基石->MSBuild

    一.前言 MSBuild是一个既熟悉又陌生的名字,Visual Studio的项目加载和构建均通过MSBuild来实现.VS中右键打开项目菜单,对应MSBuild的Build目标,对应MSBuild的 ...

  10. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 上一篇介绍的基本的使用方式,虽然自由度很高,但是编写的代码相对还是挺多.于是框 ...