第1关:类的定义和使用 - 修院子
任务描述
小明家要修一个院子,小明测量了院子的长和宽之后想编写一个程序告诉他院子的周长的面积,请你来帮帮他。
相关知识
Java是面向对象的编程语言,所谓面向对象,就是指一个Java程序可以认为是一系列对象的集合,这些对象通过调用彼此的方法来协同工作。
Java中的对象
在我们生活的现实世界中,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。例如,一条狗是一个对象,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。
对比现实对象和软件对象,它们之间十分相似。软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
Java中的类
类是一个模板,它描述一类对象的行为和状态。
通过下面一个简单的类来理解下Java中类的定义:
public class Dog { //类名首字母需大写,这是语法规范
void barking() {
}
void eating() {
}
void sleeping() {
}
String name;
String breed;
int age;
}
在上面这个例子中,name、breed、age是狗的状态,它们通过变量来体现,一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。
由此可见,上述的name、breed、age属于成员变量。
一个类可以拥有多个方法,在上面的例子中:barking()、eating()和sleeping()都是Dog类的方法。
类的访问修饰符
关于Java修饰符之后会更加详细的阐述,在此先简单介绍一下访问修饰符。
访问修饰符可以用来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。
- 默认的,也称为 default,在同一包内可见,不使用任何修饰符。
- 私有的,以 private 修饰符指定,在同一类内可见。
- 共有的,以 public 修饰符指定,对所有类可见。
- 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。
一般的,我们将类和类的成员方法定义为 public,将类的成员变量定义为 private。因为我们不希望用户能直接看到类的成员变量,这部分数据对外界应该是隐藏的;我们希望的是用户通过访问类的成员方法来对类进行操作,类的成员方法就相当于类的对外接口,只有通过这些接口才能访问和使用类。
这就是Java语言特性的封装性,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道(当然也无从知道)隐藏起来的细节,但可以通过类对外提供的接口,也就是类的成员方法,来与类的成员变量进行交互。
类的构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名。
一个类可以有多个构造方法,不同的构造方法的参数必须各不相同。这是因为在方法重载中,Java区分不同的方法的依据就是各方法的参数。
下面是一个构造方法示例:
public class Dog {
public Dog() {
}
public Dog(String name) { //该构造方法含有一个String类型参数name,与上面的构造方法参数不同
}
}
类的this关键字
类的this关键字用于区分当方法的参数变量与类的成员变量重名的情况,请看示例:
public class Dog {
public Dog(String name) {
this.name = name; //方法的参数变量与类的成员变量都叫name,故使用this关键字加以区分,this.name表示类的成员变量name
}
private String name;
}
编程要求
本关的编程任务是补全右侧代码片段中的Yard
类,具体要求如下:
- 使用构造方法初始化边长。
- 设计成员方法
getPerimeter()
和getAcreage()
,运算并返回周长和面积。
评测说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
测试文件YardBuilding.java
代码框架如下:
import java.util.Scanner;
public class YardBuilding {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
int width = scanner.nextInt();
Yard yard = new Yard(length, width);
System.out.print(String.valueOf(yard.getPerimeter()) + ' ' + String.valueOf(yard.getAcreage()));
}
}
请注意:Yard.java
文件中类的成员方法的名称注意跟测试文件YardBuilding.java
中的一致,即getPerimeter
和getAcreage
。
以下是测试样例:
测试输入: 3 4 预期输出: 14.0 12.0
package step1;
public class Yard {
Yard(double length,double width){
this.length=length;
this.width=width;
}
public double getPerimeter(){
return(length+width)*2;
}
public double getAcreage(){
return length*width;
}
private double length;
private double width;
}
第2关:对象实际操作 - 自我介绍
任务描述
现代社会,单位面试都会要求做一个自我介绍,介绍个人的名字、年龄、学历、职位等等。这可让某些人犯了难,聪明的你可以帮助他们写一个可以自我介绍的程序么?
相关知识
对象实际操作
创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:是有关键字new来创建一个对象。
- 初始化:使用new创建对象时,会调用构造方法初始化对象。
访问类的成员方法
通过已创建的对象来访问类的成员方法,如下所示:
/* 实例化对象 */
Class Object = new Constructor();
/* 访问类中的方法 */
Object.MethodName();
注:若使用 static 将类的成员方法定义为静态方法,则可以直接通过类名访问,这一点之后再详细阐述。
样例
下面是一个创建对象的例子:
public class Dog {
public Dog(String name) {
this.name = name;
}
public void getName() { //打印小狗的名字
System.out.println("小狗的名字是:" + name);
}
public void setAge(int age) { //设置小狗的年龄
this.age = age;
}
public int getAge() { //获取小狗的年龄
return age;
}
private String name;
private int age;
public static void main(String []args) {
// 下面的语句将创建一个Dog类的对象,名为myDog
Dog myDog = new Dog("bob"); //Dog("bob")表示访问构造方法,将"bob"传递给构造方法的参数name
myDog.getName(); //访问对象myDog的成员方法getName()
myDog.setAge(2); //访问对象myDog的成员方法setAge()
System.out.println("小狗的年龄为:" + myDog.getAge);
}
}
编译并运行上面的程序,会打印出下面的结果:
小狗的名字是:bob
小狗的年龄为:2
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下:
- 声明一个
person
对象并实例化,利用类中已经编写好的方法传入相关的属性,即name(姓名)、age(年龄)、education(学历)、position(职位); - 调用类的方法
introduction()
输出自我介绍的一句话。
评测说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是测试样例:
测试输入: 张三 35 博士 讲师 预期输出: 大家好!我是张三,我今年35岁,博士学历,目前职位是讲师文章来源:https://www.toymoban.com/news/detail-775392.html
package step2;
import java.util.Scanner;
public class SelfIntroduction {
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setEducation(String education) {
this.education = education;
}
public void setPosition(String position) {
this.position = position;
}
public void introduction() {
System.out.println("大家好!我是" + name + ",我今年" + age + "岁,"
+ education + "学历," + "目前职位是" + position);
}
private String name;
private int age;
private String education;
private String position;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
int age = scanner.nextInt();
String education = scanner.next();
String position = scanner.next();
/********** Begin *********/
SelfIntroduction person = new SelfIntroduction();
person.setName(name);
person.setAge(age);
person.setEducation(education);
person.setPosition(position);
person.introduction();
/********** End *********/
}
}
机会是极难得的,但他具备三大成功的条件,那就是“像鹿一般会跑的腿,逛马路的闲功夫,和犹太人那样的耐性。 —— 巴尔扎克 开始你的任务吧,祝你成功!文章来源地址https://www.toymoban.com/news/detail-775392.html
到了这里,关于Java头歌 2.3 类和对象-练习3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!