JavaSE学习day08
发布日期:2021-05-18 05:20:11 浏览次数:20 分类:精选文章

本文共 5777 字,大约阅读时间需要 19 分钟。

day08授课笔记

知识点1:递归方法

递归方法是指一个方法能够调用自身的特性。递归方法通过隐式循环实现某段代码的重复执行,但无需显式控制循环键。这一点非常适合解决分治型问题。

递归方法的使用规则

  • 递归方法必须向已知方向递归,避免无限递归,否则可能导致StackOverflowError(堆栈溢出)。
  • 递归方法必须有有限的终止条件,以确保不会无限调用。
  • 代码演示

    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,并提供公共的getset方法,隐藏属性的直接访问。
    • 这样既保证了属性的安全性,又提供了合理的访问接口。

    封装性的体现之二

    • 方法可以设置为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:

  • 类是公共的。
  • 有一个无参的公共构造器。
  • 有属性,并提供对应的getset方法。
  • 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);    }}
    上一篇:JavaSEday09学习
    下一篇:数据结构——链表有关

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月20日 13时17分33秒