--------------------------------------------------------------------------------------------莫听穿林打叶声,一蓑烟雨任平生--------------------------------------------------------------------------------------------

Java笔记day12

一、封装举例
1.使用面向对象的思想,编写自定义描述狗的信息。
    设定属性包括:品种,年龄,心情,名字;方法包括:叫,跑。
    要求:
        1)设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
        2)限定心情只能有“心情好”和“心情不好”两种情况,
            如果无效输入进行提示,默认设置“心情好”。
        3)设置构造函数实现对属性赋值
        4)叫和跑的方法,需要根据心情好坏,描述不同的行为方式。
        5)编写测试类,测试狗类的对象及相关方法(测试数据信息自定义)

    

class dog {
        private String variety;
        private int age;
        private String mood;
        private String name;

    dog(String variety, int age, String mood, String name) {
        this.variety = variety;
        this.age = age;
        this.mood = mood;
        this.name = name;
        }

    public void setVariety(String variety) {
        this.variety = variety;
        }

    public String getVariety() {
        return variety;
        }

    public void setAge(int age) {
        this.age = age;
        }

    public int getAge() {
        return age;
        }

    public void setMood(String mood) {
        this.mood = mood;
        }

    public String getMood() {
        return mood;
        }

    public void setName(String name) {
        this.name = name;
        }

    public String getName() {
        return name;
        }

    private void run(String mood) {
        switch (mood) {
            case "心情很好":
                System.out.println("这只" + age + "岁的叫做" + name + "的" + variety + mood+",开心的围着主人身边转");
                break;
            case "心情不好":
                System.out.println("这只" + age + "岁的叫做" + name + "的" + variety + mood+",伤心的一动不动");
                break;
            default:
                System.out.println("输入信息有误,这只狗的心情很好");
                System.out.println("这只" + age + "岁的叫做" + name + "的" + variety +"心情很好,开心的围着主人身边转");
                break;
            }
        }
    private void bark(String mood) {
        switch (mood){
            case "心情很好":
                System.out.println("这只" + age + "岁的叫做" + name + "的" + variety + mood+",开心的汪汪叫");
                System.out.println("=======================");
                break;
            case "心情不好":
                System.out.println("这只" + age + "岁的叫做" + name + "的" + variety + mood+",伤心的呜呜叫");
                System.out.println("=======================");
                break;
            default:
                System.out.println("这只" + age + "岁的叫做" + name + "的" + variety + "心情很好,开心的汪汪叫");
                System.out.println("=======================");
                break;
            }
        }

    public void show() {
        run(mood);
        bark(mood);
            }
        }

    public class HomeWork1 {
        public static void main(String[] args) {
            dog D1 = new dog("阿拉斯加", 2, "心情很好", "奥斯卡");
            D1.show();

            dog D2 = new dog("中华田园犬",1,"心情不好","旺财");
            D2.show();

            dog D3 = new dog("德国牧羊犬",2,"hhhhh","太子");
            D3.show();

            D1.setMood("心情不好");
            D1.show();
        }
    }
    ****这只2岁的叫做奥斯卡的阿拉斯加心情很好,开心的围着主人身边转****
    ****这只2岁的叫做奥斯卡的阿拉斯加心情很好,开心的汪汪叫****
    ****=======================****
    ****这只1岁的叫做旺财的中华田园犬心情不好,伤心的一动不动****
    ****这只1岁的叫做旺财的中华田园犬心情不好,伤心的呜呜叫****
    ****=======================****
    ****输入信息有误,这只狗的心情很好****
    ****这只2岁的叫做太子的德国牧羊犬心情很好,开心的围着主人身边转****
    ****这只2岁的叫做太子的德国牧羊犬心情很好,开心的汪汪叫****
    ****=======================****
    ****这只2岁的叫做奥斯卡的阿拉斯加心情不好,伤心的一动不动****
    ****这只2岁的叫做奥斯卡的阿拉斯加心情不好,伤心的呜呜叫****

二、详解main方法
    详细解剖main方法中各个单词代表的意思

public class MainDemo {
    public static void main(String[] args){
    }

