(Java)类与对象部分实验

【基础训练 1】循序渐进了解对象知识。

【目标】了解对象与对象引用的关系

(1) 构建 Point 类

(2) 创建对象。

当我们直接调用对象的时候会输出 类名@对象的哈希码

(3) 编写一个 toString()方法

增加了一个方法之后,发现结果截然不同。

为什么会出现不一样的结果呢?

在没有加toString()方法时,默认使用的Object类的toString方法返回一个字符串:

此时,当我们重写toString方法时,会return返回对应的字符串:return x+","+y;

只不过这里初值默认为0。

(4) 在 main 方法添加如下代码,定义另一对象引用变量 b,让 b 和 a 引用同一对象。

其实a与b指向同一内存地址。

(5) 定义构造方法。

所以这里需要再添加默认的构造方法。

(6) 用新定义的构造方法创建对象,改变引用变量 b,让其指向新建对象。

(7) 定义一个对象数组c:Point c[ ]={a,b};输出 c[0],c[1]:

(8) 定义一个更大数组并循环输出整个数组:

(9)添加如下代码:

c[6] = new Point(4,6);

重新观察输出。

(10) 添加如下代码: c[7] = new Point( );

观察编译错误,体会默认构造方法什么时候系统会自动提供。

我似乎这里没有编译出错。

(11) 编写无参构造方法。

public Point( ) {

this(10,10); //用 this 调用另一构造方法,等价于x=10;y=10

}

重新观察输出结果,注意 c[0]和 c[7] :

(12) 将有参构造方法的参数名定为 x,y,则程序做如下修改:

public Point(int x,int y) {

this.x = x;

this.y = y;

}

理解 this 的作用。没有 this 会如何?

Java中为解决变量的命名冲突和不确定性问题,引入关键字this代表其所在方法的当前对象的引用:

1)构造方法中指该构造器所创建的新对象;

2)方法中指调用该方法的对象;

3)在类本身的方法或构造器中引用该类的实例变量(全局变量)和方法。

【思考】toString()方法能写成如下形式否?

public String toString() {

return this.x + "," + this.y;

}

可以,但没有必要,因为直接写 x,y 也是指对象的 x,y 属性。

【基础训练 2】类成员与对象成员

【目标】理解类成员和对象成员的访问特点。

(1) 没有 static 修饰的成员为对象成员

(2) 在静态方法中能直接访问实例变量吗?

在 main 方法中增加一条输出语句,直接输出 value 值

System.out.println(value);

分析编译错误指示,解析错误原因。

静态方法不能直接访问对象成员。

(3)将 value 属性改为 static 修饰,新的程序代码如下:

类成员(用static修饰)依托类,具有唯一性,表示类的共享数据。

(4) 在实例方法中能访问类成员吗?

在类 Counter 中增加一个实例方法

public void incValue( int x){

value += x;

}

在 main 方法中增加 2 行代码:

incValue(5);

System.out.println(value);

调用该方法并输出结果。

类的静态成员与实例成员的区别

1、有static修饰的成员变量或成员函数称为静态成员。

2、在内存中,类的静态数据成员占有一块特定的内存空间,被该类的所有实例(对象)共享。而同一个类的不同对象的实例数据成员相互独立,占有各自的存储空间。

3、静态变量不能在构造函数中初始化,必须在类外的文件作用域中定义静态数据成员,即为它们分配存储空间。

4、在静态函数中,只能访问类的静态成员变量和静态函数,而不能访问类的实例数据成员。

5、静态函数和普通函数的本质区别:编译时,编译器没有为静态函数指定this参数,而普通函数有this参数。

参考链接:

https://www.cnblogs.com/almm/p/toString.html

https://www.cnblogs.com/zheting/p/7751752.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值