尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

第02周 预习、实验与作业:Java基础语法2、面向对象入门

第02周 预习、实验与作业:Java基础语法2、面向对象入门
📅 发布时间:2026/6/19 23:37:58

集美大学课程实验报告-第02周 预习、实验与作业:Java基础语法2、面向对象入门

项目名称 内容
课程名称 数据结构
班级 网安2413
指导教师 郑如滨
学生姓名 林沁茹
学号 202421336067
实验项目名称 第02周 预习、实验与作业:Java基础语法2、面向对象入门
上机实践日期
上机实践时间 2学时

一、目的(本次实验所涉及并要求掌握的知识点)

以下内容请根据实际情况编写

  • 了解java中方法、数组、引用数据类型
  • 掌握面向对象基础 ”基本概念、封装与模块化、对象的初始化

二、课前问题解答

题目1—方法相关问题

public class Main {static void changeStr(String x) {x = "xyz";}static void changeArr(String[] strs) {for (int i = 0; i < strs.length; i++) {strs[i] = strs[i]+""+i;}}public static void main(String[] args) {    String x = "abc";changeStr(x);System.out.println(x);changeArr(args);System.out.println(Arrays.toString(args));}
}

对于如上代码:
1.1 changeStr与changeArr的功能各是什么?
1.2 main方法的x有没有被改变?为什么?
1.3 main方法的args数组的内容有没有被改变?为什么?
1.4 args数组中的值是从哪里来的?要怎么才能给他赋值。

1.1changeStr:该方法接收一个String类型的参数x,并在方法内部将x的值修改为"xyz"。(由于String在Java中是不可变的,且Java是按值传递的,因此该方法实际上不会修改调用者传入的原始String对象的值,实际上是新建一个对象来存储,且使x指向该地址)changeArr:该方法接收一个String数组strs,然后遍历数组中的每一个元素,并在每个元素后面拼接上当前元素的索引i。(由于数组是引用类型,方法内部操作的是原始数组对象的引用副本,因此对数组元素的修改会直接影响调用者传入的原始数组)
1.2 
main方法的x没有被改变,因为Java 是按值传递,changeStr(x) 传递的是x的引用地址(即x指向的字符串 "abc" 的地址)在changeStr 方法内部,x="xyz"; 只是让局部变量 x 指向了一个新的字符串对象 "xyz"的地址,而不会影响 main方法中的原始变量x。因此,main 方法中的 x 仍然指向原来的字符串 "abc",输出结果为 abc。
1.3 
main方法的args数组的内容有被改变,因为args是一个String数组,属于引用类型。changeArr(args)传递的是 args 数组的引用地址,这个地址指向的仍然是原始数组对象。在changeArr方法内部,通过strs[i]=strs[i]+""+i; 修改了数组元素的值,由于strs和args实际指向的是同一个数组对象地址,因此修改会直接反映到main方法的args数组上。
1.4
来源:args是main方法的参数,表示命令行参数。
赋值:当我们在命令行(或终端)中运行程序时,可以在类名后面传入参数,这些参数会被自动解析为String数组并传递给main方法的args。

题目2—题目数组相关问题

对于如下程序

int[] arr = new int[3];
arr[0] = 1; arr[1] = 1;
int[] arrX = arr;
arr[0] = 2;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arrX));

2.1 这段程序输出结果是什么?为什么?

String[] strArr = {"aa","bb","cc"};
strArr[1] = "xx";
System.out.println(Arrays.toString(strArr));

2.2 字符串是不可变类,为什么可以对strArr[1]赋值"xx"。

2.1
[2,1,0]
[2,1,0]
数组arr和arrX存储的是数组对象的引用(地址),而不是数组本身,int[] arrX = arr这行代码并没有创建新的数组,而是让arrX指向arr所引用的同一个数组对象,修改arr的同时也是在修改arrX。
2.2
String的不可变性,指的是String对象本身的内容不能被修改。数组本身是可变的,我们可以修改数组中元素的引用。strArr[1] = "xx"; 并不是修改原字符串"bb",而是让数组的第二个元素指向一个新的字符串对象 "xx"的地址。

