java学习之第十章作业

news2024/11/22 18:16:02

目录

第一题

第二题

第三题

第四题

第五题

第六题

 代码的问题点

第七题

第八题


第一题

package homework;

public class HomeWork01 {
    public static void main(String[] args) {
        Car c = new Car();//创建新对象,没有实参
        Car c1 = new Car(100);
        //1.创建一个新的对象实例,调用无参构造器
        //2.在无参构造器中price从10.0变成9.0
        //3.color从white变成red
        System.out.println(c);//9.0,red

        //1.创建一个新对象实例c1,调用public Car(double price)这个有参构造器
        //2.c1的price = 10;调用构造器,传参之后变成了100.0
        //3.color是static属性,是所有Car类的对象共享的,
        // Car c = new Car();之后已经变成了red,所以对象c1的color属性也是red

        System.out.println(c1);//100.0 ,red
    }
}

class Car {
    double price = 10;
    static String color = "white";//静态属性,所有对象共享

    public String toString() {//重写toString方法
        return price + "\t" + color;
    }

    public Car() {//无参构造器
        this.price = 9;
        this.color = "red";
    }

    public Car(double price) {//有参构造器
        this.price = price;
    }
}

 考察知识点:类变量是类中所有对象共享的

第二题

package homework;

public class HomeWork02 {

}

class Frock {
    private static int currentNum = 100000;

    public int serialNumber;

    public static int getNextNum() {
        currentNum += 100;
        return currentNum;
    }

    public int getSerialNumber() {
        return serialNumber;
    }

    public Frock() {
        this.serialNumber = getNextNum();
    }
}

class TestFrock {
    public static void main(String[] args) {
        System.out.println(Frock.getNextNum());
        System.out.println(Frock.getNextNum());
        Frock frock1 = new Frock();
        Frock frock2 = new Frock();
        Frock frock3 = new Frock();
        System.out.println(frock1.serialNumber);
        System.out.println(frock2.serialNumber);
        System.out.println(frock3.serialNumber);

    }
}

第三题

package homework;

public class HomeWork03 {
    public static void main(String[] args) {
        Animal cat = new Cat();//父类引用指向子类对象
        cat.shout();
        Animal dog = new Dog();
        dog.shout();
    }
}

abstract class Animal {
    public abstract void shout();
}

class Cat extends Animal {
    @Override
    public void shout() {
        System.out.println("猫会喵喵叫...");
    }
}

class Dog extends Animal {
    @Override
    public void shout() {
        System.out.println("狗会汪汪叫...");
    }
}

第四题

 考察:匿名内部类

我的代码

package homework;

public class HomeWork04 {
    public static void main(String[] args) {
        CellPhone cellPhone = new CellPhone();
        cellPhone.testWork(new Calculator() {
            @Override
            public void work() {
                System.out.println("调用work()方法...");
            }
        });
    }
}
interface Calculator{
    void work();
}
class CellPhone{
    public void testWork(Calculator calculator){
        calculator.work();
    }
}

问题:没有设计运算方法

修改过后的代码

package homework;

public class HomeWork04 {
    public static void main(String[] args) {
        CellPhone cellPhone = new CellPhone();

        cellPhone.testWork(new Calculator() {
            @Override
            public void work(double n1, double n2) {
                System.out.println("res=" + (n1 * n2));
            }
        }, 5, 6);
    }
}
interface Calculator{
    void work(double n1,double n2);
}
class CellPhone {
    public void testWork(Calculator calculator,double n1, double n2){
        calculator.work(n1,n2);
    }
}

需要思考的点:

public void testWork(Calculator calculator,double n1, double n2)
因为需要在testWork方法中调用Calculator的work方法,所以参数必须要有以下要素
1.Calculator类的对象实例,2.需要运算的数据

第五题

package homework;


public class HomeWork05 {
    public static void main(String[] args) {
        A a = new A();
        a.hi();
    }
}
class A{
    public String NAME = "rose";
    public void hi(){
        class B{//局部内部类
            //错误:私有常量即被final修饰的变量
            private final String NAME = "jack";
            public void show(){
                //重名的情况调用外部类的NAME: A.this.NAME
                System.out.println("name =" + NAME + " 外部类A的name=" + A.this.NAME);

            }
        }
        //局部内部类B类的作用域在方法hi()中
        //在方法hi()中创建B类的对象实例,然后访问show()方法
        B b = new B();
        b.show();
    }


}

 

