当前位置:网站首页>2022/07/27 学习笔记 (day17) 代码块和内部类
2022/07/27 学习笔记 (day17) 代码块和内部类
2022-07-27 23:01:00 【激进的黄瓜】
目录
一.代码块:
在Java中,使用{}括起来的代码被称为代码块
1.普通代码块:
1、普通代码块定义在方法体中
2、普通代码块与构造代码块的格式一致都是{}
3、普通代码块与构造代码块唯一能直接看出的区别是构造代码块是在类中定义的,而普通代码是在方法体中定义的
2.实例代码块(构造代码块):
一般用于初始化实例成员变量
1.构造代码块在类中定义
2.构造代码块在创建对象时被调用,每次创建对象都会调用一次
3.构造代码块优先于构造函数执行,同时构造代码块的运行依赖于构造函数
“依赖”可理解为如果不实例化对象(也就是不执行构造方法),构造代码块是不会执行的!
3.静态代码块:
一般用于初始化静态成员变量
1.只执行一次
2.不需要实例化就可以使用
3.优先于各种代码以及构造函数
4.静态代码块可以定义在类的任何地方中除了方法体中
5.静态代码块不能访问普通变量
6.静态块常用来执行类属性的初始化
Static静态代码块使用格式:
static{
..............
}
测试代码:
public class face_code_question {
public static void main(String[] args) {
System.out.println("我是主方法");
//创建对象
question s=new question();
question s1=new question("Hallo Word");
//主方法,在主方法类中的静态代码块执行之后执行
{
System.out.println("我是局部代码块");
}
}
static {
System.out.println("我是主方法类中的静态代码块");
//主方法类中的静态代码块优先于主方法执行
}
}
class question {
private String name;
//无参构造
public question() {
System.out.println("我是无参构造");
}
//有参构造
public question(String name) {
this.name=name;
System.out.println("我是有参构造");
}
{
System.out.println("我是构造代码块");
//随着对象的创建而加载,对象创建一次,构造代码块执行一次
}
static {
System.out.println("我是静态代码块");
//静态代码块,随着类的加载而加载,并且只执行一次
}
}
测试结果:

不管是哪种方法,我们需要明确静态代码块的存在在类加载的时候就自动运行了
“依赖”可理解为如果不实例化对象(也就是不执行构造方法),构造代码块是不会执行的
4.代码块执行顺序:
代码块执行顺序:静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块
继承中代码块执行顺序:父类静态块——>子类静态块——>父类代码块——>父类构造器——>子类代码块——>子类构造器
二.嵌套类和内部类:
1. 嵌套类分为两种类型:
静态嵌套类和非静态嵌套类。平常我们使用的最多的是非静态嵌套类,也就是被称为内部类,其中内部类又可以分为三种:
a.在一个类(外部类)中直接定义的内部类
b.在一个方法(外部类的方法)中定义的内部类
c.匿名内部类
2.在外部类中定义内部类:
对于内部类,通常在定义类的class关键字前,不加public或private等修饰词。内部类的成员只在内部类可见,若外部类或同层次的内部类需要访问,需要创建类的对象,不可以直接访问内部类的变量
public class Test2{
String name="galen";
class InnerOne{
public int a=1;
private int b=2;
int c=3;
public void display(){
System.out.println("name:" +name);
}
}
void test(){
InnerOne ino = new InnerOne();
ino.display();
//System.out.println("InnerOne a:"+a);
//在外层类中的某个方法里面不能直接访问内部内变量 ,必须通过对象来访问
System.out.println("InnerOne a:"+ino.a); //可以访问
System.out.println("InnerOne b:"+ino.b); //可以访问
System.out.println("InnerOne c:"+ino.c); //可以访问
InnerTwo it = new InnerTwo();
it.transfer();
}
class InnerTwo{
InnerOne ino = new InnerOne();
public void transfer(){
//System.out.println(a); //不可访问Innter的y成员
//System.out.println(InnerOne.a);//不可直接访问Inner的任何成 员和方法
ino.display(); //可以访问
System.out.println("sum="+(ino.a+ino.b+ino.c)); //可以访问
}
}
public static void main(String args[]){
Test2 ot = new Test2();
ot.test();
}
}3.在方法中定义内部类:
定义在方法中的内部类的可见性更小,它只在方法内部可见,在外部类及外部类的其它方法中都不可见。
它有一个特点,就是方法中的内部类连本方法的成员变量都不可访问,它只能访问本方法的final型成员
在方法中定义成员时,只允许使用final修饰词或不加修饰词
4.匿名内部类:
匿名内部类通常用在java的事件处理上,比如,在后续我们将学的窗体程序中,使用匿名内部类将很有用
public abstract class Eat {
//能吃饭
public void eatable();
}public class Person {
public void feed(Eat e){
e.eatable();
}
}public class Test2{
public static void main(String[] args) {
Person mary = new Person();
mary.feed(new Eat() {
@Override
public void eatable() {
System.out.println("汉堡包");
}
});
}
}三.思维导图:

边栏推荐
- 文件系统的层次结构
- Uni app advanced style framework / production environment
- swoole-WebSocket服务
- Circular structure of shell system learning
- 国产NB-IoT芯片厂商芯翼信息科技获2亿元A+轮融资
- Postman 的使用
- 重新定义分析 - EventBridge 实时事件分析平台发布
- Analysis and recurrence of network security vulnerabilities
- Six relationships of UML class diagram, the best way to learn and understand
- [original] [crawler series] briefly get the most popular topics, related topics and description information
猜你喜欢

The cooperation between starfish OS and metabell is just the beginning

安全检测风险

Multithreading & high concurrency (the latest in the whole network: interview questions + map + Notes) the interviewer is calm

Storage of deep planing data in memory

Iperf installation and use

ABAP CDS Table Function介绍与示例

Focal Loss讲解

File system mount

Ink wheel salon | Li Wenjie, Peking University: a graph database system for knowledge atlas application gstore

工具函数:把一个工作区中非空字段值付给另一个工作区相同字段
随机推荐
How to clearly understand and express IAAs, PAAS and SaaS?
总投资近16亿元!乾照光电VCSEL、高端LED芯片项目正式开工
Introduction to the browser video frame operation method requestvideoframecallback()
Ink wheel salon | Li Wenjie, Peking University: a graph database system for knowledge atlas application gstore
容器网络硬核技术内幕 (7) 大海航行靠舵手
Basic learning of cesium
ABAP CDS Table Function介绍与示例
Byte flybook Human Resource Kit three sides
4月全球智能手机出货同比下滑41%,华为首次超三星成全球第一
晶方科技:光刻机厂商ASML为公司参与并购的Anteryon公司的最主要客户之一
Oracle grouping takes the maximum value
Retinanet网络结构详解
Storage of deep planing data in memory
Go language variable
Safety detection risk
6月19日上会,中芯国际或创造国内最快上市记录!
Unknown database ‘xxxxx‘
dataworks 传输数据到mysql 中文乱码是什么原因
Jmeter在性能测试中的应用实践样例
The most detailed summary of common English terms in the chip industry (quick grasp of graphics and text)