题目3—使用int[5][]定义一个二维数组,其第二维到底有多长?尝试补全代码,然后使用foreach获其他循环方法遍历这个二维数组?

第二维(列)的长度没有定义,即每一行的列数可以不同,是可变的(也叫“锯齿数组”).
public class Main {public static void main(String[] args) {int[][] arr = new int[5][5];for (int i = 0;i<arr.length;i++) {for (int j= 0;j<arr[i].length;j++) {arr[i][j]=i * 10+j; }}foreach(arr);
}public static void foreach(int[][] arr) {for (int[] row : arr) { for (int i: row) { System.out.print(i+" ");}System.out.println();}}
}

题目4—类与对象的区别是什么? Math类有对象吗?String类有什么属性是private的,有什么方法是public的,为什么这样设计(尝试举两例说明)?

1.类是对象的模板或蓝图,定义了对象的属性(字段)和行为(方法);对象是类的实例,是具体的实体
2.Math类没有对象
3.
(1)
1.private final char value[],防止外部直接修改字符数组,保证String的不可变性
2.private int hash,哈希码是内部优化细节,外部无需访问,这样可以防止外部篡改哈希码
(2)
1.public charAt(int index),提供安全访问字符的方式,而不暴露内部 value 数组,还可以保证不可变性(返回的是 char,不是引用)
2.public String substring(int beginIndex),提供字符串截取功能,而不暴露内部实现,还可以返回新 String 对象,不修改原字符串(符合不可变性)

题目5—将类的属性设置为public可以方便其他类访问,但为什么Java中普遍使用setter/getter模式对对象的属性进行访问呢?这与封装性又有什么关系?

如果将类的属性直接设为public,外部类可以直接访问和修改,会无法添加额外逻辑,还会无法控制赋值,破坏封装性;
使用setter/getter模式,可以在 setter 中添加验证逻辑,还可以getter中返回副本或计算值(如返回格式化的字符串),封装的核心思想是隐藏内部实现,只暴露必要的接口,而setter/getter 是对属性的受控访问,而不是直接暴露,符合封装性。

题目6—对象的属性可在什么时候进行初始化?都有哪些进行初始化的办法?

对象的属性可以在声明时、构造方法中、初始化块中、静态初始化块中、setter 方法中或通过反射进行初始化。
方法:1.在定义成员变量时直接赋值;2.在构造方法中对属性赋值;3.使用 {} 初始化块;4.使用 static {} 初始化静态属性,类加载时执行一次;5.对象创建后,通过 setter 方法赋值;6.使用反射机制动态设置属性值

题目7—进阶(可选):尝试使用作用域来说明封装性。

封装性通过作用域(访问修饰符)实现,控制类成员的可见性。
1.使用 private 限制直接访问
2.使用 default 实现包级私有(同一个包内的类可以访问,但对外部包隐藏)
3.使用 protected 允许子类访问
4.使用 public 提供公共接口

三、实验使用环境(本次实验所使用的平台和相关软件)

以下请根据实际情况编写

  • 操作系统:Windows 11专业版
  • 编程语言:Java
  • 开发工具:[eclipse)

四、附件-参考文件

  1. Java实验教学大纲

  2. PTA中提交Java程序的一些套路

  3. Java9相关资料(JShell简易教程等)

  4. IntelliJ IDEA的基本使用

相关新闻

  • 2025实测:6款主流公众号编辑器大比拼,解决你的排版难题!
  • 设计模式-适配器模式 - MaC
  • 达梦数据库安装和使用

最新新闻

  • 微信小程序一键去水印,保存高清视频素材就这么简单 - 爱上科技热点
  • 注销公告登报怎么线上办理?2026这样简单又省心 - 资讯速览
  • 2026 年 6 月昆明无套路包包回收清单,剔除流动私人商贩 - 讯息早知道
  • 东莞闲置大牌包怎么变现?2026 正规靠谱回收渠道合集 - 薛定谔的梨花猫
  • 2026 年淄博市厨卫屋顶防水修缮三家横向测评:吉修匠 99.8 分稳居榜首 - 吉修匠
  • 嵌入式GUI内存设备:emWin旋转缩放与动画特效实战指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号