第六题

package homework.homework06;

interface Vehicles {
    //1.有一个交通工具接口类Vehicles,有work接口
    void work();
}
package homework.homework06;

public class Boat implements Vehicles{
    @Override
    public void work() {
        System.out.println("遇到大河时用Boat作为交通工具...");
    }
}
package homework.homework06;

public class Horse implements Vehicles{
    //2.有Horse类和Boat类分别实现Vehicles
    @Override
    public void work() {
        System.out.println("一般情况下用Horse作为交通工具...");
    }
}
​
package homework.homework06;

public class VehiclesFactory {
    //3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
    //创建方法,返回Horse和Boat的对象实例
    //为了代码的便利性,直接使用 类名调用,即需要把 getHorse()设置成static方法
    public static Horse getHorse() {
        return new Horse();
    }

    public static Boat getBoat() {
        return new Boat();
    }
}

​

package homework.homework06;

public class Person {
    //4.有Person类,有name和Vehicles属性,在构造器中为两个属性赋值
    private String name;
    private Vehicles vehicles;

    public Person(String name, Vehicles vehicles) {
        this.name = name;
        this.vehicles = vehicles;
    }

    public String getName() {
        return name;
    }

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

    public Vehicles getVehicles() {
        return vehicles;
    }

    public void setVehicles(Vehicles vehicles) {
        this.vehicles = vehicles;
    }

    //将过河和走路的方法都封装在Person类中
    public void passRiver(){
        //先从工厂得到一只船,然后调用work方法
        Boat boat = VehiclesFactory.getBoat();
        boat.work();
    }
    public void command(){
        Horse horse = VehiclesFactory.getHorse();
        horse.work();
    }
}
package homework.homework06;

public class HomeWork06 {
    public static void main(String[] args) {
        //5.实例化Person对象“唐僧”,要求一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具
        Person person = new Person("唐僧", new Horse());
        //调用平时和过河两种方法
        person.passRiver();
        person.command();
    }
}

 代码的问题点

在创建Person类的对象实例时,属性vehicles = new Horse(),但是调用command方法时,会再次创建一个Boat类对象,造成对象实例的浪费

解决办法:判断一下,当前的 vehicles属性 是否已经存在了

    //将过河和走路的方法都封装在Person类中
    //先从工厂得到一只船,然后调用work方法
    //判断一下,当前的 vehicles == null ,如果结果为true,就获取一艘船
    public void passRiver(){
       if(vehicles == null){
            vehicles = VehiclesFactory.getBoat();
       }

        vehicles.work();
    }

    //在创建Person类的对象实例时,属性vehicles = new Horse(),
    // 但是调用command方法时,会再次创建一个Boat类对象,造成对象实例的浪费
    //解决办法:判断一下,当前的 vehicles == null ,如果结果为true,就获取一匹马
    public void command(){
        if(vehicles == null){
            //向上转型,多态
            vehicles = VehiclesFactory.getHorse();
        }

        vehicles.work();//动态绑定
    }

回到main方法中运行,结果如下

 

 运行结果中,不论是过河还是走路都是交通工具Horse

原因:在创建对象时  

vehicles = new Horse();
也就是说vehicles ≠ null,就不会获取一艘船

解决办法,对vehicles的运行类型进行判断

     //将过河和走路的方法都封装在Person类中
    //先从工厂得到一只船,然后调用work方法
    //判断一下,当前的 vehicles == null ,如果结果为true,就获取一艘船
    //如何防止始终使用的是传入的马 ,使用 instanceof 对运行类型进行判断
    //vehicles == null ---> vehicles instanceof Boat = false, 取反为true
    //vehicles = 马对象 ---> vehicles instanceof Boat = false , 取反为true
    //以上两种都需要获取一艘船
    //vehicles = 船对象 ---> vehicles instanceof Boat = true , 取反为false,不需要再获取船
    public void passRiver(){
       if(!(vehicles instanceof Boat)){

            vehicles = VehiclesFactory.getBoat();
       }

        vehicles.work();
    }

    //在创建Person类的对象实例时,属性vehicles = new Horse(),
    // 但是调用command方法时,会再次创建一个Boat类对象,造成对象实例的浪费
    //解决办法:判断一下,当前的 vehicles == null ,如果结果为true,就获取一匹马
    public void command(){
        if(!(vehicles instanceof Horse)){
            //向上转型,多态
            vehicles = VehiclesFactory.getHorse();
        }

        vehicles.work();//动态绑定
    }

 运行结果

 进一步优化:每次骑的都是同一匹马,但是不是一艘船,也就是说马对象是固定的,这个时候需要用到饿汉式

