Java语言程序设计——篇九(1)

news2024/11/25 16:48:19

在这里插入图片描述

     🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

内部类

  • 概述
    • 内部类—内部类的分类
      • 成员内部类
        • 实战演练
      • 局部内部类
        • 实战演练
      • 匿名内部类
        • 实战演练
      • 静态内部类
        • 实战演练

概述

内部类或嵌套类:在一个类的内部定义另一类(接口、枚举或注解)
格式:

public class OuterClass {
	//成员变量和方法
	class InnerClass{//一个内部类的定义
		//成员变量和方法
	}
 }

优点:对只在一处使用的类进行分组;提高封装性;增强代码的可读性

内部类—内部类的分类

在这里插入图片描述
按内部类是否被static修饰,分为静态的和非静态的

成员内部类

  • 是定义在外层类的类体中且没有用static修饰。
  • 说明:
    1)在成员内部类中可以定义自己的成员变量和方法,也可以定义自己的构造方法。
    2)访问修饰符可是private、public、protected或缺省。
    3)成员内部类中不能定义static变量和static方法。
实战演练
public class OuterClass {	
	private int x = 200;
	class InnerClass{
		int y = 300;
		public int calculate(){
			return x + y;
		}
	}
	public void makeInner(){
		InnerClass ic = new InnerClass();
		System.out.println(ic.calculate());
	}
	public static void main(String[] args){
		OuterClass outer = new OuterClass();
OuterClass.InnerClass inner=outer.new InnerClass();
//OuterClass.InnerClass inner = new OuterClass.new InnerClass(); 
		System.out.println(inner.calculate());//500
	}
}

生成两个文件:OuterClass.class、OuterClass$InnerClass.clss

注意:
在这里插入图片描述

局部内部类

  • 局部内部类是在方法体或语句块内定义类。
  • 在方法体或语句块 (包括方法、构造方法、局部块、初始化块或静态初始化块) 内部定义的类称为局部内部类(local inner class)。
  • 只在定义它的块内有效,同局部变量一样,在定义它的块之外不能访问,因此也不能有任何访问修饰符。
实战演练
public class OuterClass2 {
	public String x = "hello";
	public void makeInner(int param){
		final String y = "local variable";
		class InnerClass{
			public void seeOuter(){
			System.out.println("x = " + x);
			System.out.println("y = " + y);
		System.out.println("param = " + param);
			}
		}
		new InnerClass().seeOuter();
	}
	public static void main(String[] args){
		OuterClass2 oc = new OuterClass2();
		oc.makeInner(47);
	}
}

在这里插入图片描述

注意:
在这里插入图片描述

匿名内部类

  • 将类的定义和实例的创建在一起完成,或者说在定义类的同时就创建一个实例。以这种方式定义的没有名字的类称为匿名内部类(anonymous inner class)。
  • 一般格式如下:
  new TypeName(){
      继承的类名或实现接口名
     /* 此处为类体 */可覆盖超类或实现接口的方法
  }

注:匿名内部类继承类或实现接口,不需要使用extends或implement关键字。不能同时实现继承类和实现接口。内部类体中,不能定义构造方法。
赋给引用变量:

 TypeName  obj = new TypeName(){
                 定义类的同时用new关键字创建类的实例;即定义和创建对象在同一个位置
        /* 此处为类体 */
    };

直接传递给方法:

 someMethod(new TypeName() {
                构建对象作为方法调用的参数
          /* 此处为类体 */
      }
  );
实战演练

【例】匿名内部类继承Animal类,覆盖eat()方法,同时创建匿名类的实例,并用dog指向它

class Animal{
	public void eat(){
	System.out.println("I like eat anything.");
	}
}
public class AnimalTest {
	public static void main(String[] args){
		Animal dog = new Animal(){
			@Override
			public void eat(){
	System.out.println("I like eat bones.");
			}
		};
		dog.eat();
	}	
}

【例】接口Printable声明print抽象方法,在主函数中声明一个接口变量,并创建实现接口的对象

interface Printable{
	public abstract void print(String message);
}
public class PrintableTest {
	public static void main(String[] args){
		Printable printer = new Printable(){
			@Override
			public void print(String message){
				System.out.println(message);
			}
		};
		printer.print("这是惠普打印机");
	}
}
  • 匿名内部类一个重要的应用是编写JavaFX图形界面的事件处理程序
例:为button注册事件处理器

button.setOnAction(new EventHandler<ActionEvent>(){
	@Override
	public void handle(ActionEvent event){
		label.setText("你点击了确定按钮");
	}
});

静态内部类

