java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)

final关键字:

final表示最终的不可变的,在java中可以用来修饰类或方法、局部变量、成员变量。

// 1.final关键字修饰类需要放在class关键字前面,表示不可变的类,需要注意,这里表示当前类不能有子类,但是有父类,即使没有明确说明父类,也有个最顶级父类object,任何类都一个默认的父类object,其格式:修饰符 final class 类名称{}:
// 2.当final关键字修饰方法时,此方法将是最终方法,也就是说此方法不能不被覆盖重写,其格式:修饰符 final 返回值类型 方法名(参数){};
// 3.final关键字修饰局部变量时,那么这个变量将不能被改变。
// 4.当final关键字修饰成员变量时,必须手动赋值默认值。
public final class FinalKeyClass{//被final关键字修饰的类不能被继承,否则会报错}

权限修饰符:

java中有四种修饰符,从大到小依次为:public > protected > (default) > private;

同一个类中被这四种修饰符修饰过的变量都可以访问到;

同一个包中,被private修饰的变量,在另一个类中不能访问,被其他修饰符修饰的可以访问到;

继承了另一个包中的父类的类中,只有被public和protected修饰的变量可以被访问到。其他修饰的不能被访问;

不同包下没有任何关系的类中定义一个变量,只有被public修饰后,在另一个类中是可以被访问到的,其他修饰符修饰后不能被访问;

内部类:

概念:将类A定义在类B中,类A就称为内部类,B则称为外部类;内部类可以随意访问外部类中的成员,但是外部类访问内部类中的成员时需要借助内部对象。

分类:成员内部类、局部内部类(包含匿名内部类)

// 外部类InClass:
public class InClass{// 6-1.同名变量访问之-外部类成员变量定义:String str = "外部类成员变量";// 1.成员内部类定义格式:在某个类中定义一个和外部类类似的类:修饰符 class 类名称{},如:在InClass类中定义一个成员内部类:AnyClass,此时InClass则为外部类:public class AnyClass{// 6-2.同名变量访问之-内部类成员变量定义:String str = "内部类成员变量";String str2 = "内部类成员变量2";public void methodAny(){System.out.println("内部类的方法执行了");// 2.内部类中访问外部类中的成员(变量):System.out.println(say + "my name is kuhai");// 6-3.同名变量访问之-内部类局部变量定义:String str = "内部类中局部变量";// 7.访问同名变量:System.out.println(str);//内部类中局部变量System.out.println(this.str);//内部类成员变量System.out.println(InClass.this.str);//外部类成员变量System.out.println(str2);//内部类成员变量2};};// 定义一个外部类的成员变量:private String say = "hello,";// 定义一个外部类的方法:public void methodIn(){System.out.println("外部类的方法执行了");// 3.内部类的使用:分间接使用和直接使用:// 间接使用内部类:在外部类的方法中创建一个内部类的对象,并调用内部类中的方法,在外部类的对象中使用外部类的这个方法即可:AnyClass anyObj = new AnyClass();anyObj.methodAny();// new AnyClass().methodAny();这里可以使用匿名对象代替上面两行代码,利用匿名对象的一次性,可以结合方法,每调用一次方法就会创建一次匿名对象// 8.定义局部内部类格式:在外部类方法中定义类,如:class AnyInClass{//注意:局部内部类无权限修饰符修饰;外部类只能使用public、default;成员内部类四种权限修饰符都可以使用;int num = 5;/*num = 7;java8+开始,局部内部类中访问某个变量时,这个变量应该是保持不变的,实际上是用final关键字修饰的,但是这里可以省略,只要保证值不变即可。局部变量是在方法中,而方法是在栈内存中,因此局部变量也是在栈内存中,当方法运行结束后就会出栈,局部变量也跟着消失;new出来的东西会在堆内存中,堆内存中的东西要等垃圾回收后才消失,这里new出来的对象用到局部变量时,会复制局部变量及值,即使方法出栈局部变量消失,这里的对象依旧可以使用复制的值运行,但是这个值不能改变*/public void anyinmethod(){System.out.println("局部内部类变量:"+num);//局部内部类变量:5};};// 9.局部内部类中只能自己访问自己的局部变量或在当前方法中再创建一个局部内部类的对象来使用,如:AnyInClass anyinobj = new AnyInClass();anyinobj.anyinmethod();System.out.println(anyinobj.num);//5/*总结:内部类访问变量的规则:先在当前作用域查找是否有变量,有的话就访问,没有的话则向上继续查找,没有则报错;·   局部变量访问规则:局部变量只能在它的方法内使用,超出方法就不能使用了;局部内部类访问规则:在局部内部类中访问或在局部内部类所在方法中创建局部内部类的对象访问;·   访问内部类的同名变量格式:this.变量名;·   访问外部类的同名变量格式:外部类名.this.变量名;·   */};
}
// 定义Myinterface接口:
public interface Myinterface{public abstract void methodinterface();
};
// 定义创建一个外部类对象的类:
public class InClassObj{public static void main(String[] args){// 4.创建外部类的对象并调用外部类中的方法间接的使用内部类的成员:InClass inClassObj = new InClass();inClassObj.methodIn();//当执行此文件后可以看到执行的结果:// 外部类的方法执行了// 内部类的方法执行了// hello,my name is kuhai// 内部类中局部变量// 内部类成员变量// 外部类成员变量// 内部类成员变量2,说明间接使用内部类成功了// 5.直接使用内部类:直接使用内部类中的成员是有固定格式的,其格式为:外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();如:InClass.AnyClass inClassObj2 =new InClass().new AnyClass();inClassObj2.methodAny();//运行结果如下:// 内部类的方法执行了// hello,my name is kuhai// 内部类中局部变量// 内部类成员变量  // 外部类成员变量  // 内部类成员变量2,说明直接使用内部类成功了// 10.匿名内部类定义格式:接口名称 对象名 = new 接口名称(){注意:需要覆盖重写接口中所有抽象方法},这一句大括号中的内容被称为匿名内部类;直接new接口会报错,但是给接口定义实现类又显得麻烦,可以使用匿名内部类代替接口实现类,常用于只创建一次对象的情况,如:Myinterface obj = new Myinterface(){@Overridepublic void methodinterface(){System.out.println("匿名内部类中覆盖重写接口中的方法执行了");//匿名内部类中覆盖重写接口中的方法执行了};};// 11.使用匿名内部类:obj.methodinterface();//当然这里可以省略对象名直接在大括号面通过.访问,如:new Myinterface(){}.methodinterface()};
};

在这里插入图片描述

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

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

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

相关文章

python安装后无法使用_Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)...

在终端通过pip装好包以后,在pycharm中导入包时,依然会报错。新手不知道具体原因是什么,我把我的解决过程发出来,主要原因就是pip把包安装到了“解释器1”,但我们项目使用的是“解释器2”。我们新手怕字多,所…

03-sizeof的用法

1、作用 sizeof运算符是C语言特有的运算符。 用来计算一个变量或者一个常量、一种数据类型在内存中所占的字节数。 2、基本形式 (1) sizeof (变量或常量) (2) sizeof 变量或常量 (3) sizeof(数据类型) (4) 不能是sizeof 数据类型, 即计算数据类型的字节数必须用小括号括起来 实…

【Python3】POP3协议收邮件

初学Python3,做一个email的例子,虽然知道做的很渣渣,还是分享一下吧POP3协议POP3全称Post Official Protocol3,即邮局协议的第三个版本,它规定了怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议&…

发红包案例(RedPacketFrame简介)

发红包案例: 案例目录结构如下(red包为第三方包,需要的话可以到网上自行下载或私信我邮箱即可): // 1.这里将借用发红包的框架:RedPacketFrame(图形界面化),OpenMode处…

easy connect 获取服务端配置信息失败_如何统计 Mysql 服务器状态信息?

最近在看《高性能的 Mysql》一书,下面是关于如何学习统计 Mysql 服务器状态的学习总结,主要是学习使用 SHOW STATUS,SHOW ENGINE INNODB STATUS,SHOW PROCESSLIST,SHOW PROFILE 四个命令。命令一:SHOW STAT…

实现线段切割法_切割晶圆及玻璃产品的现代技术与设备

作者:韩卓申科VS1,2,伊凡诺夫VI3,吕鸿图2,4,纳乌莫夫A S2,4,王薇媛4摘要:由于需以各种非金属半导体材料晶圆制造使用价值低之微电子产品,对其加工高精度及品质改善的要求更为严苛,因…

学python最重要的是_Python学习,要选哪个版本?

纵观各大编程语言在 2017 年的发展情况,我们会发现涌现出诸如 Go、Swift 这类后起之秀,而其中最为耀眼的当属 Python。之所以 Python 如此受捧,不仅仅是人工智能、数字科学领域的兴起,而且与其自身的特性必不可分,正应…

cefsharp 加载网页慢_网站访问慢的排查方案(史上最详细)

说实话,比起网站打不开,网站访问慢更让人抓狂。因为造成网站访问慢的因素太多了,一般用户根本无从下手!任他千头万绪的问题,从以下三个方面入手,也能轻松破解访问慢的大难题 :响应时间、执行时间…

typescript语法高亮插件_vscode常用插件

插件介绍HTML Snippets > 初级H5代码片段及提示HTML CSS Support > 初级H5代码片段及提示Debugger for Chrome > 让 vscode 映射 chrome 的 debug功能,静态页面都可以用 vscode 来打断点调试jQuery Code Snippets > jquery 重度患者必须品,废…

cfree运行程序错误_C/C++程序调试和内存检测

程序出现错误很正常,一个优秀的程序员必须学会调试,发现错误并改正。减少程序错误最有效的方法是:在敲代码之前,多花点时间思考,如何构造程序,数据结构和算法,尽量把细节提前写下来,…

session的removeattribute移除一个不存在的属性会怎么用_公认峡谷机制最完美,对线几乎无解,夏侯惇高端局为何火不起来?...

Hello各位亲爱的小伙伴们,大家好,我是沐辰。在王者荣耀中始终有这么一个说法:“夏侯惇是王者峡谷机制最完美的英雄”,当然这个可不是沐辰胡编乱造,而是策划在数年前就曾公开发表过的看法。从机制上来,夏侯惇…

python图标的演变_python day 22 CSS拾遗之箭头,目录,图标

lanxing4. CSS拾遗之箭头画法.up { border-top: 30px solid green; border-right: 30px solid transparent; border-bottom: 30px solid transparent; border-left: 30px solid transparent; display: inline-block; } .down { border-top: 30px solid transparent; border-rig…

PHP中生成UUID

一、什么是UUID 简单的说UUID就是一串全球唯一的(16进制)数字串。 UUID的全拼为“Universally Unique Identifier”,可以译为“通用唯一识别码”。UUID由开源软件基金会 (Open Software Foundation, OSF) 定义,是分布式计算环境 (Distributed Computing …

岗位po是什么意思_面试时,面试官问你有什么优点和缺点?应该如何巧妙的回答?...

工作多年,被面试过很多次,也面试过很多人,其中有一次印象最深刻,这次我不是主面试官,经理要面试一个候选人,他就拉上了我,作为陪衬,用经理的话说就是撑撑场面, 所以问题的…

java中Collection集合、Iterator迭代器接口、for each循环遍历集合或对象

Collection集合: 概念:集合是java中提供一种存储多个数据的容器;数组也是存储数据的容器,集合和数组的区别就是集合的长度可以改变,而数组的长度不可以改变;集合可以存储多种类型的对象数据,而数组只能存储…

工业镜头选型计算公式_变压器分接开关选型指南

如何选择变压器适用的分接开关型号?选型中又有哪些值得注意的事项呢?小编特别整理提炼了分接开关选型指南,让我们一起来看一下。分接开关的产品型号示例如下:型号中的各项参数和规格可通过以下步骤计算确定:1、确定调压…

icmp端口_pingtunnel搭建icmp隧道

说明pingtunnel可以将udp、tcp、sock5流量伪装成icmp传输,地址:https://github.com/esrrhs/pingtunnel/,详细说明和用法可参考官方说明。示例图客户端运行在攻击机,服务端运行在受害机。情况如下:通过pingtunnel搭建一…

node中使用短信验证功能(阿里云为例)

一、选择短信平台 短信平台有很多,这里我选择阿里云,详细步骤如下: 进入短信控制台,对要发送的短信格式进行配置,如果没有签名,需要申请签名后操作(注意:需要自己已有阿里云账号且实…

如何画圆柱_什么是最速降线?如何来验证一下呢?这里用SolidWorks来试一试

一个仅受重力的物体,从一个点出发,沿着一条没有摩擦的斜坡滚动到另外一个点。肯定有一个斜坡使物体运动的时间最短。这个斜坡所在的曲线就是“最速降线”。关于这个最速降线是怎么计算出来,我并不知道,但是他有一个结论&#xff0…

根据用户id查询菜单列表(菜单权限问题)

根据用户id查询菜单列表(菜单权限问题): 最高级用户菜单效果图: 较低级别用户菜单效果图: SQL语句分析图: 根据用户id查询对应菜单(权限)SQL语句: SELECT * FROM us…