package homework.homework06;

public class VehiclesFactory {
    private static Horse horse = new Horse();//饿汉式

    private VehiclesFactory() {
    }

    //3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
    //创建方法,返回Horse和Boat的对象实例
    //为了代码的便利性,直接使用 类名调用,即需要把 getHorse()设置成static方法
    public static Horse getHorse() {
        return horse;
    }

    public static Boat getBoat() {
        return new Boat();
    }
}

拓展:遇到火焰山时,坐飞机

package homework.homework06;

public class Plane implements Vehicles{

    @Override
    public void work() {
        System.out.println("遇到火焰山时,乘坐飞机...");
    }
}
package homework.homework06;

public class VehiclesFactory {
    private static Horse horse = new Horse();//饿汉式

    private VehiclesFactory() {
    }

    //3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat
    //创建方法,返回Horse和Boat的对象实例
    //为了代码的便利性,直接使用 类名调用,即需要把 getHorse()设置成static方法
    public static Horse getHorse() {
        return horse;
    }

    public static Boat getBoat() {
        return new Boat();
    }
    public static Plane getPlane(){
        return new Plane();
    }
}

Person类

public void passFireHill(){
        if(!(vehicles instanceof Plane)){
            //向上转型,多态
            vehicles = VehiclesFactory.getPlane();
        }

        vehicles.work();//动态绑定
    }

 

package homework.homework06;

public class HomeWork06 {
    public static void main(String[] args) {
        //5.实例化Person对象“唐僧”,要求一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具
        Person person = new Person("唐僧", new Horse());
        //调用平时和过河两种方法
        person.passRiver();
        person.command();
        person.passRiver();
        person.passRiver();
        person.command();
        person.passFireHill();
    }
}

 

 

第七题

 考察知识点:成员内部类,访问成员内部类的方式

package homework;

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

        Car_ car_1 = new Car_(10);
        car_1.getAirInstance().flow();

        Car_ car_2 = new Car_(-3);
        car_2.getAirInstance().flow();

        Car_ car_3 = new Car_(43);
        car_3.getAirInstance().flow();

    }
}
class Car_{
    private double temperature;

    public Car_(double temperature) {
        this.temperature = temperature;
    }

   class Air{//成员内部类
        public void flow(){
            if(temperature > 40){
                System.out.println("温度大于40度,空调吹冷风...");
            }else if(temperature < 0){
                System.out.println("温度小于0度,空调吹暖风...");
            }else{
                System.out.println("温度在0-40之间,关闭空调...");
            }
        }
    }
    //访问成员内部类
    public Air getAirInstance(){
        return new Air();
    }

}

第八题

 考察知识点

 枚举类的代码

interface IA{
    void show();
}
enum Color implements IA{

    RED(255,0,0),BLUE(0,0,255),
    BLACK(0,0,0),YELLOW(255,255,0),
    GREEN(0,255,0);

    private int redValue;
    private int greenValue;
    private int blueValue;


    private Color(int redValue, int greenValue, int blueValue) {
        this.redValue = redValue;
        this.greenValue = greenValue;
        this.blueValue = blueValue;
    }

    @Override
    public void show() {
        System.out.println("redValue = " + redValue +" greenValue=" + greenValue +" blueValue=" + blueValue);
    }
}

思路错误:还是用的String类数据去验证,即输入,然后再判断,并不是enum对象

正确思路如下:

public class HomeWork08 {
    public static void main(String[] args) {
        //单个匹配
        Color red = Color.RED;
        red.show();
        switch (red){
            case RED:
                System.out.println("匹配到红色");
                break;
            case BLUE:
                System.out.println("匹配到蓝色");
                break;
            case BLACK:
                System.out.println("匹配到黑色");
                break;
            case GREEN:
                System.out.println("匹配到绿色");
                break;
            case YELLOW:
                System.out.println("匹配到黄色");
                break;
            default:
                System.out.println("没有匹配的");
        }

}

switch(red)

运行结果

