JAVA-代码块和内部类

news/2024/11/20 23:16:27/

文章目录

目录

文章目录

前言

1.代码块

1.1什么是代码块?

1.2代码块的分类及作用:

1.静态代码块

2.成员代码块(又叫做构造代码块)

3.局部代码块

2.内部类

2.1 什么是内部类?

2.2 内部类的分类

1.成员内部类

2.静态内部类

3.匿名内部类

4.局部内部类

总结


前言

作者简介:我是最爱吃兽奶,大家好啊! 又见面了

内容简介: 今天给大家聊一下什么是内部类,什么又是代码块

那么,跟着我的脚步来一起看看吧


1.代码块

1.1什么是代码块?

代码块也叫初始化块 属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{    }连接起来。

 简而言之,就是代码被放在一对大括号中

1.2代码块的分类及作用:

代码块可以分为三类

1.静态代码块

在下面我会创建Person两个对象,大家可以猜猜控制台打印了什么?

实例化了两个对象,打印了一句静态代码快!

(上面关于类的加载相关的知识可以敬请期待博主的后续创作)


2.成员代码块(又叫做构造代码块)

成员代码块其实和普通的成员差不多

 

 下面是改进后的代码

 清爽多了没?


3.局部代码块

局部局部,真应景啊! 这个代码块非常局限

背景:早期计算机刚推出的时候,内存空间非常小,这个时候人们就发明了局部代码块,在一个方法中如果定义的变量不是从头用到尾的话,那么可以用局部代码块把开头和结尾的代码包起来,这样一来,这些变量就会节省内存,现在来看局部代码块好像一点用都没了,因为我们现在计算机的内存和磁盘空间已经不可同日而语

还是带着大家简单看下吧

public int sum(){int sum = 0;{int a = 10;int b = 20;sum = a+b;}return sum;
}

求和,返回a+b的值,大家凑活着看,这东西几乎没用


2.内部类

2.1 什么是内部类?


大家先来看看下面的例子 

 


汽车的发动机和汽车都可以看做是类,但是汽车的发动机类单独存在没什么意义,所以我们可以直接将其定义为内部类

2.2 内部类的分类


1.成员内部类

定义在成员位置的类叫做成员内部类

/** 成员内部类,属于外部类的成员* 获取成员内部类的两种方式* 方式一:*    当成员内部类被private修饰时,外部类编写方法,对外提供内部类对象* 方式二:*    当成员内部类没有被private修饰时,直接创建对象* 格式: outer.inner 对象名 = new outer(). new inner();* */

 方式一

public class OuterClass {String name;public innerClass getInnerClass(){return new innerClass();}private class innerClass{public String name = "内部类";}
}class TestDemo{public static void main(String[] args) {OuterClass oc = new OuterClass();oc.getInnerClass();}
}

方式二

public class OuterClass {class innerClass{public String name = "内部类";}}class TestDemo{public static void main(String[] args) {OuterClass.innerClass oi = new OuterClass().new innerClass();System.out.println(oi.name);}
}

2.静态内部类

静态静态,表名是由static修饰的,不依赖于对象

调用直接用类名调用即可

 代码如下

public class outer {static class inner{String name = "静态内部类";}}class Test{public static void main(String[] args) {outer.inner oi = new outer.inner();System.out.println(oi.name);}
}

3.匿名内部类

匿名匿名,它难道是没有名字吗?

其实不然,它其实是有名字的,内存会为其分配一个特定的编号,想要了解吗? 往下看!

接下来我们来看匿名内部类的使用

下面可能会有点抽象,但是我相信你这么聪明一定能听懂!

//上面eat方法定义不太好,已更改为eatMilk
interface eat{public abstract void eatMilk();}
class B implements eat{@Overridepublic void eatMilk() {System.out.println("兽宝乖,开饭了");}
}class Test{public static void main(String[] args) {B b = new B();b.eatMilk();}
}

 如果每次需要使用接口中抽象方法时就实现一个B这样的类显然不现实

这里就引出了匿名内部!

格式

new 接口/类名(参数1, 参数2...)

{

           实现方法1(){ } 

           实现方法2(){ }

            ...... 

};

 System.out.println(eat.getClass()); //获取类名

大家有兴趣自行尝试

4.局部内部类

局部内部类就是定义在方法中的类

大家自行尝试,用处不大


总结


以上就是我们这篇博客讲的主要内容,大家需要重点掌握静态代码块,构造代码块,匿名内部类,成员内部类,这些在以后的学习中会被频繁的用到。

 


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

相关文章

PSP - AlphaFold2 适配不同来源搜索的 MSA 接口

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130594303 MSA (Multiple Sequence Alignment) 在 AlphaFold2 中的工作方式如下: 使用搜索工具 (hhblits/hhsearch/jackhmmer),从大型数据库中,搜索与目标…

PCL学习九:Registration-配准

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 PCL点云库学习笔记(文章链接汇总) 1. 点云中的数学 函数求导 对于函数 f ( x ) x 2 f(x)x^2 f(x)x2 其一阶导数也是 x x x 的函数: d f d x 2 x \frac{df}{dx}2x dxdf​2x其二阶导…

struct模块进行数据打包

原理: 将一组简单数据进行打包,转换为bytes格式发送。或者将一组bytes格式数据,进行解析。 接口使用 Struct(fmt) 功能: 生成结构化对象 参数:fmt 定制的数据结构 st.pack(v1,v2,v3…) 功能: 将一组数据按照指定格式打包转换为by…

土地报征简介

报征概念: 土地报征是指国家为了人民整体利益出发,根据我国相关法律和法规的要求和流程, 将集体土地性质转化为国有土地性质,并给予被征地的对象给予合理的补偿和安置工作。报征4个价段: 1、组卷阶段 (1&…

ubuntu基于Docker搭建Gitlab服务器

一、安装docker 1,先卸载掉旧版本 $ sudo apt-get remove docker docker-engine docker.io containerd runc2,更新apt包 $ sudo apt-get update3,安装软件包以允许apt通过https使用存储库 $ sudo apt-get install \apt-transport-https \c…

2023Java面试题(附答案)

精选Java面试题162道 什么是Java,Java的优点是什么?Java是一种面向对象的编程语言,请解释面向对象的概念是什么?Java编程语言有哪些数据类型?什么是Java中的Wrapper类?包装类有哪些?Java中的基…

【游戏分析】《某某明月刀》之御风神行

御风神行是《某某明月刀》里很常用的一个技能,可以用来在各大地图的传送点之间相互传送而不需要经过车夫,虽然冷却时间很长,但是非常实用。但是想去到某个传送点必须要先点亮这个传送点,也就是说要跑到传送点附近才可以。但是通过…

[Netty] 面试问题 1 (十八)

文章目录 1.Netty的特点2.Netty应用场景3. Netty核心组件4.Netty的线程模型5. EventloopGroup和EventLoop6.Netty 的零拷贝7.Netty 长连接和心跳机制8.Netty 服务端和客户端的启动过程9.Netty 的 Channel 和 EventLoop10.Netty 的 ChannelPipeline11.Netty 中的 ByteBuf12.Nett…