第1关:学习-Java类和对象之构造方法与对象创建之求椭圆面积
任务描述
本关任务:已知椭圆的短半轴长为 15.50,长半轴的长为 20.00,计算椭圆面积。
椭圆的面积公式为S=πab,其中a、b分别为椭圆的短半轴长和长半轴长。
相关知识
为了完成本关任务,你需要掌握:
- 类的构造方法;
- 对象的创建与使用。
构造方法
在创建一个对象的时候,至少要调用一个构造方法。构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。必须满足以下的语法规则:
- 方法名与类名相同;
- 不要返回类型(例如return、void等);
- 不能被static、final、native、abstract和 synchronized 修饰,不能被子类继承。
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类自动添加一个默认构造方法(无参构造方法)。当我们手动的指定了构造方法时,系统将不会再添加无参的构造方法。
构造方法又分为无参构造方法和有参构造方法。无参构造方法如字面意思,它不需要传入参数。无参构造方法又分为隐式无参构造方法和显示无参构造方法。
隐式无参构造方法
在定义类的时候,如果没有给类定义一个构造方法,Java 编译器在编译时会默认提供一个隐式的构造方法,它没有任何参数,并且有一个空的方法体。
例子:
public class Person {
int age;
int weight;
double height;
// 隐式无参构造方法
public Person() {
}
}
显式无参构造方法
隐式无参构造方法是由系统提供的,无法修改其内容。但有时需要在调用这个构造方法时,初始化类成员属性或执行一些操作,要实现这个需求,就需要为它定义一个显式无参构造方法。
public class Person {
int age;
double weight;
double height;
// 显示无参构造方法,自己定义的,方法名必须和类名一致。
public Person() {
this.age = 18;
this.weight = 55.3;
this.height = 1.80;
}
}
显示有参构造方法
构造并初始化对象是构造方法的用处,所以有时需要给这个方法传入一些参数,定义一个显示的有参构造方法。例如:
public class Person {
int age;
double weight;
double height;
// 显示无参构造方法,自己定义的,方法名必须和类名一致。
public Person() {
this.age = 18; // 将实例变量age的值初始化为18
this.weight = 55.3; // 将实例变量weight的值初始化为55.3
this.height = 1.80; // 将实例变量height的值初始化为1.80
}
// 显示有参构造方法 自己定义的,方法名必须和类名一致,需要携带参数。
public Person(int age, double weight, double height) {
this.age = age; // 实例变量age的值初始化为传来的参数age的值
this.weight = weight; // 实例变量weight的值初始化为传来的参数weight的值
this.height = height; // 实例变量height的值初始化为传来的参数height的值
}
}
对象的创建与使用
类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型,所以对象的创建方式有如下两种:
-
声明并实例化对象;
类名称 对象名称 = new 类名称 () ;
-
先声明对象,然后实例化对象;
类名称 对象名称 = null ;
对象名称 = new 类名称 () ;
引用数据类型与基本数据类型最大的不同在于:引用数据类型需要进行内存的分配和使用。所以,关键字 new 的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字 new 来分配内存空间。
例子:
public class Person {
int age;
double weight;
double height;
public Person() {
this.age = 18; // 将实例变量age的值初始化为18
this.weight = 55.3; // 将实例变量weight的值初始化为55.3
this.height = 1.80; // 将实例变量height的值初始化为1.80
}
// 显示有参构造方法,自己定义的,方法名必须和类名一致,需要携带参数,携带多少参数可以自己控制。
public Person(int age, double weight, double height) {
this.age = age; // 实例变量age的值初始化为传来的参数age的值
this.weight = weight; // 实例变量weight的值初始化为传来的参数weight的值
this.height = height; // 实例变量height的值初始化为传来的参数height的值
}
public static void main(String[] args) {
Person person = new Person(); // 调用无参构造方法实例化(创建)一个person对象。
// 或者
Person person1 = new Person(18,52.8,69.72); // 调用有参构造方法实例化(创建)一个person1对象。
}
}
当一个实例化对象产生之后,可以按照如下的方式进行类的操作:
-
对象.属性:表示调用类之中的属性;
-
对象.方法():表示调用类之中的方法。
例子:
public class Person {
int age;
double weight;
double height;
public Person() {
this.age = 18;
this.weight = 55.3;
this.height = 1.80;
}
public Person(int age, double weight, double height) {
this.age = age;
this.weight = weight;
this.height = height;
}
public void play(char a){
System.out.printf("我喜欢玩%c\n",a);
}
public static void main(String[] args) {
Person person = new Person(); // 调用无参构造方法实例化(创建)一个person对象
int a = person.age; // 获取Person类中的属性age的值
System.out.println(a);
person.weight = 60.0; // 修改Person类中的属性weight
System.out.println(person.weight);
char b = '球';
person.play(b); // 调用Person类中的play方法,将参数传入该方法
Person person1 = new Person(20,52.8,69.72); // 调用有参构造方法实例化(创建)一个person1对象
System.out.println(person1.age);
System.out.print(person1.weight);
}
}
执行结果:
18
60.0
我喜欢玩球
20
52.8
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。
开始你的任务吧,祝你成功!
源代码:
/**
* 任务:已知椭圆的短半轴长为20.00,长半轴的长为15.50,计算椭圆面积。
* 类名为:EllipseArea
*/
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 创建一个名为 EllipseArea 的公开类
public class EllipseArea{
// 定义椭圆的两个属性 :短半轴长和长半轴长
double shor,lon;
// 定义一个显示有参构造方法,携带两个参数,分别表示为传来的短半轴的值和长半轴传来的值
EllipseArea(double x,double y){
shor=x;
lon=y;
// 该方法实现将短半轴长和长半轴长分别初始化为携带的两个参数的值。
}
// 定义一个方法,该方法实现计算椭圆的面积,并将其返回,返回值类型为double
double area(){
return shor*lon*3.1415926;
}
// 定义主方法
public static void main(String args[]){
// 在主方法中通过有参构造方法实例化一个对象,将椭圆的短半轴的值和长半轴的值传入其中
EllipseArea x=new EllipseArea(15.50,20.00);
System.out.printf("椭圆形的面积为%.2f",x.area());
}
// 调用计算椭圆的面积的方法,计算该椭圆的面积
}
// 将计算后的结果四舍五入保留两位小数后输出,输出格式为:椭圆形的面积为xx
/********** End **********/