当前位置:网站首页>(四)递归、可变参数、访问修饰符、理解 main 方法、代码块
(四)递归、可变参数、访问修饰符、理解 main 方法、代码块
2022-07-31 03:34:00 【来世做春风嘛】
一、递归(P215)(蒙蔽,有时间再看下)
1. 方法递归调用
递归重要规则
(1)执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
(2)方法的局部变量是独立的,不会相互影响,比如 n 变量
(3)如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用类型的数据
(4)递归必须向退出递归的条件逼近,否则就是无限递归,出现 StackOverflowError
(5)当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
举例说明:
(1)猴子吃桃 P221
(2)老鼠迷宫 P222
(3)汉诺塔 P226
二、可变参数
(1)基本概念
java允许将同一个类中多个同名、同功能但参数个数不同的方法,封装成一个方法。
(2)基本语法
访问修饰符 返回类型 方法名(数据类型... 形参名){}
// 可变参数,可以当做数组使用 public int sum(int... nums) { int sum = 0; for (int i = 0; i < nums.length; i++) { sum += nums[i]; } return sum; }
注意事项和使用细节
1)可变参数的实参可以为0个或任意多个。
2)可变参数的实参可以为数组
3)可变参数的本质就是数组
4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
5)一个形参列表中只能出现一个可变参数
三、访问修饰符(P279)
1. 基本介绍
java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):
(1)公开级别:用 public 修饰,对外公开
(2)受保护级别:用 protected 修饰,对子类和同一个包中的类公开
(3)默认级别:没有修饰符号,向同一个包的类公开
(4)私有级别:用private修饰,只有类本身可以访问,不对外公开
四、理解 main 方法(P383)
(1)main 方法是虚拟机调用
(2)java虚拟机需要调用类的 main() 方法,所以该方法的访问权限必须是public
(3)java虚拟机在执行 main() 方法时不必创建对象,所以该方法必须是static
(4)该方法接收String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数
(5)Java 执行的程序 参数1 参数2 参数3
五、代码块(P386)
代码块又称为初始化块,属于类中的成员【即是类的一部分】,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。
但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或
类显式调用,而是加载类时,或创建对象时隐式调用。
1. 基本语法
[ 修饰符 ]{
代码};
注意:
(1)修饰符可选,要写的话,也只能写 static
(2)代码块分为两类,使用 static 修饰的叫静态代码块,没有 static 修饰的,叫普通代码块。
(3)逻辑语句可以为任何逻辑语句(输入、输出、方法调用、循环、判断等)
2. 优点
(1)相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化的操作
(2)场景:如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用
性(3)代码块优先构造器执行
3. 静态代码块
(1)static代码块 也叫 静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就执行。
(2)类什么时候被加载
① 创建对象实例时(new)
② 创建子类对象实例,父类也会被加载
③ 使用类的静态成员时(静态属性,静态方法)
(3)普通的代码块,在创建对象实例时,会被隐式的调用。被创建一次,就会调用一次。
如果只是使用类的静态成员时,普通代码块并不会执行。
(4)创建一个对象时,在一个类调用顺序是:
① 调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)
② 调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通属性初始化,则按定义顺序调用)
③ 调用构造方法
(5)构造器的最前面其实隐含了 super() 和调用普通代码块。静态相关的代码块,属性初始化,在类加载时,就执行完毕。因此是优先于构造器和普通代码块执行的
(6)继承关系的调用顺序
① 父类的静态代码块和静态属性
② 子类的静态代码块和静态属性
③ 父类的普通代码块和普通属性初始化
④ 父类的构造方法
⑤ 子类的普通代码块和普通属性初始化
⑥ 子类的构造方法
(7)静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调
用任意成员。
边栏推荐
- Detailed explanation of TCP and UDP
- 【AUTOSAR-RTE】-4-Port和Interface以及Data Type
- $parent/$children 与 ref
- The els block moves the boundary to the right, and accelerates downward.
- The Map Entry understanding and application
- 【异常】The field file exceeds its maximum permitted size of 1048576 bytes.
- 分布式系统架构需要解决的问题
- BP神经网络
- Redis implements distributed locks
- 数据库实现分布式锁
猜你喜欢

VS QT - ui does not display newly added members (controls) || code is silent

大小端模式

Zotero如何删除自动生成的标签

Key Technologies of Interface Testing

Redis implements distributed locks

Recursive query single table - single table tree structure - (self-use)

LeetCode simple problem to find the subsequence of length K with the largest sum

How Zotero removes auto-generated tags

Just debuted "Fight to Fame", safety and comfort are not lost

IDEA 注释报红解决
随机推荐
False positives and false negatives in testing are equally worthy of repeated corrections
Golang中的addressable
type_traits元编程库学习
Ambiguous method call.both
Problems that need to be solved in distributed system architecture
浅识Flutter 基本组件之CheckboxListTile组件
The Map Entry understanding and application
《DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction》论文笔记
The application and practice of mid-to-platform brand advertising platform
Day32 LeetCode
els block to the left to move the conditional judgment
[C language] General method of expression evaluation
【异常】The field file exceeds its maximum permitted size of 1048576 bytes.
Day32 LeetCode
【论文阅读】Mastering the game of Go with deep neural networks and tree search
Redis 统计用户新增和留存
识Flutter 基本组件之showTimePicker 方法
Analysis summary - self-use
IIR filter and FIR filter
Detailed explanation of TCP (2)