 同时还可以用values方法和增强循环,把所有的对象都匹配一遍

public class HomeWork08 {
    public static void main(String[] args) {
        //把所有对象都匹配一遍的方法
        Color[] values = Color.values();
        for(Color color : values){
            color.show();
            switch (color) {
                case RED:
                    System.out.println("匹配到红色");
                    break;
                case BLUE:
                    System.out.println("匹配到蓝色");
                    break;
                case BLACK:
                    System.out.println("匹配到黑色");
                    break;
                case GREEN:
                    System.out.println("匹配到绿色");
                    break;
                case YELLOW:
                    System.out.println("匹配到黄色");
                    break;
                default:
                    System.out.println("没有匹配的");

            }  
        }   
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows11开启远程桌面和修改远程端口

该示例适用于大部分的Windows平台&#xff0c;示例基于Windows 11。操作系统&#xff1a;Windows 11 专业版。远程桌面默认使用TCP协议&#xff0c;默认端口为3389&#xff0c;修改后为13389。 一、开启远程桌面 控制面板-->系统与安全-->系统-->允许远程访问 二、修…

牛客网_华为机试题_HJ23 删除字符串中出现次数最少的字符

写在前面&#xff1a; 题目链接&#xff1a;牛客网_华为机试题_HJ23 删除字符串中出现次数最少的字符 编程语言&#xff1a;C 难易程度&#xff1a;简单 一、题目描述 描述 实现删除字符串中出现次数最少的字符&#xff0c;若出现次数最少的字符有多个&#xff0c;则把出现次数…

09 虚拟机配置-虚拟机描述

文章目录 09 虚拟机配置-虚拟机描述9.1 概述9.2 元素介绍9.3 配置示例 09 虚拟机配置-虚拟机描述 9.1 概述 本节介绍虚拟机domain根元素和虚拟机名称的配置。 9.2 元素介绍 domain&#xff1a;虚拟机XML配置文件的根元素&#xff0c;用于配置运行此虚拟机的hypervisor的类型…

英语中主语从句的概念及其用法,例句(不断更新)

主语从句的原理 主语从句是一种充当整个句子主语的从句&#xff0c;主语从句构成的句子&#xff0c;是要以引导词开头的。它可以用名词性从属连词、关系代词或关系副词引导。主语从句通常位于谓语动词之前&#xff0c;用于表示动作、状态或事件的主体。 以下是一些常用的引导主…

【Python习题集2】控制语句练习

控制语句 一、实验内容二、实验总结 一、实验内容 1.从键盘接收整数的一百分制成绩(0~100)&#xff0c;要求输出其对应的成绩等级A-E。其中&#xff0c;90分&#xff08;包含&#xff09;以上为A&#xff0c;80~89&#xff08;均包含&#xff09;分为B&#xff0c;70~79&#…

【Unity编辑器】拓展Hierarchy视图

目录 1、拓展菜单 2、拓展布局 3、重写菜单 1、拓展菜单 在Hierarchy视图中点击Create按钮&#xff0c;弹出的菜单My Create->Cube就是自定义拓展菜单 using UnityEngine; using UnityEditor;public class S2_拓展菜单 : MonoBehaviour {[MenuItem("GameObject/My …

Leetcode268. 丢失的数字

Every day a leetcode 题目来源&#xff1a;268. 丢失的数字 解法1&#xff1a;排序 代码&#xff1a; /** lc appleetcode.cn id268 langcpp** [268] 丢失的数字*/// lc codestart class Solution { public:int missingNumber(vector<int> &nums){int n nums.s…

分数傅里叶变换、小波变换和自适应神经网络

与普通的傅立叶变换&#xff0c;即 1 阶的分数阶傅立叶变换不同&#xff0c;分数阶傅立叶变换&#xff08;p ≠ 1&#xff09;提取的特征同时结合了原始图像的空间和频率特性。 分数傅里叶变换图像是介于原始图像和全傅里叶变换图像之间的东西。 Vander Lugt 相关器可以根据傅…

Playwright之初体验

参考文件 官方文档&#xff1a;https://playwright.dev/docs/intro GitHub链接&#xff1a;https://github.com/microsoft/playwright-python Playwright简介 Playwright Test是专门为满足端到端测试的需求而创建的。Playwright支持所有现代搜索引擎&#xff0c;包括Chrome、…

linux基础简介(一)

1.Linux内核 ​ Linux 系统从应用角度来看&#xff0c;分为内核空间和用户空间两个部分。内核空间是 Linux 操作系统的主要部分&#xff0c;但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要件。 ​ Linux 的内核主要由 5…

Android Framework基础面试篇~

在Android应用开发面试中&#xff0c;针对Framework的问题是常被考察的。以下是一些常见的Framework金典面试题目及其详解&#xff1a; 1. 什么是Android应用生命周期&#xff1f;你能描述一下它包含哪几个阶段吗&#xff1f; Android应用生命周期指的是应用从启动到关闭的整…

[oeasy]python0048_注释_comment_设置默认编码格式

注释Comment 回忆上次内容 使用了版本控制 git 制作备份进行回滚 尝试了 嵌套的控制结构 层层 控制 不过 除非 到不得以尽量不要 太多层次的嵌套 这样 从顶到底含义 明确而且 还扁平 扁平 也能 含义明确 还可以 做点什么&#xff1f; 让程序含义 更加明确呢&#xff1f;&…

数据结构学习分享之栈和队列详解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:数据结构学习分享⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你了解更多数据结构的知识   &#x1f51d;&#x1f51d; 数据结构第五课 1. 前言&a…

文心一言 VS chatgpt (14)-- 算法导论3.2 2~3题

二、证明等式&#xff08;3.16&#xff09;&#xff1a;a ^ {\log_b c} c ^ {\log_b a}。 文心一言&#xff1a; chatgpt&#xff1a; 我们需要证明的等式为&#xff1a; a log ⁡ b c c log ⁡ b a a^{\log_b c} c^{\log_b a} alogb​cclogb​a。 首先&#xff0c;将 l…

时序预测 | MATLAB实现ARIMA-BP组合模型时间序列预测

时序预测 | MATLAB实现ARIMA-BP组合模型时间序列预测 目录 时序预测 | MATLAB实现ARIMA-BP组合模型时间序列预测预测效果基本介绍模型原理程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现ARIMA-BP组合模型时间序列预测。 模型原理 ARIMA-BP组合模型是一种常用的时间…

2023年第二届材料科学与工程国际会议(CoMSE 2023) | IOP-JPCS出版

会议简介 Brief Introduction 2023年第二届材料科学与工程国际会议(CoMSE 2023) 会议时间&#xff1a;2023年7月21日-23日 召开地点&#xff1a;中国泰州 大会官网&#xff1a;www.icomse.org CoMSE 2023由四川大学、华南理工大学亚热带建筑科学国家重点实验室、国际电气电子和…

PCL学习四:RANSAC-随机采样一致性

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 1. RANSAC 概念及作用 RANSAC&#xff08;Random Sample Consensus&#xff0c;随机采样一致性&#xff09;是一种迭代方法&#xff0c;作用&#xff1a;从包含异常值的一组数据中估计数学模型的参数&#xff0c;RANSAC 算…

AIGC:【LLM(一)】——LoRA微调加速技术

文章目录 一.微调方法1.1 Instruct微调1.2 LoRA微调 二.LoRA原理三.LoRA使用 一.微调方法 Instruct微调和LoRA微调是两种不同的技术。 1.1 Instruct微调 Instruct微调是指在深度神经网络训练过程中调整模型参数的过程&#xff0c;以优化模型的性能。在微调过程中&#xff0c…

Flutter——最详细(TextField)使用教程

TextField简介 文本输入框&#xff0c;拥有复杂的属性。可指定控制器、文字样式、装饰线、行数限制、游标样式等。监听输入框变动事件。 使用场景&#xff1a; 搜索框&#xff0c;输入账号密码等 属性作用controller输入框监听器decoration输入框装饰属性textAlign内容对齐方式…

UE5.1.1 C++ 从0开始 (1.人物移动)

开个天坑&#xff0c;UE5.1.1的移动代码做了一个大更新&#xff0c;对于我这种万年蓝图然后正在转C的人来说可以说是个挑战也可以说是个更方便我去工作的一个点。同时斯坦福大学的那个教程的开头几个章节就不适用了&#xff0c;对于学习UE5.1.1的同学来说。所以我这里会尽量每天…