课堂作业(类与对象)
一:验证ClassAndObjectTest.java
1)代码:
public class ClassAndObjectTest {
public static void main(String[] args) {
//创建类的实例,定义一个对象变量引用这一实例
MyClass obj = new MyClass();
//通过对象变量调用类的公有方法
obj.myMethod("Hello");
//给属性赋值
obj.setValue(100);
//输出属性的当前值
System.out.println(obj.getValue());
//直接访问对象公有字段
obj.Information = "Information";
//输出对象公有字段的当前值
System.out.println(obj.Information);
}
}
/**
* 自定义Java类的示例
*/
class MyClass {
// 公有字段
public String Information = "";
// 自定义公有Java实例方法
public void myMethod(String argu) {
System.out.println(argu);
}// 定义属性:私有字段+get方法+set方法
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
2)结果:
3)结果分析:需要定义一个对象变量引用实例,赋值给对象变量,再进行调用。
二、解决问题系列
int数据类型,可以直接使用“==”判断两变量值是否相等,那么对象变量也可以使用“==”判断两变量值是否相等吗?
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Foo obj1 = new Foo();
Foo obj2 = new Foo();
System.out.println(obj1==obj2);
}
}
class Foo{
int value=100;
}

结论:字符串只可以用equals比较,不能用"=="。
三、以下代码为何无法通过编译?哪儿出错了?
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Foo obj1 = new Foo();
}
}
class Foo{
int value;
public Foo(int initValue){
value=initValue;
}
}
结论:将“Foo obj1 = new Foo();”改为“Foo obj1 = new Foo(4)”。
用户自定义构造方法,引用时内部应有实参。
四、解决问题
早期我们经常这样定义变量“int value=100;”,而前面的示例中这样定义变量“MyClass obj=new MyClass();”,这两种方式定义的变量是一样的吗?
第一个是“原始数据类型”;
第二个是“引用类型”变量。
从变量与内存分配上讲,当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null。定义一个原始类型的变量时,会马上给其分配内存。
从变量的初始化上讲,在定义原始变量时,Java要求必须显式初始化变量;而对象变量的初始化:对象变量如果不引用一个真实的对象,则必须声明为null。
而且引用对象后的对象变量,如果不再使用此变量,JVM会回收MyClass对象所占用的内存(垃圾回收)。


浙公网安备 33010602011771号