java类总结_Java类的高级用法总结

2023-10-27

马上就要进入10月中旬了,距离开学已经过去整整一个半月了,想想大四的学长学姐们的忙碌的生活,我似乎也感受到了他们内心的躁动,但要淡定,学东西就是要沉住气,今天先来梳理梳理Java类的高级用法

主要内容:

1、final关键字

2、抽象方法及抽象类

3、接口

4、对象数组

5、内部类

final

1、定义基本数据类型时,可在构造块和构造方法中进行初始化;

2、 当父类不允许子类重写某个方法时,可将此方法声明为final类型,如所有object子类都可以继承toString方法或equals方法,但不允许继承getClass方法。

3、 final修饰的方法可以被子类继承,子类虽然不能重写父类中的final方法,但是可以重载该方法。

4、不能使用final修饰构造方法;private和static修饰的方法是隐式的final方法。

抽象类与抽象方法(abstract)

1、 Java中的所有对象都是通过类来描绘的,但是并非所有的类都是用来描述对象的。

2、 抽象类可以不含有抽象方法,也可以含有一个或多个抽象方法,若一个类含有抽象方法,这个类必须声明为抽象类,即抽象类中可以包含抽象方法和非抽象方法,而普通类只能包含非抽象方法。

4、 抽象类可以定义构造方法,子类构造方法隐含super()即先执行父类构造方法,再执行子类构造方法。

5、 抽象类不能调用自身构造方法创建对象,必须通过子类继承后,由子类创建对象,而普通类可以调用自身构造方法创建对象。

6、 若一个类继承了抽象类,那么子类必须实现所有的抽象方法,才可以声明子类为非抽象类,否则子类也必须声明为抽象类。

7、

接口(interface)

1、 接口是由全局常量和抽象方法组成的,系统会默认将属性定为public static final ,而将方法默认定义为public abstract。

2、 接口和抽象类:继承(extends)是针对相同类型的,接口可以一对多,但抽象类只能一对一,实现则只能通过子类实现(implements)抽象类或者接口

3、 接口没有构造方法,继承接口后必须将接口中的定义的所有抽象方法实现,子类通过implements实现接口

4、

对象数组

类名 对象数组名称[ ]= new 类名[数组长度]

class sc{

private String name;

public sc(){

}

public sc(String name){

SetName(name);

}

public void SetName(String name){

this.name=name;

}

public String getName(){

return name;

}

}

public class School {

public static void main(String []aegs){

sc schooll[]=new sc[4]; //这里就是对象数组的示例

schooll[0]=new sc("中国人民大学");

schooll[1]=new sc("TSHing");

schooll[2]=new sc("HELLO");

schooll[3]=new sc("AND YOU");

for (sc s:schooll){

System.out.print(s.getName()+" \n");

}

}

}

内部类

1、 局部内部类在外部类中所处的位置不同,可将内部类分为局部内部类和成员内部类、匿名内部类 其中成员内部类可以分为:实例内部类、静态内部类

FnGHTColo0bZ-3MYjpbYwxWBqynF

成员内部类:

2、 非静态内部类(实例内部类)必须有定义它的外部类的对象实例存在的情况下才能创建。

3、 顶级类只有两种访问控制权限(public和默认),内部类有4中访问权限:public、protected、默认的和private。

4、 对于非静态内部类(实例内部类) 以上图为例:在外部类的非静态方法中可以通过实例内部类(非静态内部类)实例化后直接访问内部类的方法,但在外部类的静态方法中却要通过创建外部类实例创建内部类实例才能访问内部类的方法。

5、 在实例内部类中可以访问外部类的所有成员,包括私有成员;但在外部类中,不能直接访问内部类的成员,需要通过内部类的实例去访问。

6、 对于静态内部类:既可以声明非静态成员,也可以声明静态成员。(非静态内部类只能声明非静态成员)

7、 静态内部类可以直接访问外部类的静态成员,但需要通过外部类的实例访问外部类的非静态成员.

