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

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修改字符串x的内容为xyz
changeArr修改字符串数组内容,在strs[i]上的基础上改为strs[i]i
1.2 main方法的x有没有被改变?为什么?
传递过来的string x只是原本main中x的拷贝,并不对main中的x产生影响
1.3 main方法的args数组的内容有没有被改变?为什么?
没有,该数组并未进行初始化
1.4 args数组中的值是从哪里来的?要怎么才能给他赋值。
一般是从命令提示符中传值,也可以直接在java代码中赋值。而且这个数组的长度是动态的,根据传值的个数确定数组的长度。

2.数组相关问题

2.1 输出结果是什么?为什么?
结果是:
[2, 1, 0]
[2, 1, 0]
理由:通过int[] arrX = arr;语句,我们不难看出,arrX与arr的引用一致,,故对arr引用对象的改变,必然使得arrX引用的对象改变,实际上arr与arrX的引用为同一个。
使用数组的动态初始化会默认给数组赋值,所以会出现arr[3]的值为0
数组的默认初始化值:
整数类型:0
小数类型:0.0
布尔类型:false
字符类型:‘\u0000’
引用类型:null
2.2 字符串是不可变类,为什么可以对strArr[1]赋值"xx"。
不可变类是指类的实例一旦创建后,不能改变其成员变量的值。因为当字符串strArr[1]重新赋值,是在重写指定内存区域赋值,而不是在原有的value上进行赋值。

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

使用int[5][] 定义一个二维数组,其第二维到底有多长,取决于使用时定义的大小

//定义二维数组的二维长度依次递增
public class test2{
	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的,为什么这样设计(尝试举两例说明)?

1.对象是具有类类型的变量。 类是对象的抽象,而对象是类的具体实例。 类是抽象的,不占用内存,而对象是具体的,占用存储空间。 类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
2.无法创建 Math 类的对象,它的构造方法是private的,因此无法创建math类的对象,并且math类中的所有方法都是类方法,可以直接通过类名来调用它们
3.String的属性包括value,coder,hash,hashIsZero等等属于private类,public方法包括

public String() {
        this.value = "".value;
        this.coder = "".coder;
}
public String(char value[], int offset, int count) {
        this(value, offset, count, rangeCheck(value, offset, count));
    }

等等,这样设计的目的是有效的保证了数据的安全性与合法性。

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

为了隐藏对象的细节,让使用者不能随意访问数据,只能通过设计好的set/get方法来访问和修改数据。保证了数据的安全性,同时也确保了代码的可维护性,即与封装性的关系。

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

可以在一开始就进行初始化,也可以在准备使用之前进行初始化。
对象属性初始化的三种方法:声明该属性的时候初始化,构造方法中初始化,初始化块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值