基础学习-U7【面向对象-初级】代码

对象(类) = 属性(成员) + 行为(方法)


对象机制(属性)

class Object {
    public static void main(String[] args) {
        Person a = new Person();
        a.age = 10;
        a.name = "小明";
        Person b;
        b = a;
        System.out.println(b.name);//小明
        b.age = 200;
        b = null;//地址置空,所以b此时不再是对象
        System.out.println(a.age);//200
        System.out.println(b.age);//出现异常
    }
}

class Person{
    int age;
    String name;
}

方法调用

class Main {
    //多次调用数据并显示
    public static void main(String[] args) {
        int arr[][] = { {1, 2, 3},
                        {2, 3, 4},
                        {3, 4, 5}};

        MyTools arr1 = new MyTools();
        arr1.toolArr(arr);//第一次调用数组

        arr1.toolArr(arr);//第二次调用数组

    }
}

class MyTools{

    public void toolArr(int a[][]){
        for(int i = 0; i < a.length; i++){
            for(int j = 0; j < a[i].length; j++){
                System.out.print(a[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

优点:提高代码复用性; 可以将实现的细节封装,供其他用户调用。


练习1

class Main {
    //返回一个值以上可以使用数组
    public static void main(String[] args) {

        MyTools arr1 = new MyTools();
        int a[] = arr1.toolArrSumAndSub(4,5);//使用合适的数据类型来调用方法 并返回数组
        //如果不使用整型数组来接收,选择直接输出显示的话,会出现乱码
        for(int i = 0; i < a.length; i++){
            System.out.print(a[i] + " ");
        }

    }
}

class MyTools{

    public int[] toolArrSumAndSub(int a, int b){//返回值类型选择 整数型数组 -> 用 int[] 代替void
    //即 要求返回值类型必须和return值的类型一致或兼容


        int[] resArr = new int[2];
        resArr[0] = a + b;
        resArr[1] = a - b;
        return resArr;
    }
}

递归

算法思路 终端显示 非动画前后端版小游戏

  • 斐波那契
  • 猴子吃桃
  • 老鼠出迷宫
  • 汉诺塔
  • 八皇后(未完成)
//未完成 不会
import java.util.Scanner;
import java.util.Math;

class Main {
    public static void main(String[] args) {
        //012.静态版八皇后 8*8的棋盘上 任何两个皇后不可以互相攻击 且不在同一行、列、斜线上 求摆法有多少种
        //可以二维数组表示行列  也可以一维数组表示行,让他们的数值代表列,靠算法
        Scanner myScanner = new Scanner(System.in);
        System.out.print("输入皇后个数:");
        num = myScanner.nextInt();
        int[] arr = new int[num]; //创建棋盘空间

        Tool eQueen = new Tool(); //调用
        System.out.println("Hello world!   - java.jsrun.net ");
    }
}

class Tool {
    public void check(int[] arr, int num) {
        if(num == arr.length) {

        }
    }

    public boolean queen(int[] arr, int n) { //棋盘一维数组 和 要摆放的皇后行号
        for(int i = 0; i < n; i++) {
            if((Math.abs(i - n) == Math.abs(arr[i] - arr[n])) || arr[i] == arr[n]) {//同斜线 同列
                return false;
            }
        }
        return true;
    }

    public void each(int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
}

可变参数

优化方法的 参数 的办法

  • 可变参数可以看成是一个数组 可接收同数据类型的0-n个参数

  • 对应的实参可以传入n个同数据类型的数,也可以直接传入同数据类型的数组

  • 一个形参列表只能有一个可变参数

  • 但一个形参列表除了可变参数还可以有其他类型的参数,但需要放在可变参数前面

class Main {
    public static void main(String[] args) {
        //可变参数的运用 输出学生姓名和n个成绩之和
        Tool student = new Tool();

        System.out.println(student.showScore("张三", 66.5, 89, 75));
    }
}
class Tool {
    public String showScore(String name, double... scores) {
        double totalScore = 0; //计算总成绩
        for(int i = 0; i < scores.length; i++) {
            totalScore += scores[i];
        }
        return name + " " + scores.length + "门课的总成绩为 " + totalScore;
    }
}

构造器及this关键字

class Main {
    public static void main(String[] args) {
        //013.
        // System.out.println("Hello world!   - java.jsrun.net ");
        Person p1 = new Person("mary", 20);
        // Person p2 = new Person("smith", 27); //信息不同 测试 false
        Person p2 = new Person("mary", 20);

        System.out.println(p1.compareTo(p2));

    }
}

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public boolean compareTo(Person p) { // 比较是否一致

        // 年龄和姓名完全一致
        // if(this.name.equals(p.name) && this.age == p.age) {
        //     return true;
        // } else {
        //     return false;
        // }

        return this.name.equals(p.name) && this.age == p.age; //比较 方法二
    }

}
新文件夹
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。