静态内部类定义在外层类中,使用static修饰,静态内部类也称嵌套类(nested class)。
一般格式如下:

public class OuterClass {
	//成员变量和方法
	static class InnerClass{
		//成员变量和方法
	}
 }
  • 静态内部类中可以定义静态成员;
  • 静态内部类只能访问外层类的静态成员;(不具备外层类实例的应用,静态内部类方法不能使用this关键字访问外层类实例成员;但可以访问外层类的static成员)
  • 创建静态内部类的实例不需要先创建一个外层类的实例。
实战演练

【例】静态内部类实际是一种外部类

public class MyOuter {
	private static int x = 100;
	public static class MyInner{
		private String y = "hello";
		public void innerMethod(){
			System.out.println("x = " + x);
			System.out.println("y = " + y);
		}
	}
	public static void main(String[] args){
	MyOuter.MyInner snc = new MyOuter.MyInner();
		snc.innerMethod();
	}
}
public class MyOuter2 {
	String s1 = "Hello";
	static String s2 = "World";
	interface MyInterface{
		void show();
	}
	static class MyInner2 implements MyInterface{
		@Override
		public void show() {
System.out.println("s1 = " + new MyOuter2().s1);
			System.out.println("s1 = " + s2);
		}		
	}
	public static void main(String[] args){
MyOuter2.MyInner2 inner2 = new MyOuter2.MyInner2();
		inner2.show();
	}
}

博主用心写,读者点关注,互动传真情,知识不迷路

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

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

相关文章

不支持jdk8的jenkins部署jdk8项目

1、背景 目前最新的jenkins必须基于jdk8以上&#xff0c;才能安装。jenkins最新的插件部分也不支持jdk8了。 2、全局工具配置 配置一个jdk8 配置一个jdk8以上的版本&#xff0c;如jdk17 3、部署maven项目 jdk17项目 可以直接使用maven插件&#xff0c;部署。 jdk8项目 由…

Zenario CMS 9.2 文件上传漏洞(CVE-2022-23043)

前言 CVE-2022-23043 是一个影响 Zenario CMS 9.2 的严重漏洞。该漏洞允许经过身份验证的管理员用户绕过文件上传限制。具体来说&#xff0c;管理员可以通过创建一个新的带有 ".phar" 扩展名的“文件/MIME 类型”&#xff0c;然后上传一个恶意文件。在上传过程中&am…

运维锅总详解NFS

NFS是什么&#xff1f;如何对NFS进行部署及优化&#xff1f;NFS工作流程是什么&#xff1f;NFS的性能及优缺点是什么&#xff1f;NFS发展历史又是怎样的&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、NFS简介 NFS (Network File System) 是由 Sun Microsystems 在…

【最新】cudnn安装教程

最近换了新电脑需要重新安装cuda和cudnn&#xff0c;发现现在cudnn的安装比以前方便多了&#xff0c;直接在官网下载exe安装包一键运行即可。安装的时候注意cuda和cudnn的对应关系即可&#xff1a;【最新】cuda和cudnn和显卡驱动的对应关系-CSDN博客 访问cudnn下载链接cuDNN 9…

docker-compose 根据yaml拉取镜像出问题

在学习go微服务时&#xff0c;用docker-compose启动nacos以及对应的mysql时出现上面的问题&#xff0c; 使用的yaml如下 version: "3.8" services:nacos:image: nacos/nacos-server:${NACOS_VERSION}container_name: nacos-standalone-mysqlenv_file:- ../env/cust…

SpringCloud+Vue3多对多,多表联查

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

c/c++的内存管理(超详细)

一、c/c的内存分布 这是操作系统中对于内存的划分&#xff1a; 我们重点掌握以下几个区域即可&#xff1a; 1.栈 (调用函数会建立栈帧) 2.堆(动态开辟的空间) 3.数据段(静态区)&#xff1a;存放静态变量以及全局变量 4.代码段 (常量区) 先来看看一个题目&#xff1a; int…

JDK的配置

安装好JDK后&#xff0c;配置三个环境变量 第一步&#xff0c;配置JAVA_HOME. 先找到JDK的安装目录&#xff0c;然后复制路径&#xff0c;在电脑的环境变量里增添变量名为JAVA_HOME,变量值为 C:\Program Files\Java\jdk1.8.0_192。&#xff08;具体根据你的JDK安装路径&…

Lombok的认识

Lombok的作用 Lombok是一个Java库&#xff0c;它可以通过简单的注解形式来帮助开发人员简化Java代码的编写&#xff0c;特别是减少模板代码的书写。具体来说&#xff0c;Lombok的主要作用包括&#xff1a; 减少模板代码&#xff1a;Lombok可以通过注解自动生成getter、setter、…

