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

一、方法相关问题

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)changeStr()的功能:
初始化一个字符串变量x,修改传入变量x的值。
2)changeArr()的功能:
初始化一个字符串数组strs[ ],修改传入数组strs[]中元素的值。

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

1)main方法中的x没有被改变。
2) 由于Java中的字符串有不可变性以及方法参数的值传递模式,所以字符串内部的修改不会影响到外部变量的值。

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

1)main方法中的args数组的内容会改变。
2)由于数组是引用类型,所以方法内部的修改会影响到外部数组的数值。

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

1)args数组中的值可以通过命令行传递参数进来的数值。
2)或者可以在程序内部创建一个新的字符串数组,然后将新的字符串数组命名给args数组。

二、数组相关问题

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

1)[2,1,0] [2,1,0]
2)首先创建了一个长度为3的整型数组,arr[0]=1初始化数组中的第
一个值为1,arr[1]=1初始化数组中第二个数值为1,创建数组arrX
使其和arr指向同一个数组,再改变数组中的第一个值为2,所以
输出[2,1,0]。

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

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

字符串是不可变的,但是strArr[ ]是定义的引用类型数组,数组中的每个元素是可以转变string对象的引用。

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

由于第二维数组并没有被定义,所以就可以自行定义为不同长度的int数组,如下是相关代码的实现。

public class Main{
     public static void main(String[] args){
     int[5][] array = new int[5][];
     array[0] = new int[]{1,2,3,4,5};
     array[1] = new int[]{1,2,5};
     array[2] = new int[]{1,4,5};
     array[3] = new int[]{1,2,3,4,5};
     array[4] = new int[]{1,5};
      for(int i = 0;i <array.length;i++)
      {
         for(int j = 0;j<array[i].length;j++)
           {
              System.out.print(array[i][j]+" ");
            }
            System.out.println();
       }
     }
   }         

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

1)类是一种抽象数据类型,用于描述一类对象的特征和行为,为了某种特定的对象而创建。
2)对象是类的一个实例,对象可以分配内存空间,可以通过调用类定义来进行某些操作。
3)Math没有对象,其主要用来提供数学运算的静态方法,可以通过不用创建类的实例来直接调用。
4)private: hashCode()、compareChars(char[] x, int xIndex, char[] y, int yIndex)等。
这样设计可以保护类的内部状态,优化一些程序提高性能,保证实现的正确性,维持不可变性。
5)public: length()、equals(Object anObject)等。

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

1)普遍使用这些模式因为其优点,可以控制对属性的访问、可以提高安全性,防止外部对代码的修改、可以提高灵活性。
2)setter/getter模式是实现封装的一种方式,可以更好地实现封装性原则。

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

1)对象的属性可以在声明时就直接初始化,也可以在初始化块中进行初始化,也可以在要使用前就进行初始化等,对象的属性可以在很多时机上进行初始化。
2)方法相对应时机,直接赋值、构造方法的参数、使用前进行初始化赋值。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值