标题: 关于对象创建的问题 [打印本页] 作者: 龚建锋 时间: 2012-7-25 18:45 标题: 关于对象创建的问题 /*
* 创建对象的操作
* */
public class CreatDuiXiang {
public static void main(String[] args) {
People p = new People();
p.sport();
p.riCheng();
}
}
class People {//疑问1) 没有主方法为什么编译能通过
int age;// 疑问2)没赋值,为什么能用
String name;
void sport() {
System.out.println(name + " " + age + " " + "paly basketball");
}
void riCheng() {
System.out.println(name + " " + age + " " + "上午去钓鱼,下午去打篮球!");
}
}
/*
疑问:1) class CreatDuiXiang 与 class People 是两个不同的类,编译时也会生成CreatDuiXiang.class和 People.class这两.class文件,
class People 这个类不是没有主函数吗?怎么能编译通过呢?
2)在class People 这个类中定义了 int age和String name,但没初始化值,Java中的变量定义不是要初始化值才能使用吗,为什么这里没有也能编译通过呢?
*/ 作者: 徐然 时间: 2012-7-25 18:55
一个类就是用于对一类事物的描述,只要类中语法正确,编译器就能编译成功
而主函数只是程序的入口,他是运行时的入口,不关编译时期的事
就像你要启动一辆车,首先你得找到钥匙的插口
而作为成员变量,你没有给他赋值,他就有一个默认初始化值
如你上面的int age默认初始化值就是0
String name默认初始化值就是null;作者: 马州州 时间: 2012-7-25 19:03 本帖最后由 马州州 于 2012-7-25 19:18 编辑
疑问:1) class CreatDuiXiang 与 class People 是两个不同的类,编译时也会生成CreatDuiXiang.class和 People.class这两.class文件,
class People 这个类不是没有主函数吗?怎么能编译通过呢?
这是两个不同的类没错,再一个程序中可以存在无数的类,在java中没有主函数是可以编译通过的,只要你语法以及java的规则没有出错
但是在执行的时候,虚拟机是会去找main方法,如果没有就会报错
而且你这个程序中是有主函数的,运行的时候是从主函数开始运行的
你看你的程序,在主函数中调用people类中的函数
所以People类中其实也不需要主函数
在class People 这个类中定义了 int age和String name,但没初始化值,Java中的变量定义不是要初始化值才能使用吗,为什么这里没有也能编译通过呢?
你定义的 int 和name是成员变量,会有一个默认初始化值,age的默认初始化值是0
name的默认初始化值就是null
所以编译能通过
如果你定义一个局部变量编译就无法通过了
作者: 刘海源 时间: 2012-7-25 19:05
public class CreatDuiXiang {
public static void main(String[] args) {
People p = new People();
p.sport();
p.riCheng();
}
}
class People {//创建一个类并没有说明必须要有主方法,编译时只看语法错误,你的这个类没有语法错误奥
int age;//
String name;
void sport() {
System.out.println(name + " " + age + " " + "paly basketball");
}
void riCheng() {
System.out.println(name + " " + age + " " + "上午去钓鱼,下午去打篮球!");
}
}
/*
疑问:1) class CreatDuiXiang 与 class People 是两个不同的类,编译时也会生成CreatDuiXiang.class和 People.class这两.class文件,
class People 这个类不是没有主函数吗?怎么能编译通过呢?
创建一个类并没有说明必须要有主方法,编译时只看语法错误,你的这个类没有语法错误奥,但是运行没有效果。
2)在class People 这个类中定义了 int age和String name,但没初始化值,Java中的变量定义不是要初始化值才能使用吗,为什么这里没有也能编译通过呢?
因为定义的是成员变量,成员变量是随着对象的创建而加载而且有初始化的默认值String类型的为null而int类型的为0,随着对象创建,成员变量在堆内存中初始化默认值所以不会出错 作者: 刘海源 时间: 2012-7-25 19:06
如内存图所示: