java语言程序设计类与对象课后作业 - 20243867孙堃2405

news/2025/10/19 16:23:57/文章来源:https://www.cnblogs.com/sunkun116/p/19150997

一、课件代码验证

1. 自定义类与对象使用代码

// 自定义类 MyClass
class MyClass {// 私有字段private int value;// 公有字段public String Information;// 方法:设置value值public void setValue(int value) {this.value = value;}// 方法:获取value值public int getValue() {return this.value;}// 自定义方法public void myMethod(String str) {System.out.println("传入的字符串:" + str);}
}// 测试类
public class ClassAndObjectTest {public static void main(String[] args) {// 创建类的实例,定义对象变量引用实例MyClass obj = new MyClass();// 调用类的公有方法obj.myMethod("Hello");// 给属性赋值obj.setValue(100);// 输出属性当前值System.out.println(obj.getValue());// 直接访问对象公有字段obj.Information = "Information";// 输出公有字段当前值System.out.println(obj.Information);}
}
  • 验证结果:运行后依次输出“传入的字符串:Hello”“100”“Information”,符合预期,表明对象创建、方法调用及字段访问正常。

2. 对象判等代码

// 定义Foo类
class Foo {int value = 100;
}// 测试类
public class Test {public static void main(String[] args) {Foo obj1 = new Foo();Foo obj2 = new Foo();System.out.println(obj1 == obj2); }
}
  • 验证结果:输出“false”。因“==”用于引用类型时比较对象地址,obj1和obj2是两个不同对象,地址不同,结果正确。

3. 重写equals方法代码

// 自定义类 MyTestClass
class MyTestClass {public int Value;// 构造方法public MyTestClass(int initValue) {Value = initValue;}// 重写equals方法@Overridepublic boolean equals(Object obj) {// 实际开发中需添加参数有效性检测,此处为简化示例return ((MyTestClass) obj).Value == this.Value;}
}// 测试类
public class ObjectEquals {public static void main(String[] args) {MyTestClass obj1 = new MyTestClass(100);MyTestClass obj2 = new MyTestClass(100);System.out.println(obj1 == obj2); System.out.println(obj1.equals(obj2)); }
}
  • 验证结果:依次输出“false”“true”。“==”比较地址不同为false,重写后的equals比较字段值相同为true,符合逻辑。

4. 构造方法相关代码(编译错误示例)

// 测试类
public class Test {public static void main(String[] args) {Foo obj1 = new Foo(); }
}class Foo {int value;// 自定义带参构造方法public Foo(int initValue) {value = initValue;}
}
  • 验证结果:编译报错。因类自定义带参构造方法后,系统不再提供默认无参构造方法,创建对象时调用无参构造方法会失败,需手动添加无参构造方法才能编译通过。

5. 类字段初始化顺序代码

// 定义初始化块类
class InitializeBlockClass {// 字段初始值public int field = 100;// 初始化块{field = 200;}// 带参构造方法public InitializeBlockClass(int value) {this.field = value;}// 无参构造方法public InitializeBlockClass() {}
}// 测试类
public class TestInitialize {public static void main(String[] args) {InitializeBlockClass obj = new InitializeBlockClass();System.out.println(obj.field); obj = new InitializeBlockClass(300);System.out.println(obj.field); }
}
  • 验证结果:依次输出“200”“300”。先执行字段初始值(100),再执行初始化块(200),最后执行构造方法(无参时保持200,带参时改为300),符合初始化顺序规则。

6. 装箱拆箱代码

// 测试类
public class BoxAndUnbox {public static void main(String[] args) {int value = 100;Integer obj = value; int result = obj * 2; System.out.println(result); }
}
  • 验证结果:输出“200”。装箱时自动调用Integer.valueOf(100),拆箱时自动调用obj.intValue(),运算正常,结果正确。

7. Integer诡异特性代码

// 测试类
public class StrangeIntegerBehavior {public static void main(String[] args) {Integer i1 = 100;Integer j1 = 100;System.out.println(i1 == j1); Integer i2 = 129;Integer j2 = 129;System.out.println(i2 == j2); }
}
  • 验证结果:依次输出“true”“false”。Integer缓存-128到127之间的对象,100在缓存范围内,i1和j1引用同一对象;129超出范围,创建新对象,地址不同。

二、动手动脑问题整合

1. 问题:引用类型变量与原始数据类型变量的区别

