当前位置:网站首页>(四)递归、可变参数、访问修饰符、理解 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)静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调
用任意成员。
边栏推荐
- Redis implements distributed locks
- $parent/$children 与 ref
- 浅识Flutter 基本组件之showDatePicker方法
- postgresql 15源码浅析(5)—— pg_control
- 「 每日一练,快乐水题 」1331. 数组序号转换
- TCP和UDP详解
- SocialFi 何以成就 Web3 去中心化社交未来
- Daily practice of LeetCode - 138. Copy a linked list with random pointers
- Implementation of a sequence table
- web容器及IIS --- 中间件渗透方法1
猜你喜欢
With 7 years of experience, how can functional test engineers improve their abilities step by step?
分布式系统架构需要解决的问题
浅识Flutter 基本组件之CheckBox组件
C语言从入门到如土——数据的存储
The BP neural network
Web container and IIS --- Middleware penetration method 1
【异常】The field file exceeds its maximum permitted size of 1048576 bytes.
浅识Flutter 基本组件之showDatePicker方法
VS QT - ui does not display newly added members (controls) || code is silent
「 每日一练,快乐水题 」1331. 数组序号转换
随机推荐
Web container and IIS --- Middleware penetration method 1
WebSocket Session为null
beforeDestroy与destroyed的使用
SIP协议标准和实现机制
数据库文件中的未分配的块和未使用的块的区别
els 方块向左移动条件判断
Database implements distributed locks
type_traits metaprogramming library learning
Daily practice of LeetCode - 138. Copy a linked list with random pointers
解析小结—自用
CloudCompare&PCL 计算两个点云之间的重叠度
RESTful api接口设计规范
MultipartFile文件上传
【异常】The field file exceeds its maximum permitted size of 1048576 bytes.
Use of QML
MultipartFile file upload
顺序表的实现
"DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction" paper notes
$parent/$children 与 ref
$attrs/$listeners