成员内部类小结:静态的各自都有联系,非静态的也各自有联系,但静态与非静态之间则需要追查到顶级类才能确认关系。(涉及类在虚拟机内存中的位置问题)

局部内部类

局部内部类是指定义在方法体内的内部类,局部内部类仅在该方法中有效,故局部内部类无法被外部类以外的其他类访问,故局部内部类不需要访问控制符和static修饰符的。

1、 局部内部类不能定义static成员,可以访问外部类的所有成员包括私有成员。

2、 若局部内部类定义在静态方法体中,局部内部类不能直接(但可通过外部类实例)访问外部类的非静态成员,但可以直接访问外部类的静态成员。

3、 局部内部类只能访问所在方法的final类型的参数或变量。就算方法撤销了,内部类仍可访问final类型的变量

下面是上述加粗原因说明MAGUIHAI的新浪博客:

一、为什么匿名内部类参数必须为final类型 ?

​ 从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自然的。

​二、 困难在何处?到底难在哪儿?

​主要是考虑到局部变量的生命周期与局部内部类的对象的生命周期的不一致性! ​

设方法f()被调用,从而在它的调用栈中生成了变量i,此时产生了一个局部内部类对象inner_object,它访问了该局部变量i

.当方法f()运行结束后,局部变量i就已死亡了,不存在了.但是局部内部类对象inner_object还可能

一直存在(只能没有人再引用该对象时,它才会死亡),它不会随着方法f()运行结束死亡.这时就会出现了一个”荒唐”结果:局部内部类对象inner_object要访问一个已不存在的局部变量i!

​三、 如何才能实现呢?

当变量是final时,通过将final局部变量”复制(copy)”一份,复制品直接作为局部内部中的数据成员.这样,当局部内部类访问局部变量时,其实真正访问的是这个局部变量的”复制品”(即:这个复制品就代表了那个局部变量).因此:当运行栈中的真正的局部变量死亡时,局部内部类对象仍可以访问局部变量(其实访问的是”复制品”),给人的感觉:好像是局部变量的”生命期”延长了.

四、​那么,现在的核心的问题是: 怎么才能使得访问”复制品”与访问真正的原始的局部变量,其语义效果是一样的呢?

​1、当变量是final时,若是基本数据类型,由于其值不变,因而:其复制品与原始的量是一样.语义效果相同.(若:不是final,就无法保证:复制品与原始变量保持一致了,因为:在方法中改的是原始变量,而局部内部类中改的是复制品)。

2、​当变量是final时,若是引用类型,由于其引用值不变(即:永远指向同一个对象),因而,其复制品与原始的引用变量一样,永远指向同一个对象(由于是final,从而保 证了它只能指向这个对象,再不能指向其它对象),达到了局部内部类中访问的复制品与方法代码中访问的原始对象,永远都是同一个,即:语义效果是一样的.否则,当方法中改原始变量,而局部内部类中改复制品时,就无法保证复制品与原始变量保持一致了(因此,它们原本就应该是同一个变量.)。

匿名内部类

1、 匿名内部类没有构造方法,但是可以调用父类的构造方法。

2、 匿名内部类可以访问外部类的所有成员,但匿名内部类定义在方法之中时,只能访问方法中的final类型的参数或局部变量。

内部类编译后生成字节码(.class)的命名规则

一个源文件可以包含多个类,在编译时,JVM将会对所有的类生成独立的字节码文件,但在内部类中时,一个类中可以包含多个类或是多类之间的嵌套关系,那么生成的类名也是有规律的,

成员内部类的字节码命名格式:

外部类名$内部类名.class

其中外部类名指的是成员内部类所在的外部类编译后的完整命名。

局部内部类的字节码命名格式:

外部类名$n局部内部类名.class

其中的n表示此局部内部类名称第几次出现,从1开始编号。

匿名内部类字节码命名格式

外部类名$n.class

其中的n表示此匿名内部类名称第几次出现,从1开始编号。

