【Java】基础入门(十七)--- 类

1. 类

        Java有各种各样类,如:顶级类、嵌套类、内部类、成员类、局部类(本地类)、静态类、匿名类、文件类以及这些组合起来的称呼类,成员内部类,成员匿名类,成员嵌套类,匿名内部类等


1.1 顶级类

顶级类(Top Level Class)是在编译单元中直接声明的类。

A top level class is a class declared directly in a compilation unit. 1

或者说非嵌套类即为顶级类

public class Main( )
class Test( )

在一个.java 文件中直接申明的类就是顶级类,这个类不嵌套在任何其他类中。

在顶级类中如果是与文件名相同的public 类,也可称为: 文件类(File class)

  • 文件类

由于这个类与文件名直接对应,可以看作是这个文件的类,因此也可以称之为文件类。

在声明顶级类时,如果包含protectedprivate、或者static 关键字都会产生一个编译时错误。


1.2 嵌套类

        嵌套类(Nest Class)是指其声明出现在另一个类或接口声明的主体中的任何类。嵌套类可以是内部类、成员类、局部类或匿名类。

A nested class is any class whose declaration occurs within the body of another class
or interface declaration.

        嵌套类中还可以声明类,被声明的类也是嵌套类。简单的说就是:不是顶级类就是嵌套类。嵌套类声明所在的类被称为外部类。

