头歌(EduCoder)实训项目-Java面向对象-类与对象

这篇博客通过一系列的实战关卡,详细介绍了Java中的类与对象的概念,包括类的创建、构造方法的使用、This关键字的应用、静态关键字static的讲解,以及相关的选择题,帮助读者深入理解Java面向对象编程。

第1关:什么是类,如何创建类

任务描述:

本关任务:创建一个类和一个对象,调用这个对象的属性和方法。

编程要求:

根据提示,在右侧编辑器Begin-End处补充代码:

  • 声明一个Dog类,给Dog类添加三个String类型的属性,分别是namecolorvariety ,定义两个方法,分别是,eatrun

  • main方法中创建一个名为wuhuarouDog对象,并设置name五花肉color棕色variety阿拉斯加

  • 使得调用wuhuarou对象的eat方法能输出啃骨头,调用run方法能输出叼着骨头跑

具体输出要求请看测试说明。

package step1;

public class Test {
	public static void main(String[] args) {
		/********** Begin **********/
		//创建Dog对象
		//设置Dog对象的属性
		//在main方法中创建一个名为wuhuarou的Dog对象,
        //并设置name为五花肉,color为棕色,variety为阿拉斯加。
		Dog wuhuarou = new Dog();
        wuhuarou.name = "五花肉";
        wuhuarou.color = "棕色";
        wuhuarou.variety = "阿拉斯加";
		//输出小狗的属性
		System.out.println("名字:" +wuhuarou.name+ ",毛色:" +wuhuarou.color+ ",品种:" +wuhuarou.variety);
		
		//调用方法
        wuhuarou.eat();
        wuhuarou.run();

		
		/********** End **********/
		
	}
}

//在这里定义Dog类
/********** Begin **********/
class Dog{
    String name;
    String color;
    String variety;
    void eat(){
        System.out.println("啃骨头");
    }
    void run(){
        System.out.println("叼着骨头跑");
    }
}

第2关:构造方法

任务描述:

本关任务:创建对象给对象定义无参构造方法和有参构造方法。

编程要求:

根据提示,在右侧编辑器Begin-End处补充代码:

  • 创建一个Person类,给Person类定义一个无参构造方法和一个有参构造方法,有参构造方法定义两个String类型参数namesexmain方法中调用无参构造和有参构造方法;

  • 调用无参构造方法输出:一个人被创建了

  • 调用有参构造方法应根据输入的数据输出对应的结果,如输入:张三,则输出:姓名:张三,性别:男,被创建了

package step2;

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String name = sc.next();
		String sex = sc.next();
		/********** Begin **********/
		//分别使用两种构造器来创建Person对象 
                Person person1 = new Person();

		Person person2 = new Person(name,sex);

		/********** End **********/
		
	}
}

//创建Person对象,并创建两种构造方法
/********** Begin **********/
class Person{
    String name;
    String sex;

    public Person(){
        System.out.println("一个人被创建了");
    }



    public Person(String name, String sex){
        this.name = name;
        this.sex = sex;
        System.out.println("姓名:"+name+','+"性别:"+sex+','+"被创建了");
    }
}
    

/********** End **********/

第3关:选择题

  • 1、下列关于构造方法的说法不正确的是( C )

    A、

    Java语言规定构造方法名必须与类名相同

    B、

    Java语言规定构造方法没有返回值,且不用void关键字声明

    C、

    构造方法不可以重载

    D、

    构造方法只能用new关键字来创建

  • 2、类Test定义如下:

    
     
    1. public class Test{
    2. public float method1(){
    3. System.out.println("方法1");
    4. return 1.5;
    5. }
    6.  
    7.  
    8. }

    将下列哪些方法插入到第7行是合法的( CD )

    A、

    public float method1(){
    System.out.println(“方法2”); return 1.1; }

    B、

    public Test1(){ System.out.println(“hello”); }

    C、

    public float method1( int a){ System.out.println(“方法2”); return a+0.5; }

    D、

    public Test(){ System.out.println(“hello”); }

第4关:This关键字

任务描述:

本关任务:使用this关键字,设置对象的成员变量。

编程要求

右侧编辑器中已经编写好了代码,但是输出结果不能让我们满意,请根据所学知识修改代码,使其能输出如下结果: name:baby age:45 sex:女

package step3;

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String name = sc.next();
		int age = sc.nextInt();
		String sex = sc.next();
		Person p = new Person(name,age,sex);
		p.display();
	}
}

class Person{
	String name = "张三";
	int age = 18; 
	String sex = "男";
	/********** Begin **********/

	public Person(String name,int age,String sex){
		this(age);
		this.name = name;
		this.sex = sex;
	}
	
	public Person(int age){
		this.age = age;
	}
	
	public void display(){
		String name = "baby";
		int age = 45;
		String sex = "女";
		System.out.println("name:" + this.name);
		System.out.println("age:" + this.age);
		System.out.println("sex:" + this.sex);
	}


	/********** End **********/
}

第5关:类与对象练习

任务描述:

本关任务:为“无名的粉”写一个类,编写该类的构造方法和成员变量。

编程要求:

我已经帮你创建好了两个文件一个是WuMingFen.java,另一个是Test.java,你需要切换文件在两个文件中编写代码来完成本关任务。

为“无名的粉”写一个类:class WuMingFen 要求:

  • 有三个属性:面码:String theMa 粉的分量(两):int quantity 是否带汤:boolean likeSoup

  • 写一个构造方法,以便于简化初始化过程,如: WuMingFen f1 = new WuMingFen("牛肉",3,true);

  • 重载构造方法,使得初始化过程可以多样化: WuMingFen f2 = new WuMingFen("牛肉",2);

  • 如何使得下列语句构造出来的粉对象是酸辣面码、2两、带汤的? WuMingFen f3 = new WuMingFen();

  • 写一个普通方法:check(),用于查看粉是否符合要求。即:将对象的三个属性打印在控制台上。

Test.java文件

package step4;

import java.util.Scanner;

public class Test {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String theMa = sc.next();
		int quantity = sc.nextInt();
		boolean likeSoup = sc.nextBoolean();
		/********** Begin **********/
		//使用三个参数的构造方法创建WuMingFen对象  取名 f1
        WuMingFen f1 = new WuMingFen(theMa, quantity, likeSoup);
		//使用两个参数的构造方法创建WuMingFen对象  取名 f2
        WuMingFen f2 = new WuMingFen(theMa, quantity);
		//使用无参构造方法创建WuMingFen对象  取名 f3
        WuMingFen f3 = new WuMingFen();
            f3.theMa = "酸辣";
            f3.quantity = 2;
            f3.likeSoup = true;
		//分别调用三个类的 check方法
        f1.check();
        f2.check();
        f3.check();

		
		/********** End **********/	
	}
}
WuMingFen.java文件

/********** Begin **********/
//在这里添加包名  step4
package step4;
//创建类 添加属性和方法
public class WuMingFen{
    String theMa;
    int quantity;
    boolean likeSoup;
    public WuMingFen(){

    }
public WuMingFen(String theMa, int quantity, boolean likeSoup){
    this.theMa = theMa;
    this.quantity = quantity;
    this.likeSoup = likeSoup;
}
public WuMingFen(String theMa, int quantity){
    this.theMa = theMa;
    this.quantity = quantity;
}
public void check(){
    System.out.println("面码:" + theMa + ",粉的份量:" + quantity + "两,是否带汤:" + likeSoup);
}
}

第6关:static关键字

编程要求:

现在编辑器中代码有异常,请利用本关所学知识修改右侧代码使其能输出如下结果:

hello educoder 我叫楚留香 我喜欢在educoder上学习java

package step5;

public class Test {
	/********** Begin **********/
	static String name = "楚留香";
	static
	{
		System.out.println("hello educoder");
	}
	public static void main(String[] args) {
		System.out.println("我叫" + name);
		study();
	}
	
	public static void study(){
		System.out.println("我喜欢在educoder上学习java");
	}
	/********** End **********/
}

第7关:选择题

  • 1、有如下代码:

    
     
    1. public class TestMain{
    2. public static void main(String args[]){
    3. MyClass mc1 = new MyClass();
    4. MyClass mc2 = new MyClass();
    5. mc1.a = 100;
    6. mc1.b = 200;
    7. mc2.a = 300;
    8. mc2.b = 400;
    9. System.out.println(mc1.a);
    10. System.out.println(mc1.b);
    11. System.out.println(mc2.a);
    12. System.out.println(mc2.b);
    13. }
    14. }
    15. class MyClass{
    16. static int a;
    17. int b;
    18. }

    请问输出结果是( D )

    A、                                   B、                                    C、                               D、

    100 100 100 100              100 200 300 400               400 400 400 400          300 200 300 400

     

  • 2、```java class MyClass { int a; static int b; void fa(){

    1. }
    2. static void fb(){
    3.  
    4. }
    5. public void m1(){
    6. System.out.println(a); //位置1
    7. System.out.println(b); //位置2
    8. fa(); //位置3
    9. fb(); //位置4
    10. }
    11. public static void m2(){
    12. System.out.println(a); //位置5
    13. System.out.println(b); //位置6
    14. fa(); //位置7
    15. fb(); //位置8
    16. }

    }

    ``` 上述代码会出错的位置有:( EG )

    A、          B、         C、         D、         E、         F、          G、

    位置1       位置2      位置3      位置4      位置5      位置6      位置7

  • 3、```java class MyClass { static int i = 10; static { i = 20; System.out.println(“In Static”); }

    1. public MyClass() {
    2. System.out.println("MyClass()");
    3. }
    4.  
    5. public MyClass(int i) {
    6. System.out.println("MyClass(int)");
    7. this.i = i;
    8. }

    }

    public class TestMain { public static void main(String args[]) { MyClass mc1 = new MyClass(); System.out.println(mc1.i); MyClass mc2 = new MyClass(10); System.out.println(mc2.i); } }

    ``` 上述代码的运行结果是:( B )

    A、                                                                      B、

    MyClass() 20 MyClass(int) 10                             In Static MyClass() 20 MyClass(int) 10

    C、                                                                       D、

    In Static MyClass(int) 20 MyClass() 10               In Static MyClass() 10 MyClass(int) 20

     

<think>根据用户当前的需求,用户正在查找Java面向对象中“对象”的实训内容。用户提供的引用[^1]是一个具体的实训代码示例,来自Educoder平台()的JAVA实训项目。 由于用户明确指向“实训”,并且引用内容中包含第5的代码,需要整理相信息: 1. 实训平台:Educoder) 2. 实训主题:JAVA面向对象——对象 3. 具体卡:第5对象练习” 4. 代码内容:包含Person的定义、构造方法重载、this键字的使用以及display方法中局部变量成员变量的区分。 用户需要的是“实训资料”,这可能包括: - 实训任务说明 - 键知识点讲解(对象、构造方法、this键字等) - 常见问题解决方案 - 参考代码解析 鉴于引用中已经提供了参考代码,接下来应当: 1. 解析这段代码的功能和知识点 2. 梳理对象的核心概念 3. 根据实训特点推测可能的学习路径 由于无法获取平台完整的实训文档,只能基于代码进行分析: -实训要求学员完成Person的构造方法重载,并正确使用this键字区分成员变量和局部变量。 - 在display方法中,演示了当局部变量成员变量同名时,使用`this`访问成员变量的场景。 因此,回答应围绕这些核心知识点展开,并推测实训资料可能包含的内容。 </think>以下是Java面向对象对象实训内容整理,结合引用[^1]的代码进行分析: ### 一、实训核心知识点 1. **对象基础** - 定义模板:`class Person{...}` 包含属性(`name/age/sex`)和方法 - 对象创建:`Person p = new Person(name,age,sex);` 通过`new`实例化 2. **构造方法键特性** ```java // 构造方法重载 public Person(String name,int age,String sex){ this(age); // 调用另一个构造方法 this.name = name; // this区分成员变量参数 this.sex = sex; } public Person(int age){ this.age = age; } ``` - `this`键字:解决成员变量局部变量同名问题 - 构造方法链:通过`this()`调用同其他构造方法 3. **成员变量 vs 局部变量** ```java public void display(){ String name = "李四"; // 局部变量(优先级高于成员变量) System.out.println("name:" + this.name); // this显式调用成员变量 } ``` 输出结果: `name:张三`(成员变量)而非`李四`(局部变量) ### 二、实训典型任务解析 1. **构造方法实现** - 需要完成参数化构造方法初始化对象 - 注意字段默认值覆盖(代码中默认`张三/18/男`会被构造参数覆盖) 2. **成员访问控制** - 正确使用`this`访问对象自身成员 - 理解作用域优先级:局部变量 > 成员变量 3. **对象生命周期** ```java Person p = new Person(sc.next(), sc.nextInt(), sc.next()); p.display(); // 对象方法调用 ``` ### 三、常见实训卡设计 1. **基础卡**:定义+无参构造 2. **进阶卡**: - 含参构造方法重载(如引用中的双构造方法) - `this`键字应用实践 3. **综合卡**: - 对象数组管理 - 封装性实现(private字段+getter/setter) > 提示:实训通常包含即时代码验证,需严格匹配输出格式(如`System.out.println("name:" + this.name);`中的固定字符串)[^1]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值