文章目录
目录
文章目录
前言
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.局部内部类
局部内部类就是定义在方法中的类
大家自行尝试,用处不大
总结
以上就是我们这篇博客讲的主要内容,大家需要重点掌握静态代码块,构造代码块,匿名内部类,成员内部类,这些在以后的学习中会被频繁的用到。