
JavaSE学习day08
递归方法必须向已知方向递归,避免无限递归,否则可能导致StackOverflowError(堆栈溢出)。 递归方法必须有有限的终止条件,以确保不会无限调用。 每个类都有一个默认的空参构造器。 可以定义多个构造器,通过重载实现不同的初始化逻辑。 显式定义了构造器后,默认构造器不再提供。 默认初始化:直接在属性声明处。 显式初始化:在 构造器初始化:通过构造器为属性赋值。 其它方法或代码片段操作:如 类是公共的。 有一个无参的公共构造器。 有属性,并提供对应的
发布日期:2021-05-18 05:20:11
浏览次数:20
分类:精选文章
本文共 5777 字,大约阅读时间需要 19 分钟。
day08授课笔记
知识点1:递归方法
递归方法是指一个方法能够调用自身的特性。递归方法通过隐式循环实现某段代码的重复执行,但无需显式控制循环键。这一点非常适合解决分治型问题。
递归方法的使用规则
代码演示
public class RecursionTest { public static void main(String[] args) { RecursionTest test = new RecursionTest(); int sum = test.sum1(100); System.out.println("总和为:" + sum); int result = test.f(10); System.out.println("结果为:" + result); } public int sum(int num) { int sum = 0; for (int i = 1; i <= num; i++) { sum += i; } return sum; } public int sum1(int num) { if (num == 1) { return 1; } else { return sum1(num - 1) + num; } } public int multiply(int num) { if (num == 1) { return 1; } else { return multiply(num - 1) * num; } } public int f(int num) { if (num == 0) { return 1; } else if (num == 1) { return 4; } else { return 2 * f(num - 1) + f(num - 2); } } public int func(int num) { if (num == 20) { return 1; } else if (num == 21) { return 4; } else { return func(num + 2) - 2 * func(num + 1); } }}
知识点2:面向对象的特征一:封装与隐藏
封装性的体现之一
- 通过设置属性为
private
,并提供公共的get
和set
方法,隐藏属性的直接访问。 - 这样既保证了属性的安全性,又提供了合理的访问接口。
封装性的体现之二
- 方法可以设置为
private
,确保方法只能在类内使用。
4种权限修饰符
private
(仅在类内部使用)- 缺省权限(包内访问)
protected
(类和包及其subclass)public
(所有访问)
知识点3:类的成员之三:构造器
构造器是类的特殊的方法,用于实例化对象。
构造器的使用规则
代码演示
public class PersonTest { public static void main(String[] args) { Person p1 = new Person(); p1.name = "吴辉"; p1.age = 25; p1.eat(); p1.sleep(6); System.out.println("####################"); Person p2 = new Person("石磊"); System.out.println(p2.name); // 石磊 }}class Person { String name; int age; public Person() { System.out.println("hello, Person()"); } public Person(String n) { name = n; } public Person(int a) { if (a >= 0 && a <= 130) { age = a; } } public void eat() { System.out.println("人每天需要吃饭"); } public void sleep(int hour) { System.out.println("人每天需要保证" + hour + "小时的睡眠"); }}
知识点4:类中属性赋值的位置及先后顺序
属性赋值的位置
… = value;
的形式。对象.属性 = value;
。赋值顺序
1.,默认初始化 → 显式初始化 → 构造器初始值 → 显式赋值。
示例
public class UserTest { public static void main(String[] args) { User u1 = new User(); System.out.println(u1.name); User u2 = new User(10); System.out.println(u2.age); }}class User { String name = "Tom"; int age = 1; public User() { } public User(int a) { age = a; }}
知识点5:this关键字的使用
this调用属性、方法
- 当方法参数名与类属性名相同时,必须使用
this.属性名
进行区分。
this调用构造器
- 构造器内可以使用
this(参数列表)
来调用其他构造器。
代码示例
class Person { private String name; private int age; public Person() { System.out.println("我是一个人。我刚出生,需要洗澡!"); } public Person(String name) { this(); this.name = name; } public Person(String name, int age) { this(name); this.age = age; }}
其他内容
JavaBean
满足以下条件的类可以称为一个JavaBean:
get
和set
方法。UML类图
类图展示了类的属性和方法,包含的实体关系和依赖关系。
项目重点题目
1. 数据类:Student类
dataclass Student { int number; // 学号 int state; // 年级 int score; // 成绩 void info() { System.out.println("number : " + number + ", state : " + state + ", score : " + score); }}
2. 操作数据的工具类:StudentUtil
class StudentUtil { public Student[] getStudentArray(int length, int lowState, int highState, int lowScore, int highScore) { Student[] students = new Student[length]; for (int i = 0; i < students.length; i++) { students[i] = new Student(); students[i].number = i + 1; students[i].state = (int) (Math.random() * (highState - lowState + 1) + lowState); students[i].score = (int) (Math.random() * (highScore - lowScore + 1) + lowScore); } return students; } public void printStudentState(Student[] students, int state) { for (int i = 0; i < students.length; i++) { if (students[i].state == state) { students[i].info(); } } } public void sort(Student[] students, String sortMethod) { if ("ascend".equals(sortMethod)) { for (int i = 0; i < students.length - 1; i++) { for (int j = 0; j < students.length - 1 - i; j++) { if (students[j].score > students[j + 1].score) { swap(students, j, j + 1); } } } } else if ("descend".equals(sortMethod)) { for (int i = 0; i < students.length - 1; i++) { for (int j = 0; j < students.length - 1 - i; j++) { if (students[j].score < students[j + 1].score) { swap(students, j, j + 1); } } } } else { System.out.println("排序方式有误!"); } } private void swap(Student[] students, int i, int j) { Student temp = students[i]; students[i] = students[j]; students[j] = temp; } public void print(Student[] students) { for (int i = 0; i < students.length; i++) { students[i].info(); } }}
测试类
public class Exer3 { public static void main(String[] args) { StudentUtil util = new StudentUtil(); Student[] students = util.getStudentArray(20, 1, 6, 0, 100); util.printStudentState(students, 3); util.sort(students, "descend"); util.print(students); }}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月20日 13时17分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PL/SQL 动态Sql拼接where条件
2019-03-09
【自学Flutter】4.1 Material Design字体图标的使用(icon)
2019-03-09
【换行符】什么时候用cin.get()吃掉输入流中的换行符
2019-03-09
广东外语外贸大学第三届网络安全大赛Writeup
2019-03-09
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2019-03-10
Thymeleaf sec:authorize 标签不生效
2019-03-11
微信JS-SDK DEMO页面和示例代码
2019-03-11
Flask--简介
2019-03-11
Frame--Api框架
2019-03-11
Boostrap技能点整理之【网格系统】
2019-03-11
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
2019-03-11
Git简单理解与使用
2019-03-11
echarts 基本图表开发小结
2019-03-11
adb通过USB或wifi连接手机
2019-03-11
JDK9-15新特性
2019-03-11
TreeSet、TreeMap
2019-03-11
JVM内存模型
2019-03-11
可变长度参数
2019-03-11