/*
* 创建对象的操作
* */
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中的变量定义不是要初始化值才能使用吗,为什么这里没有也能编译通过呢?
*/
疑问: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
所以编译能通过
如果你定义一个局部变量编译就无法通过了
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,随着对象创建,成员变量在堆内存中初始化默认值所以不会出错