第二周 预习:Java基本语法2、面向对象入门

黄文辉7001096 网络21级 2022-09-04 21:59:04

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的功能各是什么?

changeStr将字符串值改为“xyz"。

changeArr将数组元素及对应下标作为数组新的元素,即str[i]i。

1.2 main方法的x有没有被改变?为什么?

没有。基本数据类型作为方法参数时,changeStr方法传递的是x所存放引用的拷贝,不改变x的值。

1.3 main方法的args数组的内容有没有被改变?为什么?

没有,未初始化。

1.4 args数组中的值是从哪里来的?要怎么才能给他赋值。

toString方法将数组以指定形式输出。

cmd窗口运行时添加参数。

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 输出结果是什么?为什么?

[2, 1, 0]
[2, 1, 0]

int数组为定义值为NULL。 

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

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

重新读取了一块内存用于储存新的值,并将strArr[1]引用指向此块内存,并不是直接改变。

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

public class Main {
    public static void main(String[] args) {    
    	int [][] a=new int[5][];
		for (int i = 0; i < a.length; i++) {
          a[i] = new int[i+1]; 
          }   
		for (int i = 0; i < a.length; i++) {
			for(int j=0;j<i+1;j++)
			{
				 a[i][j]=j;
			}
		}
		for (int[] arr : a) {
			for (int arr2 : arr) {
				System.out.print(arr2);
			}
			System.out.println();
		}
    }
}
0
01
012
0123
01234

 第二维的长度与定义的大小有关,为最高维限制其能保存数据的最长的长度,然后再为每个元素单独分配空间。

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

类是具有相同属性和服务的一组对象的集合。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。

Math类无对象。Math的构造方法是private,无法创建对象。

length是private。toString()是public。将部分属性设置成private,控制外界对对象属性的不合理更改,以确保程序的稳定性。

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

setter/getter模式对对象属性访问可以对private类型的属性进行单一的操作,而无需破坏类外的任何代码。

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

可以在定义的时候初始化,也可在使用时初始化。

初始化的方法:声明该属性的时候初始化,在构造方法中初始化,在初始化块中初始化。

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

Java用一对大括号作为语句块的范围,称为作用域,作为在作用域里定义的一个变量,它只有在哪个作用域结束之前才可使用。语句在作用域内,在调用后执行。

...全文
185 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-Java 发布问题, 以便更快地解决您的疑问

4,145

社区成员

发帖
与我相关
我的任务
社区描述
为初学Java的大学生提供一个学习、交流的社区。 社区包括:技术文章、学习任务、在线课程、在线编程练习。
javajava-eeeclipse 高校
社区管理员
  • zhrb
  • kenandoer
  • 驼同学.
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

社区板块说明:
1. Java技术:包含Java技术的各种新闻、文章。
2. 教学频道:包含Java基础技术与Java教学中常用的一些文章。建议初学者、在线学习的同学在这里交流、提问、浏览课程学习相关文章。
3. 学习任务:老师发布的教学任务。
4. 其他技术:其他技术文章。

社区链接说明:
1. 在线学习:本社区对应的在线课程(免费学习)。
2. 编程练习:本社区使用的在线编程练习平台(加入在线课程后,免费练习)。
3. 项目实例:一个简单的Java项目示例。
 

试试用AI创作助手写篇文章吧