  • 问题描述:早期定义变量如int value=100,示例中定义MyClass obj = new MyClass(),这两种变量是否一样?
  • 分析与解答:不一样,核心区别如下:
    • 内存分配:原始数据类型变量声明时直接分配内存并存储值;引用类型变量声明时仅存储对象地址,不直接创建对象,默认值为null。
    • 数据存储:原始数据类型变量存储具体数值;引用类型变量存储对象在内存中的地址,通过地址访问对象。

2. 问题:对象变量未初始化编译错误原因

  • 问题描述:代码public class Test {public static void main(String[] args){MyClass obj;System.out.println(obj.toString());}}为何无法通过编译?
  • 分析与解答:Java要求变量必须显式初始化。对象变量obj仅声明未赋值,未引用任何对象,也未设为null,编译器无法确定其状态,故编译报错,需改为MyClass obj = null(虽调用方法会抛空指针异常,但可通过编译)。

3. 问题:静态方法中访问类实例成员的方式

  • 问题描述:静态方法只允许访问静态数据,如何在静态方法中访问类的实例成员?
  • 分析与解答:需在静态方法中创建类的实例,通过实例访问实例成员,代码示例如下:
class MyClass {// 实例字段public int value;// 静态方法public static void staticMethod() {// 创建类的实例MyClass obj = new MyClass();// 通过实例访问实例成员obj.value = 100;System.out.println(obj.value);}
}public class TestStatic {public static void main(String[] args) {MyClass.staticMethod(); }
}
  • 运行结果:输出“100”,表明通过创建实例可在静态方法中访问实例成员。

4. 问题:静态初始化块的执行顺序