Python——Pandas(第三讲)

文章目录 修改替换变量值对应数值的替换指定数值范围的替换 虚拟变量变换数值变量分段数据分组基于拆分进行筛选 分组汇总使用 agg 函数进行汇总引用自定义函数 长宽格式转换转换为最简格式长宽型格式的自由互转 多个数据源的合并数据的横向合并concat 命令 处理缺失值认识缺失…

【Apache Doris】3.0存算分离|标准部署篇(一)

【Apache Doris】3.0存算分离&#xff5c;标准部署篇&#xff08;一&#xff09; 一、前提概要二、环境信息三、前置准备四、FoundationDB安装五、OpenJDK 17安装六、 Meta Service安装七、集群安装八、快速体验 接上 数据架构新篇章&#xff1a;存算一体与存算分离的协同演进。…

Meta 发布Llama 3.1开源模型 NVIDIA推出AI 代工服务

在这周二&#xff0c;Meta发布了最新的AI模型Llama 3.1&#xff0c;并且是一个开源模型&#xff0c;面向公众免费提供&#xff0c;且提供8B、70B、305B参数版本&#xff0c;模型整体效果可与 GPT-4、GPT-4o、Claude 3.5 Sonnet 等领先的闭源模型相媲美。 此次Llama 3.1 系列改…

Hadoop3.3.5的安装与单机/伪分布式配置

文章目录 一、安装须知二、安装jdk三、安装shh四、安装配置hadoop五、运行hadoop 一、安装须知 本次安装的Hadoop版本为hadoop3.3.5。 在这之前完成了VMware虚拟软件的安装&#xff0c;并安装了Ubuntu22.04&#xff0c;在这基础上进行相关配置。 二、安装jdk 在Ubuntu中使用…

顺序表算法题

在学习了顺序表专题后&#xff0c;了解的顺序表的结构以及相关概念后就可以来试着完成一些顺序表的算法题了&#xff0c;在本篇中将对三道顺序表相关的算法题进行讲解&#xff0c;希望能对你有所帮助&#xff0c;一起加油吧&#xff01;&#xff01;&#xff01; 1.移除元素 2…

Lago - 使用 ClickHouse 扩展事件引擎

本文字数&#xff1a;4540&#xff1b;估计阅读时间&#xff1a;12 分钟 作者&#xff1a;Mathew Pregasen 本文在公众号【ClickHouseInc】首发 本周&#xff0c;我们欢迎来自 Lago 的一篇博客文章&#xff0c;介绍了他们如何使用 ClickHouse 扩展一个事件引擎&#xff0c;并在…

【JavaEE精炼宝库】 网络编程套接字——初识网络编程 | UDP数据报套接字编程

文章目录 一、网络编程基础1.1 网络编程的意义&#xff1a;1.2 网络编程的概念&#xff1a;1.3 网络编程的术语解释&#xff1a;1.4 常见的客户端服务端模型&#xff1a; 二、Socket 套接字2.1 Socket 套接字的概念&#xff1a;2.2 Socket 套接字的分类&#xff1a; 三、UDP数据…

24暑假算法刷题 | Day21 | LeetCode 669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树

目录 669. 修剪二叉搜索树题目描述题解 108. 将有序数组转换为二叉搜索树题目描述题解 538. 把二叉搜索树转换为累加树题目描述题解 669. 修剪二叉搜索树 点此跳转题目链接 题目描述 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪…

Mac应用快速启动器:Alfred 5 for Mac 激活版

Alfred 5 是一款专为 macOS 系统设计的效率提升工具。这款软件以其快速启动和高效操作功能著称&#xff0c;通过使用快捷键来呼出输入界面&#xff0c;用户可以快速完成各种任务。 最新版本 Alfred 5.5 引入了一些新功能。其中包括整合了 ChatGPT 和 DALL-E&#xff0c;这意味…

Map的常见API

Map的常见API Map是双列集合的顶层接口&#xff0c;它的功能是全部双列集合都可以继承使用的 Map的遍历方式 map的遍历方式(键找值) package demo3;import java.util.HashMap; import java.util.Map; import java.util.Set;public class a1 {public static void main(String…

如何优化网站以提升UX设计质量

什么叫 UX 设计&#xff1f;UX 设计&#xff0c;即用户体验设计&#xff0c;是指为提升用户体验而进行的产品设计。 UX 在设计中&#xff0c;设计师通过调查和研究用户来掌握用户的需求和喜好&#xff0c;并利用这些信息来设计产品。设计师还会测试产品&#xff0c;以确保它们能…