小结

写博客的感觉就像是在生产一样工艺品似的,不知不觉时间就这么流逝了,青春莫等闲,铁杵磨成针。唔到一个道理:先解决到手上的东西,再去扩展,又学到了一点点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java类总结_Java类的高级用法总结 的相关文章

  • usb描述符以及传输方式

    lsusb命令 Bus 002 表示第2个usb主控制器 Device 002 表示系统给usb鼠标分配的设备号 ID 8087 8002 Intel Corp 表示usb设备的ID 这个ID由芯片制造商设置 可以唯一表示该设备 8087
  • 洛谷P5731 【深基5.习6】蛇形方阵

    include
  • 电脑itunes,iTunes

    Music TV and podcasts take center stage iTunes forever changed the way people experienced music movies TV shows and podc
  • 内存管理之分段与分页

    内存管理之分段与分页 转载自多名技术分享者 仅供参考 第一篇 要理解分段和分页 那么得理解为什么会出现分段和分页的技术 首先 这两个技术都是为了利用和管理好计算机的资源 内存 在分段这个技术还没有出现之前 程序运行是需要从内存中分配出足够多
  • 【Verilog】Verilog定义二维数组(2D Array)

    目录 定义的种类 第一种 赋值方法 第二种 赋值方法 第三种 赋值方法 定义的种类 首先看几组定义类型 第一种 定义一个位宽为8的 data1 reg 和 data2 wire 的变量 reg 7 0 data1 wire 7 0 data
  • java.io.IOException: InvalidResourceRequestException: Invalid resource request

    1 背景 做一次kylin计算选择mr进行计算cube 但是报错 首先是 这一报错 报错打开是 yarn上的原因为 2019 05 09 15 07 38 495 ERROR Thread 52 org apache hadoop mapr
  • R文本挖掘之五情感分析

    本文是转载 原文地址 CSDN R语言做文本挖掘 Part5情感分析 Part5情感分析 这是这个系列里面最后一篇文章了 其实这里文本挖掘每一个部分单拎出来都是值得深究和仔细研究的 我还处于初级研究阶段 用R里面现成的算法 来实现自己的需求
  • java 多线程 并发实例_java编程多线程并发处理实例解析

    本文主要是通过一个银行用户取钱的实例 演示java编程多线程并发处理场景 具体如下 从一个例子入手 实现一个银行账户取钱场景的实例代码 第一个类 Account java 账户类 package cn edu byr test public
  • ctfshow-Misc入门 图片篇(50-60)

    八神出的misc入门系列 misc57 59做的比较晚了 本来想着等解了misc61一块发wp的 忙着比赛和推免就忘了 今天看到群里有人用g4 的工具一把梭了才想起来这个事 misc61等能把原理讲清楚了再发 图片篇 图片篇 颜色通道 mi
  • 经典运放电路详细分析(模拟电子技术)

    运放电路 何为运放电路 由运算放大器组成的电路 简称为运放电路 这些电路可以说是五花八门 是我们学习模拟电子技术的一个重要内容 更是一个电子工程师必须掌握的电路之一 运放电路有多种类型 是不是我们把它们牢牢记住就行了呢 显然不是啦 作为知识
  • Excel打开csv文件时中文内容显示为乱码或问号的解决办法

    有同事遇到这样一个问题 就是打开csv文件后 里面的中文显示乱码或者问号 网上找了很久 没有找到有效的解决方法 改非Unicode编码 windows显示语言 office显示语言都没有用 随后自己研究了一下 发现只要改一个地方就可以正常显
  • JWT校验

    JWT JSON Web Token 的缩写 由三部分组成 Header 头部 Payload 负载 Signature 签名 随着技术的发展 分布式web应用的普及 通过session管理用户登录状态成本越来越高 因此慢慢发展成为toke
  • 特征选择和特征理解

    特征选择和特征理解 特征选择 排序 对于数据科学家 机器学习从业者来说非常重要 好的特征选择能够提升模型的性能 更能帮助我们理解数据的特点 底层结构 这对进一步改善模型 算法都有着重要作用 特征选择主要有两个功能 减少特征数量 降维 使模型
  • Java List与ArrayList

    目录 List的介绍 什么是List List的使用 ArrayList与顺序表 ArrayList简介 ArrayList的使用 ArrayList的常见操作 ArrayList的扩容机制 ArrayList的模拟实现 List的介绍 什
  • 安卓绕过隐藏api限制

    安全设置 出于测试目的 Google 内置了一种在给定 Android 设备上全局禁用隐藏 API 限制的方法 标题为如何启用对非 SDK 接口的访问的问题中链接中的部分 说如下 您可以通过使用以下 adb 命令更改 API 强制策略来启用
  • 云上城之个服务器维护时间,云上城之歌幻乐之城开服时间表_云上城之歌新区开服预告_第一手游网手游开服表...

    今日开服 15 00 三十八区苍炎之门 已经开服 2021 08 10 10 00 三十八区巨石林野 已经开服 2021 08 09 15 00 三十八区荧光要塞 已经开服 10 00 三十八区雷神圣所 已经开服 2021 08 07 10
  • springboot 读取配置报错java.lang.IllegalArgumentException: Could not resolve placeholder ‘xxx.xxx‘

    springboot 读取配置报错java lang IllegalArgumentException Could not resolve placeholder xxx xxx 代码中写的是 Value xxx xxx 由于配置文件中没有
  • 协同无法关闭的问题之一

    StartCoroutine 方法名 和StartCoroutine 方法名 是不一样的 用StartCoroutine 方法名 无法用StopCoroutine 方法名 关闭协同 但是StartCoroutine 方法名 就可以用Stop
  • spdlog同时输出到控制台和文件中,可设置文件大小及数目,define方式

    因为自己想要个题目那种效果的 又没找到很符合的博客 就整合了下大佬们的博客封了个 具体的内容都放到代码注释里了 我这个目前在windows下只能将log文件创建到exe所处的目录中 暂时仍未解决该问题 欢迎大佬指正 已解决 直接将文件名设置

