13.Java面向对象----嵌套类

news/2024/11/25 19:38:18/

Java面向对象—嵌套类、内部类、匿名类

一、static静态

在《Java编程思想》有这样一段话:
  “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
  这段话说明了static方法的特殊之处,也看出static关键字的基本作用,简而言之,一句话来描述就是:
  方便在没有创建对象的情况下来进行调用(方法/变量)。
很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。

  1. static修饰的变量:在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员。注意,static只能修饰成员变量,不可以修饰局部变量。
	public String name;public static int age;
		Student s=new Student();s.name="张三";s.age=12;Student s1=new Student();s1.name="李四";s1.age=15;System.out.println(s.name+"今年"+s.age+"岁了");System.out.println(s1.name+"今年"+s1.age+"岁了");

在这里插入图片描述

量为静态变量时,那么它的值是存储在内存的静态区中,所以赋值时会变成一个值。

  1. static修饰的方法:static的另一个作用,就是修饰成员方法。static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,避免了先要new出对象的繁琐和资源消耗,我们可能会经常在帮助类或工具类中看到它的使用。
	public static void say() {System.out.println("我是一名学生");}
	Student.say();

在这里插入图片描述
静态方法时,那么它可以直接使用类名获取方法,main方法是我们常见的静态方法。

二、嵌套类

在 Java 语言中允许在另外一个类中定义一个类,这样的类被称为嵌套类。包含嵌套类的类称为外部类,也可以叫做封闭类,在本文中统一叫做外部类。

//学生类
public class Student {//优等生类class kind{}}

嵌套类分为两类:

  • 静态嵌套类:使用static声明,一般称为嵌套类。
  • 非静态嵌套类:非static声明,一般称为内部类。
//学生类
public class Student {public String name;public static int age;//优等生类static class kind{String techang;}//普通生类class weak{String youdian;}}
		Student.kind k=new Student.kind();k.techang="唱歌";System.out.println(k.techang);

嵌套类是它的外部类的成员,非静态嵌套类(内部类)可以访问外部类的其他成员,即使该成员是私有的。而静态嵌套类只能访问外部类的静态成员。

嵌套类作为外部类的一个成员,可以被声明为:private,public,protected或者包范围(注意:外部类只能被声明为public或者包范围)。

嵌套类特点:

  • 嵌套类可以访问外部类的所有数据成员和方法,即使它是私有的。
  • 提高可读性和可维护性:因为如果一个类只对另外一个类可用,那么将它们放在一起,这更便于理解和维护。
  • 提高封装性:给定两个类A和B,如果需要访问A类中的私有成员,则可以将B类封装在A类中,这样不仅可以使得B类可以访问A类中的私有成员,并且可以在外部隐藏B类本身。
  • 减少代码的编写量。

1、静态嵌套类
静态嵌套类其实就是在顶级类中封装的一个顶级类,它的行为和顶级类一样,它被封装在顶级类中其实就是为了方便打包。

  • 静态嵌套类是外部类的静态成员,它可以直接使用外部类名.静态嵌套类名访问自身。
  • 它可以访问外部类的静态成员和静态私有成员。
  • 与其他类一样,静态嵌套类不能访问非静态成员。
//学生类
public class Student {public String name;public static int age=12;//优等生类static class kind{String techang;static void say() {System.out.println(age);}}//普通生类class weak{String youdian;}}
Student.kind.say();

2、非静态嵌套类
非静态嵌套类也就是内部类,它有以下几个特点:

  • 实例化内部类必须先实例化一个外部类。
  • 内部类实例与外部类实例相关联,所有不能在内部类中定义任何静态成员。
  • 内部类是非静态的。
  • 非静态嵌套类包括:成员内部类、局部内部类、匿名内部类

成员内部类:
在外部类中并且在外部类的方法外创建的非静态嵌套类,称为成员内部类。说白了成员内部类就是外部类的一个非静态成员而已。
创建成员内部类的实例,你必须先实例化一个外部类,接着,通过外部类的实例来创建成员内部类的实例。因此成员内部类的实例必须存在于一个外部类的实例中。另外,由于内部类的实例与外部类的实例相关联,因此它不能定义任何静态成员。

局部内部类:
局部内部类(Local inner class)通常定义在一个块中。所以通常你会在一个方法块中找到局部内部类。正如局部变量那样,局部内部类的作用域受到方法的限制。它可以访问外部类的所有成员,和它所在的局部方法中所有局部变量。如果你想调用局部内部类中的方法,你必须先在局部方法中实例化局部内部类。

局部内部类限制:

  • 无法从方法外部调用局部内部类
  • 局部内部类不能被声明为private, public, protected
  • 在JDK1.7之前局部内部类不能访问非final的局部变量,但是在JDK1.8及之后是可以访问非final的局部变量的。

匿名内部类:
匿名内部类,可以理解为不需要声明类的对象,直接使用类的内容。
在使用匿名内部类的过程中,我们需要注意如下几点:

  • 使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
  • 匿名内部类中是不能定义构造函数的。
  • 匿名内部类中不能存在任何的静态成员变量和静态方法。
  • 匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
  • 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

http://www.ppmy.cn/news/43174.html

相关文章

SadTalker项目上手教程

背景 最近发现一个很有趣的GitHub项目SadTalker,它能够将一张图片跟一段音频合成一段视频,看起来毫无违和感,如果不仔细看,甚至很难辨别真假,预计未来某一天,一大波网红即将失业。 虽然这个项目目前的主要…

【系统集成项目管理工程师】信息系统集成专业知识

信息系统集成专业技术 一 信息系统建设 1 信息系统生命周期 立项阶段:即概念阶段或需求阶段,这一阶段根据用户业务发展和经营管理的需要,提出建设信息系统的初步构想,然后对企业信息系统的需求进行深入调研和分析,形…

servlet处理数据输入到数据库与输出数据+list输出-----web应用与开发

实验名称 JSP访问数据库的应用 实验内容 使用MVC模式。视图部分由两个JSP页面构成,其中一个页面(insert.jsp)负责提供输入学生信息(学号、姓名、性别、年龄、所在系)的视图,即用户可以在该页面输入要添加的记录,然后将要添加的记录提交给servlet。Servlet负责插入记录…

ZNS 架构实现 : 解决传统SSD问题的高性能存储栈设计

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 2.2 ZNS 的架构实现 先看看 支持zone 存储的 SMR HDD 以及 支持 zonefs 的 nvme ssd 的整个存储栈形态 其中对…

鼎捷T100制造之工艺工单实战(其他工艺补充)

文章目录 一、网状工艺二、平行工艺三、替代工艺四、返工工艺五、无顺序工艺一、网状工艺 网状工艺类似一张网状结构。可以包含平行和线性工艺等于一体。 网状工艺: 产品结构 aeci004:建立作业 aecm200: 工艺路线维护

了解HTTP与HTTPS以及SSL

HTTP协议是超文本传输协议(HyperText Transfer Protocol)的缩写,它是一种基于TCP协议的应用层传输协议,用于在客户端和服务器之间进行数据交换的一种规则。 HTTP协议的主要特点有: 无状态:每次请求都是独…

【python设计模式】23、访问者模式

哲学思想 访问者模式是一种行为型设计模式,它的哲学思想是将算法从对象结构中分离出来,使得这些算法可以独立地变化和复用。该模式的核心是在不改变对象结构的前提下,定义作用于这些对象的新操作。 简介 访问者模式是一种将算法与对象结构…

网络技术领域专业术语解释大全-170个术语

1. 自主访问控制(DAC:Discretionary Access Control) 自主访问控制(DAC)是一个访问控制服务,其执行一个基于系统实体身份的安全政策和它们的授权来访问系统资源。 2. 双附接集线器(DAC: Dual-attached Concentrator) 双附接集线器(DAC)是FDDI或CDDI集线器有能力接…