    public:公共的,访问权限最大,因为要被JVM识别所编译,所以权限要足够大
    class:java的基本单位--类,class是定义一个类的关键字
    MainDemo:类名,按照标识符命名规则命名的类名
    static:静态的,属于类的本身,要被JVM所调用,可以直接通过类调用
    void:代表的是没有返回值,因为调用main方法的是JVM,返回值返回给JVM没有意义
    main:主方法,是JVM唯一识别运行的入口方法
    String[]: main方法的参数数据类型是字符串数组
    args:形参的变量名,arguments的缩写,事实上这个地方的形参名称写什么都一样,只是习惯于用args

三、API参考文档
1、文档注释格式
    /**
        内容
    */
2、为什么要有工具类
    如果代码中有很多地方需要使用同一个功能,我们可以把这个功能封装成一个方法,然后通过调用它使用,但是如果遇到一个
这样的功能就封装成一个方法,然后再调用,会大大减小我们写代码的效率,所以Java就提供了很多可以直接导包调用的工具类,
这些工具类可以在API文档中查看,相当于Java自带的类的说明书
3、如何自定义一个工具类
    1)、写一个工具类
    2)、在工具类中加入文档注释
    3)、以数组遍历和求最大值为例
    第一步:编写工具类
    

/**
    * 这是针对数组相关操作的工具类(还在补充优化中)
    *
    * @author 小虎                          //作者名
    * @version V1.0                        //版本号
    *
    */
    public class ArrayTool {
        /**
        *  这是私有的无参构造方法
        */
        private ArrayTool(){
                                        //注意:如果构造方法私有化,就不能在新建对象了
        }

    /**
     *
     * 这是遍历数组的方法,遍历后的格式是[元素1,元素2,...]
     * @param array 这是调用方法时传入的参数,数据类型是int类型的数组
     */
    public static void printArray(int[] array){
        for (int i = 0; i < array.length; i++) {
            if (i == 0) {
                System.out.print("[" + array[i] + ",");
            } else if (i == array.length - 1) {
                System.out.print(array[i] + "]");
            } else {
                System.out.print(array[i] + ",");
            }
        }
    }

    /**
     *
     * 这是获取数组元素中最大值的方法
     * @param array 这是调用该方法需要传入的参数,数据类型是int类型的数组
     * @return 返回的是该数组中元素的最大值
     */
    public static int getMaxNum(int[] array){
        int max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
                }
            }
            return max;
        }
    }

    ****这时就可以先当作一个工具类来使用了,需要调用的时候只要直接调用就好了ArrayTool.printArray(arr);****

    第二步,打包工具类
        找到Java源文件所在文件夹位置,打开该处的cmd,然后输入javadoc -d 目录 -author -version ArrayTool.java
    如果是在当前目录下执行,目录可以直接用.代替,注意此处的文档编码格式要是ANSL。然后在index.html文件中就可以看到
    工具类的具体内容

4、工具类的使用
    打开API文档之后就可以根据文档注释的内容使用Java的工具类了,如果工具类在Java.lang的包下就不需要导包可以直接使用,
同时这些工具类之间也存在方法重载,所以在使用的时候要注意参数列表上的参数类型

四、代码块
1、什么是代码块
    在Java中,使用{}括起来的代码被称为代码块
2、分类
    局部代码块(当作正常的代码看待)
        格式:只在方法中出现,使用大括号括起来的代码叫局部代码块
        好处:使用完毕及早释放,提高内存的使用率
        执行顺序:在一个方法中,自上而下的顺序执行
    构造代码块
        在类中方法外定义,每次调用构造方法的时候,都会先执行一遍构造代码块再执行构造方法
        先执行构造代码块再执行构造方法
        如果在main方法中new对象的时候,也有局部代码块,执行顺序自上而下
    静态代码块
        被static修饰的代码块,定义在类中方法外
    同步代码块(多线程讲解)
    执行顺序:
        main方法 -- 静态代码块 -- 构造代码块 -- 构造方法
        static代码块一旦被执行过一次后,同一个程序不会重复执行。
        静态的内容是属于类的本身,程序的开始到结束只会加载一次,不会重复加载。

五、继承 
1、定义
        在Java中,将从已经存在的类产生新类的机制称为继承。
    原来存在的类叫父类(或叫基类),新类叫子类(或叫派生类)。
    子类中会自动拥有父类中的设计代码,还可以改写原来的代码或添加新的代码。
2、意义
    1)、减少程序设计的错误
    2)、做到了代码的复用,可简化和加快程序设计,提高了工作效
    3)、继承不仅仅是简单的拥有父类的设计代码,继承机制本身就具有进化的能力,跟生物世界一样
        子代总是比父代更能适应环境。通过对父类的设计做一些局部的修改,使得子类对象具有更好的适应能力和强大的生存能力
    

posted @ 2021-12-06 21:56  等你回眸一笑  阅读(70)  评论(0)    收藏  举报