随机推荐

  • acwing 博弈论 拆分-Nim游戏

    include
  • 安装最新版Calico

    准备calico yaml 进入calico网站 Install Calico networking and network policy for on premises deployments 找到 Install Calico gt K
  • Android 对data/data/(your packagename)目录下的数据读写、删除操作

    一 数据存储 App自身的数据存储在 data data packagename 目录下 大致结构如下图 Activity提供了getCacheDir 和getFilesDir 方法 getCacheDir getAbsolutePath
  • qt std::cout 中文乱码

    char out 输入操作 r n std cout lt lt out QString qOut 输入操作 r n std cout lt lt qOut toStdString std cout lt lt qOut toStdWStr
  • python3---情感分析(基于词典中文)

    写在前面 现有的情感分析比较常用的有两种 分别是基于词典的和机器学习 前者也属于非监督学习 后者自然一般属于监督学习 刚开始学情感分析 下面先从 基于词典的情感分析 开始进行 词典 我东搜西找找到了一些感觉是常用的字典 主要有 台湾大学NT
  • 2.NanoPi M1(全志H3)的GPIO控制总结(内核驱动)

    开发环境 VM Ubuntu 编译环境 linux3 4 交叉编译工具 arm linux gcc 4 4 3 GPIO内核驱动程序链接 https download csdn net download ddffyhg 11022291 用
  • ABAP DOI 下载SMW0的EXCEL和WORD模板

    用 FUNCTION SAP OI LOAD MIME DATA 下载SMW0的模板 用METHOD LR PROXY gt OPEN DOCUMENT FROM TABLE 打开模板 没找到和ole一样先下载 在打开的方法 SMWO上载模
  • 用正则表达式爬豆瓣电影数据

    学了正则表达式后 简单的用它来爬取豆瓣网的数据 import re from urllib request import urlopen def getPage url 获取网页的字符串 response urlopen url retur
  • STL_set——set::find

    Reference Returns an iterator addressing the location of an element in a set that has a key equivalent to a specified ke
  • 酷比魔方AI慧读器评测 – 实用,值,但不够智能

    转自 https post m smzdm com p ar07qo8x 前段时间在网上看到了酷比魔方AI慧读器的宣传 说是可以让孩子爱上阅读 还可以教会孩子正宗的伦敦腔英语 真的让人很好奇这是一款什么样的神奇产品 正好4月份是小侄子三岁的
  • 使用具有OpenCV和Tesseract的Raspberry Pi光学字符识别(OCR)

    了解如何使用Tesseract和OpenCV通过Raspberry Pi相机从PDF等图像中提取文本 在本教程中 我将向您展示如何使用光学字符识别通过Raspberry Pi相机和Raspberry Pi从图像中提取文本 Pi相机将捕获图像
  • CentOS6.8环境下,通过docker创建Anaconda3容器的基础使用

    目录 一 主要步骤 1 查找docker里评分最高的Anaconda 2 拉取下来 3 运行Anaconda虚拟容器 并挂载 4 进入容器后 创建虚拟环境 5 进入虚拟环境 6 进入虚拟环境后 就可以下载自己所需要的第三方库了 7 执行相关
  • 图形图像学习随笔:计算机图形学的一些基本概念

    本文内容摘抄于 计算机图形学的概念 一 计算机图形学的范畴 1 图形主要分为两类 一类是基于线条信息表示的 如工程图 等高线地形图 曲面的线框图等 另一类是明暗图 也就是通常所说的真实感图形 2 计算机图形学利用计算机建立图形所描述的场景和
  • Django小结02

    1 数据库设置 1 打开myproject settings py 配置mysql数据库 需要添加密码 默认端口3306 在myproject init py中 import pymysql pymysql install as MySQL
  • 自动化Playwright专题汇总

    文章目录 序言 一 特性 1 测试和自动化框架 2 支持所有主流浏览器 3 快速可靠的执行 4 强大的自动化功能 5 自动化工具对比 在这里插入图片描述 https img blog csdnimg cn 97189e12b617477a8
  • 多线程爬取百度关键字结果,并获取真实url

    项目目的 练习 项目要求 根据给定的关键字 检索百度的结果 将结果保存到文件中 遇到问题 1 python list取值问题 有些看不清晰的 用for index item in enumerate array 查看 2 选取想要的元素 两
  • Linux系统磁盘扩容

    本机为CentOS7 9 在虚拟机环境下给Linux系统磁盘扩容 直接添加硬盘无法使用 还需要在系统内部有磁盘挂载操作 给虚拟机添加磁盘 查看系统盘分区类型 root Para110 fdisk dev sda 列出系统分区 欢迎使用 fd
  • springboot框架主要用来做什么?

    Spring Boot是一个开源的Java框架 主要用于简化和加速基于Java的应用程序的开发 它提供了一套开发工具和约定 使得构建独立 可执行的 生产级别的Spring应用变得更加容易 Spring Boot的主要目标是简化Spring应
  • 华夏相机/臻识相机车牌识别器同LED屏幕语音对接以及javaDemo

    上篇文章说过在本地买的华夏相机T83因为当地的销售人员只懂安装 一点技术支持也给不了 导致语音 屏幕 均不能实现自己想要的功能 自定义修改文字 语音播放余额等 经过自己进一步的研究发现 这个led屏幕和语音只需要自己买一块几十块的主板更换上
  • java类总结_Java类的高级用法总结

    马上就要进入10月中旬了 距离开学已经过去整整一个半月了 想想大四的学长学姐们的忙碌的生活 我似乎也感受到了他们内心的躁动 但要淡定 学东西就是要沉住气 今天先来梳理梳理Java类的高级用法 主要内容 1 final关键字 2 抽象方法及抽