JAVA笔记(五)---再学习

这篇具有很好参考价值的文章主要介绍了JAVA笔记(五)---再学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

嵌套类(Nested Class)

什么是嵌套类?
定义在另一个类中的类,被称为嵌套类

	public class OuterClass {
		//静态嵌套类
		static class StaticNestedClass {
			
		}
		//非静态嵌套类(也称为:内部类)
		class InnerClass {
			
		}
	}

在嵌套类外层的类,称为:外部类(Outer Class)

最外层的外部类,称为:顶级类(Top-level Class)

内部类(Inner Class)

内部类:没有被static修饰的嵌套类,非静态嵌套类

  • 跟实例变量、实例方法一样,内部类与外部类的实例相关联
  • 必须先创建外部类实例,然后再用外部类实例创建内部类实例
		Person person = new Person();
		Hand hand = person.new Hand();
		System.out.print(hand.count);
  • 内部类不能定义除编译时常量以外的任何static成员
    也就是,static final int age = 10;可以
    除了这个之外,不能出现static成员

  • 内部类可以直接访问外部类中的所有成员(即使被声明为private)

  • 外部类可以直接访问内部类实例的成员变量、方法(即使被声明为private)

静态嵌套类(Static Nested Class)

  • 静态嵌套类:被static修饰的嵌套类
  • 静态嵌套类在行为上就是一个顶级类,只是定义的代码写在了另一个类中
  • 对比一般的顶级类,静态嵌套类多了一些特殊权限
    可以直接访问外部类中除实例变量、实例方法外的其他成员(即使被声明为private)
什么情况使用嵌套类?

如果类A只用在类C内部,则可以考虑将类A嵌套到类C中。这样的好处:

  • 封装性更好
  • 程序包更加简化
  • 增强可读性、维护性

如果类A需要经常访问类C的非公共成员,可以考虑将类A嵌套到类C中
另外,也可以根据需要将类A隐藏起来,不对外暴露

如果需要经常访问非公共的实例成员,设计成内部类(非静态嵌套类),否则设计成静态嵌套类;

能静态嵌套类则静态嵌套类


局部类(Local Class)

局部类:定义在代码块中的类(可以定义在方法中、for循环中、if语句中等)

  • 局部类不能定义除编译时常量以外的任何static成员
  • 局部类只能访问final或者有效final局部变量
什么是有效final?

从Java8开始,如果局部变量没有被第二次赋值,就认定为是有效final
举例:int age = 10;之后age不再被赋值,被称为有效final

  • 局部类可以直接访问外部类中所有成员(即使被声明为private)
    局部类只有定义在实例相关的代码块中,才能直接访问外部类中的实例成员(实例变量、实例方法)

抽象类

抽象方法(Abstract Method)

抽象方法:被abstract修饰的方法
抽象方法:

  • 只有方法声明,没有方法实现(参数列表后面没有大括号,而是分号)
  • 不能是private权限(因为定义抽象方法的目的是让子类去实现)
  • 只能是实例方法,不能是类方法
  • 只能定义在抽象类、接口

抽象类(Abstract Class)

抽象类:被abstract修饰的类

  • 可以定义抽象方法
  • 不能实例化,但可以自定义构造方法
  • 子类必须实现抽象父类中的所有抽象方法(除非子类也是一个抽象类)
  • 可以像非抽象类一样,定义成员变量、常量、嵌套类型、初始化块、非抽象方法等

抽象类就是在普通类的基础上,增加了:可以定义抽象类

常见使用场景:
抽取子类的公共实现到抽象父类中,要求子类必须要单独实现的定义成抽象方法


接口(Interface)

  • API(Application Programming Interface)应用编程接口
    提供给开发者调用的一组功能(无须提供源码)

  • Java中的接口
    一系列方法声明的集合
    用来定义规范、标准

接口中可以定义的内容

  • 抽象方法、常量、嵌套类型,从Java8开始可以定义:默认方法、静态方法
    上述可以定义的内容都是隐式public的,因此可以省略public
    从Java9开始可以定义private方法

  • 常量可以省略static、final

  • 抽象方法可以省略abstract

  • 不能自定义构造方法、不能定义(静态)初始化块、不能实例化

接口的细节

接口名称可以在任何使用类型的地方使用

一个类可以通过implements关键字实现一个或多个接口

  • 实现接口的类必须实现接口中定义的所有抽象方法,除非它是个抽象类
  • 如果一个类实现的多个接口中有相同的抽象方法,只需要实现此方法一次
  • extends和implements可以一起使用,implements必须写在extends的后面
  • 当父类、接口中的方法签名一样时,那么返回值类型也必须一样

一个接口可以通过extends关键字继承一个或者多个接口

  • 当多个父接口中的方法签名一样时,那么返回值类型也必须一样

抽象类与接口对比

抽象类和接口的用途有点类似,该如何选择?

何时选择抽象类?

  • 在紧密相关的类之间共享代码
  • 需要除public之外的访问权限
  • 需要定义实例变量、非final的静态变量

何时选择接口?

  • 不相关的类实现相同的方法
  • 只是定义行为,不关心具体是谁实现了行为
  • 想实现类型的多重继承

多态(Polymorphism)

什么是多态?

  • 具有多种形态
  • 同一操作作用于不同的对象,产生不同的执行结果

多态的体现

  • 父类(接口)类型指向子类对象
  • 调用子类重写的方法

JVM会根据引用变量指向的具体对象来调用对应的方法

  • 这个行为叫做:虚方法调用
  • 类似于C++中的虚函数调用

匿名类(Anonymous Class)

当接口、抽象类的实现类,在整个项目中只用过一次,可以考虑使用匿名类

  • 匿名类不能定义 除 编译时常量 以外的任何static成员

  • 匿名类智能访问final或者 有效final的局部变量

  • 匿名类可以直接访问外部类中所有成员(即使被声明为private)文章来源地址https://www.toymoban.com/news/detail-417198.html


枚举(Enum)

  • 如果一个变量的取值只可能是固定的几个值,可以考虑使用枚举类型
  • 枚举由一组预定义的常量构成
  • 枚举的本质是类,所有枚举类型最终都隐式继承自java.lang.Enum

到了这里,关于JAVA笔记(五)---再学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch多层嵌套nested查询和多条件聚合aggregations

     当在aggregations中使用嵌套多条件,需要用bool包起来,如果直接在filters[]里写,将会分多个桶,分别按单个条件统计;  部分片段截取: 当需要将多层嵌套nested用多个条件AND起来时: 全部片段: Elasticsearch 多层嵌套nested 多条件聚合aggregations

    2024年02月16日
    浏览(38)
  • ElasticSearch第五讲 ES nested嵌套文档与父子文档处理

    在ES中,处理实体之间的关系并不像关系型存储那样明显。在关系数据库中的黄金准则 - 数据规范化,在ES中并不适用。在处理关联关系,嵌套对象和父子关联关系中,我们会讨论几种可行方案的优点和缺点。 紧接着在为可扩展性而设计中,我们会讨论ES提供的一些用来快速灵

    2024年02月02日
    浏览(37)
  • Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?

    这是来自社区的一个真实企业场景问题。 https://elasticsearch.cn/question/13135 如下所示, 希望在查出的结果后, 对结果进行后处理,对tags列表,根据depth进行排序。 Elasticsearch 能支持的排序方式罗列如下: 包含但不限于: 基于特定字段的排序 基于Nested对象字段的排序 基于特定

    2024年02月02日
    浏览(44)
  • clickhouse的嵌套数据结构Tuple、Array与Nested类型介绍和使用示例

    Tuple 是 ClickHouse 数据库中的一种数据类型,它允许在一个字段中存储由不同数据类型组成的元组(tuple)。 元组可以包含任意数量的值,并且每个值可以是不同的数据类型,如 int 、 float 、 string 、 date 等。 例如,以下是一个 clickhouse Tuple 类型的例子: (1, \\\'John\\\', 12.5, Date(\\\'2021-0

    2024年02月14日
    浏览(37)
  • Doris学习笔记-Java自定义UDAF

    项目最近需要做一些数据统计方面的东西,发现数据字段都是很长一串数字的字符串,Doris自带的函数无法对其进行相应的运算操作,需要扩展实现相关的操作运算。 主要参考官方的文档资料完成相关的自定义扩展。需要注意的是在使用Java代码编写UDAF时,有一些必须实现的

    2024年01月16日
    浏览(23)
  • [正式学习java①]——java项目结构,定义类和创建对象,一个标准javabean的书写

    目录 一、创建第一个java文件 二、 初始类和对象 三、符合javabean规范的类 要想写代码,你得有文件啊 以前的创建方式: 右键新建文本文档,开始写代码,写完改后缀名,保存……这样文件一旦多了很难管理 现在我们要规范项目结构 每一个类就是一个java文件,每一个包存放

    2024年02月08日
    浏览(31)
  • C++学习笔记——友元、嵌套类、异常

    目录 一、友元 一个使用友元的示例代码 输出结果 二、嵌套类 一个使用嵌套类的示例代码 输出结果 三、异常 一个使用异常处理的示例代码 输出结果 四、结论 五、使用它们的注意事项 上一篇文章链接: C++中的继承和模板是非常强大和灵活的特性,它们可以帮助我们实现代

    2024年02月02日
    浏览(71)
  • 爬虫学习笔记-scrapy爬取电影天堂(双层网址嵌套)

      1.终端运行scrapy startproject movie,创建项目 2.接口查找  3.终端cd到spiders,cd scrapy_carhome/scrapy_movie/spiders,运行 scrapy genspider mv https://dy2018.com/ 4.打开mv,编写代码,爬取电影名和网址 5.用爬取的网址请求,使用meta属性传递name ,callback调用自定义的parse_second 6.导入ScrapyMovieItem,将movie对象

    2024年02月19日
    浏览(38)
  • Java企业级开发学习笔记(4.4)Spring Boot加载自定义配置文件

    创建 Spring Boot 项目 单击【创建】按钮 在 resources 里创建 myconfig.properties 文件 设置文件编码 设置学生的四个属性值 在 cn.kox.boot 包里创建config子包,在子包里创建 StudentConfig 打开自带的测试类 ConfigDemo01ApplicationTests 注入学生配置实体,创建 testStudentConfig() 测试方法,在里面输

    2024年02月08日
    浏览(37)
  • 探究C#中Class和Struct互相嵌套的内存问题

    先回顾一下C#的内存种类 栈区:由编译器自动分配释放 ,存放值类型的对象本身,引用类型的引用地址(指针),静态区对象的引用地址(指针),常量区对象的引用地址(指针)等。其操作方式类似于数据结构中的栈。 堆区(托管堆):用于存放引用类型对象本身。在c#中

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包