  • 问题描述:运行TestStaticInitializeBlock.java示例,总结静态初始化块的执行顺序。
  • 分析与解答
    • 静态初始化块仅执行一次,无论创建多少个类的对象,只在类第一次加载时执行。
    • 创建子类型对象时,会先执行父类型的静态初始化块,再执行子类型的静态初始化块。
    • 示例代码(父类与子类):
// 父类
class Parent {static {System.out.println("父类静态初始化块");}
}// 子类
class Child extends Parent {static {System.out.println("子类静态初始化块");}
}// 测试类
public class TestStaticInitializeBlock {public static void main(String[] args) {Child child1 = new Child();Child child2 = new Child();}
}
  • 运行结果:仅输出“父类静态初始化块”“子类静态初始化块”,且只输出一次,验证上述执行顺序。
  1. 问题:总结构造方法的“与众不同之处”
  • 问题描述:分析代码class MyTestClass {public int Value;public MyTestClass(int initValue) {Value = initValue;}}中构造方法的特殊之处。
  • 分析与解答:
    • 方法名与类名完全相同,无返回值(包括void)。
    • 对象创建时自动调用,用于初始化对象的字段和执行初始化操作。
    • 若类未定义构造方法,系统自动提供无参默认构造方法;若自定义构造方法,默认构造方法失效。
    • 支持重载,可通过不同参数列表定义多个构造方法,且构造方法间可通过this()相互调用。

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

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

相关文章

2025年智能防爆灯/工矿灯厂家推荐排行榜,专业安全与高效照明解决方案!

2025年智能防爆灯/工矿灯厂家推荐排行榜,专业安全与高效照明解决方案!随着工业和矿业领域的快速发展,智能防爆灯和工矿灯的需求日益增长。这些灯具不仅需要满足基本的照明需求,还需要具备高安全性、耐用性和智能化…

AI模型测评平台工程化实战十二讲(第五讲:大模型测评分享机制:安全、高效的结果展示与协作)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java基础——包机制,JavaDoc生成文档

Java基础——包机制,JavaDoc生成文档包机制 为了更好地组织类,Java提供了包机制,用于区分类名的命名空间 //包语句的语法结构如下 package pkg1[. pkg2[. pkg3...]]; (若文件属于包,必须在首行加上该语句) //使用…

Java 无锁方式实现高性能线程

一、传统单例实现的局限性 在现代高并发Java应用中,传统的单例实现方式(如DCL双重检查锁定)虽然解决了线程安全问题,但仍存在以下局限性:依赖锁机制(synchronized)导致上下文切换开销 volatile关键字在某些JVM实…

用 【C# + Winform + MediaPipe】 构建人脸468点识别

用 【C# + Winform + MediaPipe】 构建人脸468点识别2025-10-19 16:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; dis…

10.19日模考总结

本周进行了标准OI普及组模考测试 得分情况题目名称 做法 预计得分 实际得分火车线路 模拟 100 100奶牛卧室 同余定理 100 70小信的同调序列 动态规划 10 30新小信走迷宫 贪心、动态规划 20 40做题流程 首先点开第一题,…

详细介绍:2020年美国新冠肺炎疫情数据分析与可视化

详细介绍:2020年美国新冠肺炎疫情数据分析与可视化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

java流程控制。

用户交互Scanner之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner 是Java5 的新特征,我们可以通过Scanner 类来获取用户的输入…

mysql嵌套查询如何利用索引?

SELECT foreach_id FROM zyp_作业计划 where jtPlanKey = 2000000507162 --jtPlanKey 为主键 ,int64类型,foreach_id 为varcharSELECT OnLineVidio FROM jobbill where foreach_id =‘731221717606469’ …

Misaka2298 的写题自检表

数据范围看了吗?会爆 int 吗?会爆 longlong 吗? debug 删完了吗? freopen 写了吗? 题目真的读懂了吗?数据范围有漏看吗? 有时间写对拍吗?对拍好写吗?是应该继续冲还是应该写拍子呢? 会爆内存吗?检查空间占用…

解码Linux文件IO之LCD屏原理及应用

LCD 基本概念与结构 核心定义 LCD(Liquid Crystal Display)即液晶显示器,核心是通过液晶分子的电光效应控制光线透过,结合光学组件实现图像显示。其基本构造是在两片平行玻璃基板间夹着液晶盒,关键组件分工如下:…

2025年扑灭司林厂家推荐排行榜,高效环保扑灭司林,专业生产与市场口碑深度解析!

2025年扑灭司林厂家推荐排行榜:高效环保扑灭司林,专业生产与市场口碑深度解析随着环保意识的不断增强,高效环保的扑灭司林产品越来越受到市场的青睐。扑灭司林作为一种重要的农药成分,在农业、林业以及公共卫生领域…

微信小程序入门学习教程,从入门到精通,WXML(WeiXin Markup Language)语法基础(8) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java 中 NullPointerException 的 3 个常见原因及解决

空指针是 Java 最常见异常,主要因 “调用了 null 对象的方法 / 属性”,常见场景:​ 对象没初始化就用(如User u = null; u.getName()),解决:先u = new User();​ 方法返回 null 没判断(如String s = getStrin…

Java 方法参数传递:到底是值传递还是引用传递?

结论:只有值传递!很多人误解引用类型是 “引用传递”,其实是传递了 “引用的副本(地址值)”。​ 比如传 int 时,复制值给方法参数,修改参数不影响原变量;传对象时,复制地址给参数,若修改参数指向的对象内容(…

ES6 箭头函数

引言ES6 箭头函数(=>)彻底改变了 JavaScript 的编码风格,提供简洁语法和词法作用域绑定。但不当使用可能引发意外行为,本文将揭示其核心特性和避坑指南。1. 词法绑定 this:告别 bind 箭头函数继承外层 this,解决…

centos 7.9快速部署ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统用于信息收集

github项目地址:https://github.com/honmashironeko/ARL-docker #感谢项目作者做出的贡献如果git下载不了,下载zip包 通过网盘分享的文件:ARL-docker-main.zip 链接: https://pan.baidu.com/s/1lF3EBWCkJHjW0P9Irf…

3 分钟搞懂 Java 中 this 关键字的用法

Java 里 this 常被初学者忽略,其实就两个核心作用:一是区分成员变量和局部变量,比如构造方法中this.name = name,避免变量名冲突;二是调用本类其他构造方法,用this(参数)在构造方法首行调用,减少重复代码。​ 示…

折腾笔记[32]-windows部署vscode-server及使用命令行编译c#.net工程

工控机windows双击exe一键运行vscode-server及使用命令行编译c#.net工程.摘要 工控机windows双击exe一键运行vscode-server及使用命令行编译c#.net工程. 1. 一键运行code-server 下载地址:[https://gitee.com/David-Co…

Java 中 ArrayList 和 LinkedList 的选择技巧

日常开发选集合常纠结,记住两个关键场景:​ 若频繁做 “查询”(比如get(index)),选 ArrayList,底层数组支持随机访问,速度快;若频繁做 “增删”(尤其是中间位置),选 LinkedList,底层链表只需改指针,不用像…