嵌套类可分为两种:

  • 静态嵌套类(Static Nested Class
           用static修饰符声明在外部类里面的类,这个嵌套类可以不依赖与外部类实例而独立存在。
  • 内部类

1.3 静态嵌套类

         在Java中,静态嵌套类(Static Nested Class)是声明另一个类中的用Static 修饰的嵌套类。

public class OuterClass{static class StaticNestedClass { }  // 静态嵌套类
}

静态嵌套类的特点是:

  1. 可以使用static 修饰符修饰,表示这个嵌套类可以独立与外部类存在;
  2. 可以不需要外部类的实例而被直接实例化;
  3. 不能直接访问外部类的非静态成员属性和方法;
  4. 外部类需要使用嵌套类名.静态方法 来访问静态嵌套类;
  5. 编译时会将静态嵌套类编译成 OuterClass$StaticNestedClass.class 文件;
  6. 静态嵌套类常一般用于无需访问外部类成员的工具类

实际上,静态嵌套类在行为上是一个顶级类,为了封装方便,它已经嵌套在另一个顶层类中。

1.4 内部类

内部类(Inner Class)是一个嵌套类,它不是显示或隐式静态的。即非静态嵌套类即为内部类。

An inner class is a nested class that is not explicitly or implicitly static

内部类包括: 非静态成员类( non-static member class )、局部类(Local class)、匿名类(anonymous class

以下嵌套类是隐式静态的,因此不是内部类:

  • 成员枚举类( member enum class
  • 局部枚举类(local enum class
  • 成员记录类( member record class
  • 接口中的成员类(member class of an interface

内部类可以定义在块({})、构造器( Constructor )、方法( method )、初始化器( Init ializer )中

1.5 成员类

成员类( Member Class )是一个类,其声明直接包含在另一个类或接口声明的主体中。成员
类可以是普通类、枚举类或记录类

A member class is a class whose declaration is directly enclosed in the body of
another class or interface declaration

成员类可以使用static修饰,从技术角度讲成员类应该还包括静态嵌套类

1.6 局部类(本地类)

局部类( Local Class )是声明在块( Block )中的类。也就是在块( {} )、构造器( Construc tor )、方法( method )、初始化器( Initializer )中声明的类

A local class is a nested class (§8 (Classes)) whose declaration is immediately
contained by a block (§14.2).

局部类不能使用 publicprotectedprivatestatic 修饰。

1.7 匿名类

匿名类( Anonymous Class )就是没有名称的类,其名称由Java编译器给出,一般是形如:
部类名称+$+匿名类
顺序,没有名称也就是其他地方就不能引用,不能实例化,只用一
次。所有的匿名类都是内部类。

An anonymous class declaration is automatically derived from a class instance
creation expression by the Java compiler. (jls11)

匿名类不能具有显式声明的构造函数

2. 总结

  • 嵌套类:声明在类内部的类。

    • 静态嵌套类,唯一的一种静态类

    • 非静态嵌套类即为内部类

  • 成员类:位于类内部但不包括位于块、构造器、方法、初始化器内的类

  • 局部类:声明在块( {} )、构造器( Constructor )、方法( method )、初始化器( Initializer )中

  • 匿名类:类内无名称类

    • 成员匿名类
    • 局部匿名类

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

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

相关文章

百万级并发IM即时消息系统(2)

1.用户model type UserBasic struct {gorm.ModelName stringPassWord stringPhone string valid:"matches(^1[3-9]{1}\\d{9}$)"Email string valid:"email"Avatar string //头像Identity stringClientIp s…

nepctf2023 部分web复现

目录 <1> EZJAVA_CHECKIN(shiro550) <2> 独步天下-转生成为镜花水月中的王者(环境变量提权) <3> 独步天下-破除虚妄_探见真实(Venom代理&ping%0a绕过rce&c文件描述符未关闭连接父进程修改文件权限) <4> 独步天下-破除试炼_加冕成王(tp6rceu…

【Go 基础篇】Go语言数组内存分析:深入了解内部机制

在Go语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储一系列相同类型的元素。虽然数组在应用中非常常见&#xff0c;但了解其在内存中的存储方式和分配机制仍然是一个重要的课题。本文将深入探讨Go语言数组的内存分析&#xff0c;揭示数组在内存中的布局和分配…

网络协议三要素

计算机语言作为程序员控制一台计算机工作的协议&#xff0c;具备了协议的三要素。 语法&#xff0c;就是这一段内容要符合一定的规则和格式。例如&#xff0c;括号要成对&#xff0c;结束要使用分号等。语义&#xff0c;就是这一段内容要代表某种意义。例如数字减去数字是有意…

PHP 面试 - 2023

文章目录 一、排序算法 原文链接1 排序算法2 二、设计模式 23种设计模式

【Hadoop】Hadoop入门概念简介

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

spring 自定义类型转换-ConverterRegistry

1背景介绍 一个应用工程里面&#xff0c;一遍会涉及到很多的模型转换&#xff0c;如DTO模型转DO模型&#xff0c;DO模型转DTO, 或者Request转DTO模型&#xff0c;总的来说&#xff0c;维护起来还是相对比较复杂。每涉及一个转换都需要重新写对应类的get或者set方法&#xff0c…

10、监测数据采集物联网应用开发步骤(8.1)

监测数据采集物联网应用开发步骤(7) TCP/IP Client开发 在com.zxy.common.Com_Para.py中添加如下内容 #socket链接的自动链接时间,定时清除无效tcp连接 dSockList {} #本机作为客户端连接socket list dClientThreadList {} #作为客户端接收数据拦截器 ClientREFLECT_IN_CL…

ES6 新特性

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理前端技术的JavaScript的知识点ES6 新特性文件上传下载&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…

关于linux openssl的自签证书认证与nginx配置

自签文档链接 重点注意这块&#xff0c;不能写一样的&#xff0c;要是一样的话登录界面锁会报不安全 域名这块跟最后发布的一致 nginx配置的话 server {listen 443 ssl; //ssl 说明为https 默认端口为443server_name www.skyys.com; //跟openssl设置的域名保持一致s…

传送带下料口堵塞识别检测算法 yolov5

传送带下料口堵塞识别检测算法通过python基于yolov5网络深度学习框架模型&#xff0c;下料口堵塞识别检测算法能够准确判断下料口是否出现堵塞现象&#xff0c;一旦发现下料口堵塞&#xff0c;算法会立即抓拍发出告警信号。Python是一种由Guido van Rossum开发的通用编程语言&a…

【测试】笔试03

文章目录 1. 哪种测试模型把测试过程作为需求分析、概要设计、详细设计及编码之后的阶段&#xff08; &#xff09;2. 在下面所列举的逻辑测试覆盖中&#xff0c;测试覆盖最强的是&#xff1f;3. 网络管理员编写了shell程序prog1.sh,测试时程序死循环无法结束,可以通过下列方式…

OpenCV处理图像和计算机视觉任务时常见的算法和功能

当涉及到OpenCV处理图像和计算机视觉任务时&#xff0c;有许多常见的具体算法和功能。以下是一些更具体的细分&#xff1a; 图像处理算法&#xff1a; 图像去噪&#xff1a;包括均值去噪、高斯去噪、中值滤波等&#xff0c;用于减少图像中的噪声。 直方图均衡化&#xff1a;用…

CVPR2023 Deblur论文整理

Paper list 来自 https://github.com/DarrenPan/Awesome-CVPR2023-Low-Level-Vision#image-deblurring 简单用GPT翻译一下摘要 1 Structured Kernel Estimation for Photon-Limited Deconvolution Paper: Structured Kernel Estimation for Photon-Limited Deconvolution Cod…

Power BI 连接 MySQL 数据库

Power Query 或 Power BI 只提供了对 SQL Server 的直接连接&#xff0c;而不支持其它数据库的直连。所以第一次连接 MySQL 数据库时&#xff0c;就出现下面的错误信。 这就需要我们自己去安装一个连接器组件。https://downloads.mysql.com/archives/c-net/ 错误解决方案 我一…

C语言sizeof和strlen的区别?

sizeof和strlen有什么区别&#xff1f; sizeof本质是运算符&#xff08;sizoof既是关键字也是运算符&#xff0c;不是函数哈&#xff09;&#xff0c;而strlen就是函数。sizeof后面如果是类型&#xff0c;则必须加括号&#xff0c;如果是变量&#xff0c;可以不加括号。 sizeof…

【Unity】终极移动指南-注解【理解移动到抓钩,再到贪吃蛇的实现】

文章目录 【Unity】终极移动指南-注解&#xff08;从移动、抓钩到贪吃蛇&#xff09;观前提醒链接地址&#xff1a; 内容一、 transform移动操作【1】transform.position变换位置【2】transform.Translate平移【3】transform.position 类似平移的操作【4】定向矢量【5】停在指定…

定位与轨迹-百度鹰眼轨迹开放平台-学习笔记

1. 百度鹰眼轨迹的主要功能接口 百度的鹰眼轨迹平台&#xff0c;根据使用场景不同&#xff0c;提供了web端、安卓端等各种类型的API与SDK&#xff0c;本文章以web端API为例&#xff0c;介绍鹰眼轨迹的使用。 2. API使用前的准备 使用鹰眼轨迹API&#xff0c;需要两把钥匙&…

Java单元测试 JUnit 5 快速上手

一、背景 什么是 JUnit 5&#xff1f;首先就得聊下 Java 单元测试框架 JUnit&#xff0c;它与另一个框架 TestNG 占据了 Java领域里单元测试框架的主要市场&#xff0c;其中 JUnit 有着较长的发展历史和不断演进的丰富功能&#xff0c;备受大多数 Java 开发者的青睐。 而说到…

SpringBoot整合JUnit、MyBatis、SSM

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 SpringBoot整合 一、SpringBoot整合JUnit二、Spri…