A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 龚建锋 初级黑马   /  2012-7-25 18:45  /  2374 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
* 创建对象的操作
* */
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中的变量定义不是要初始化值才能使用吗,为什么这里没有也能编译通过呢?
*/

9 个回复

倒序浏览
一个类就是用于对一类事物的描述,只要类中语法正确,编译器就能编译成功
而主函数只是程序的入口,他是运行时的入口,不关编译时期的事
就像你要启动一辆车,首先你得找到钥匙的插口
而作为成员变量,你没有给他赋值,他就有一个默认初始化值
如你上面的int age默认初始化值就是0
String name默认初始化值就是null;

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 马州州 于 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
所以编译能通过
如果你定义一个局部变量编译就无法通过了

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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,随着对象创建,成员变量在堆内存中初始化默认值所以不会出错
回复 使用道具 举报
如内存图所示:

1.png (21.97 KB, 下载次数: 34)

1.png
回复 使用道具 举报
class People {//疑问1) 没有主方法为什么编译能通过   主方法是一个程序的入口。在一个程序中可以有很多类,但只能有一个主方法。
                                                              这只是一个普通的类,语法正确就可以编译通过

int age;// 疑问2)没赋值,为什么能用        在方法外边定义的称为成员变量,可以不赋初值。String默认值为null。
                                                     但如果在方法内声明变量,就是局部变量了,必须要初始化一个值

String name;
void sport() {
  System.out.println(name + "  " + age + "  " + "paly basketball");
}
void riCheng() {
  System.out.println(name + "  " + age + "  " + "上午去钓鱼,下午去打篮球!");
}

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刘玉 中级黑马 2012-7-25 19:26:17
7#
所谓的主方法你当成一个测试方法就行了,不是必须的;int类型的默认初始化的值是0
回复 使用道具 举报
class People {//疑问1) 没有主方法为什么编译能通过? 主方法是一个程序运行的入口,想运行一个类时必须有主方法,如果某一个类没有主方法就能不能运行,但可以编译。
int age;// 疑问2)没赋值,为什么能用    系统会自动为变量赋初始值,int类型的赋0;String类型赋值null
String name;
void sport() {
  System.out.println(name + "  " + age + "  " + "paly basketball");
}
void riCheng() {
  System.out.println(name + "  " + age + "  " + "上午去钓鱼,下午去打篮球!");
}
}
回复 使用道具 举报
李菁 发表于 2012-7-25 19:15
class People {//疑问1) 没有主方法为什么编译能通过   主方法是一个程序的入口。在一个程序中可以有很多 ...

啊,斑猪,这个问题简单哦,没有抢到分,不过建议楼猪多看老毕的视频,勤练习,这个问题出现是你练习的少,思考的少的缘故,加油!共同努力!
回复 使用道具 举报
fiend 中级黑马 2012-7-25 22:06:45
10#
解答疑问一:首先说明一点,方法编译成不成功与有没有主方法没有关系。main函数只是程序的入口而已,所谓入口就是程序首先由那里开始运行。
解答疑问二:你是没有给它赋值,但是它是有默认值的,它的默认值就是0,记住,方法内部定义的变量才需要初始化后用,因为方法内部定义的变量
            系统是不会分配默认值的。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马