Java面向对象 - 类与对象

第1关:什么是类,如何创建类
任务描述
本关任务:创建一个类和一个对象,调用这个对象的属性和方法。
相关知识
为了完成本关任务,你需要掌握:1、什么是类和对象; 2、怎么定义类; 3、怎么创建对象并使用对象的属性和方法。
什么是类
类:类是一个模板,它描述一类对象的行为和属性。
对象:对象是类的一个实例,有 属性 和 行为 。
举个例子:
人是一个 “类”,小明就是人的 “对象” ,女生/男生是一个类,你的女朋友/男朋友就是一个对象,这个对象的属性有:名字,性别,年龄;行为有:吃饭、睡觉、学习等。
在Java中对象的状态就是属性,行为通过方法体现,即Java中的对象一般由属性和行为组成。
怎么定义类
需要使用class,声明这个类的名字。
举例说明:

class Student{
//声明这个是一个学生类
}

学生类中有年龄,姓名,性别属性,方法为吃饭,睡觉和学习。
在这里插入图片描述
创建对象并且使用对象的属性和方法
在这里插入图片描述
输出:
我叫:小明今年:12
小明正在吃饭
睡觉
学习
综上我们可以发现创建对象使用的公式就是:
类名 对象名 = new 类名();
给对象的属性赋值:
对象名.属性名 = 值;
使用对象的属性:
对象名.属性名
调用对象的方法:
对象名.方法名();
编程要求
根据提示,在右侧编辑器Begin-End处补充代码:
声明一个Dog类,给Dog类添加三个String类型的属性,分别是name,color,variety ,定义两个方法,分别是,eat,run。
在main方法中创建一个名为wuhuarou的Dog对象,并设置name为五花肉,color为棕色,variety为阿拉斯加。
使得调用wuhuarou对象的eat方法能输出啃骨头,调用run方法能输出叼着骨头跑。
具体输出要求请看测试说明。
测试说明
测试输入:无
预期输出:使用中文冒号
名字:五花肉,毛色:棕色,品种:阿拉斯加
啃骨头
叼着骨头跑
开始你的任务吧,祝你成功!
参考代码:

package step1;
public class Test {
	public static void main(String[] args) {
		/********** Begin **********/
		Dog wuhuarou=new Dog();
		wuhuarou.name="五花肉";
		wuhuarou.color="棕色";
		wuhuarou.variety="阿拉斯加";//设置Dog对象的属性
		//输出小狗的属性
		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("叼着骨头跑");
	  }
  }
/********** End **********/

第2关:构造方法
任务描述
本关任务:创建对象给对象定义无参构造方法和有参构造方法。
相关知识
为了完成本关任务,你需要掌握:1.什么是构造方法,2.如何定义和调用构造方法。
什么是构造方法
构造方法:对象被创建的时候会调用的方法,对象在被创建的时候,也就是被new的时候,会自动调用构造方法。
举个例子:
在这里插入图片描述
输出:
我被调用了
怎么定义和使用构造方法
怎么定义构造方法呢?构造方法和我们之前学习的方法又有啥区别呢?
请看图:
在这里插入图片描述
看出区别来了吗?
好,我来总结一下,看你是否能在上图中找出相对应的代码:
构造方法可以有参数,也可以无参数;
构造方法无返回值,也不需要声明void关键字;
构造方法名必须和类名相同。
接下来我在main方法中创建Student对象代码如下:

public static void main(String[] args){
        Student stu = new Student();
        Student stu1 = new Student("张三");
}

你觉得会有输出吗,如果有那么输出结果会是什么呢?如果没有那你觉得原因是什么呢?
编程要求
根据提示,在右侧编辑器Begin-End处补充代码:
创建一个Person类,给Person类定义一个无参构造方法和一个有参构造方法,有参构造方法定义两个String类型参数name和sex在main方法中调用无参构造和有参构造方法;
调用无参构造方法输出:一个人被创建了;
调用有参构造方法应根据输入的数据输出对应的结果,如输入:张三,男,则输出:姓名:张三,性别:男,被创建了。
测试说明
测试输入:张富贵,未知
预期输出:
一个人被创建了
姓名:张富贵,性别:未知,被创建了
总结:
对象的构造方法:
对象在被创建的时候,也就是被new的时候,会自动调用构造方法。
在构造方法中可以做对象初始化操作,有如下特征;
构造方法与对象的方法不同,它是在对象创建时自动调用的;
构造方法可以有参数,也可以无参数;
构造方法无返回值;
构造方法名必须和类名相同;
如果定义的类没有声明构造方法,对象在创建时默认使用空的构造方法。
开始你的任务吧,祝你成功!
参考代码:

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 a=new Person();
		Person b=new Person(name,sex);
	}
}
      class Person{
		  public Person(){
			   System.out.println("一个人被创建了");
		  }
		  public Person(String name,String sex){
			  	System.out.print("姓名:"+name+",性别:"+sex+",被创建了");
		  }
	  }
/********** End **********/

第3关:选择题
任务描述
本关任务:通过所学知识完成选择测试题。
相关知识(略)
编程要求
根据相关知识,按照要求完成右侧选择题任务,通过所学知识完成选择测试题。
测试说明
平台会对你选择的答案进行判断,全对则通过测试。
开始你的任务吧,祝你成功!
参考答案:
在这里插入图片描述
在这里插入图片描述
第4关:This关键字
任务描述
本关任务:使用this关键字,设置对象的成员变量。
相关知识
我们先来看一段代码:
在这里插入图片描述
输出结果:
传入的name:李四age:10
student属性name:张三age:18
上述结果我们可以发现一个问题,在构造方法中name和age并没有设置成功,stu对象的name属性和age属性的值还是默认定义好的张三和18。
怎么解决这个问题呢?你需要学习两个知识点:1.什么是成员变量; 2.this关键字。
什么是成员变量
成员变量就是对象的属性:
在这里插入图片描述
this关键字
关于this关键字,你只需要记住它就是指自身,this即代表自己,this.属性访问的是自己的属性、this()访问的就是自己的无参构造方法。
例1:this.属性
在这里插入图片描述
例2:this.属性,this()
在这里插入图片描述
输出:
I am
张三
可以发现,如果我们把上述this.name = name改为 name = name,那么最终的结果就变成了:
I am
null
this()调用的是Person自己的无参构造方法,this.name访问的是Person对象自身的name,而方法参数中的name则表示方法传入的值。
学会了this关键字的用法,那本关最开始遇到的问题是不是就有解了呢?
编程要求
右侧编辑器中已经编写好了代码,但是输出结果不能让我们满意,请根据所学知识修改代码,使其能输出如下结果:
name:baby
age:45
sex:女
测试说明
测试输入:
baby,45,女
预期输出:
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 = "李四";
		int age = 11;
		String sex = "男";
		System.out.println("name:" + this.name);
		System.out.println("age:" + this.age);
		System.out.println("sex:" + this.sex);
	}
	/********** End **********/
}

第5关:类与对象练习
任务描述
本关任务:为“无名的粉”写一个类,编写该类的构造方法和成员变量。
相关知识
包的概念
在之前我们定义类和定义方法都是在一个文件中编写的,但是在实际开发过程中我们肯定不能使用一个文件去编写所有的代码。
怎么解决这个问题呢?
Duang,包,登场了,包就像我们windows系统中的文件夹一样,只不过包是专门存放代码文件的。
包的主要作用就是给代码文件分类。
在这里插入图片描述
如果一个类被定义在某一个包下那么在定义类的时候需要声明包名,否则程序会报错。
如:
在这里插入图片描述
编程要求
我已经帮你创建好了两个文件一个是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(),用于查看粉是否符合要求。即:将对象的三个属性打印在控制台上。
测试说明
我会对你编写的代码进行测试:
测试输入:
牛肉,3,true
预期输出:
面码:牛肉,粉的份量:3两,是否带汤:true
面码:牛肉,粉的份量:3两,是否带汤:false
面码:酸辣,粉的份量:2两,是否带汤:true
测试输入:
三鲜,1,true
预期输出:
面码:三鲜,粉的份量:1两,是否带汤:true
面码:三鲜,粉的份量:1两,是否带汤:false
面码:酸辣,粉的份量:2两,是否带汤:true
鼠标悬停即可切换文件:
在这里插入图片描述
开始你的任务吧,祝你成功!
参考代码:
src/step4/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=new WuMingFen(theMa,quantity,likeSoup);
		//使用三个参数的构造方法创建WuMingFen对象  取名 f1
		WuMingFen f2=new WuMingFen(theMa,quantity,false);//使用两个参数的构造方法创建WuMingFen对象  取名 f2
		WuMingFen f3=new WuMingFen(); //使用无参构造方法创建WuMingFen对象  取名 f3
		//分别调用三个类的 check方法
	    f1.check();
		f2.check();
		f3.check();
		/********** End **********/	
	}
}

src/step4/WuMingFen.java

/********** Begin **********/
package step4;//在这里添加包名  step4
    class WuMingFen{
		String theMa="酸辣";
		int quantity=2;
		boolean likeSoup=true;
   public WuMingFen(){  
    }
  public WuMingFen(String a,int b, boolean c){
        theMa=a;
		quantity=b;
		likeSoup=c;	
	}
	public WuMingFen(String a,int b){
				 theMa=a;
				quantity=b;
			}	
	public void check(){
		 System.out.print("面码:"+theMa+",粉的份量:"+quantity+"两,是否带汤:"+likeSoup);
		System.out.println();
			}
}
/********** End **********/	

第6关:static关键字
任务描述
本关任务:使用static关键词设置方法和变量的属性。
相关知识
为了完成本关任务,你需要掌握:1.static关键字有什么作用,2.怎么使用static关键字。
什么是static关键字
static关键字我们经常接触,不过我们一直没有讨论过它到底是什么,有什么具体的作用,那static关键字是什么呢,有啥用呢?
static是静态的意思,是一个修饰符,就像是一个形容词,是用来形容类,变量,方法的。
static修饰变量,这个变量就变成了静态变量,修饰方法这个方法就成了静态方法,
static关键字方便在没有创建对象的情况下来进行调用(方法/变量)。
static关键字的作用
static关键字你可以理解为是一个形容词,一般是用来形容类、方法、变量,代码块,还有一个作用是用来静态导包,本关我们只讨论它的三个用法。
1.修饰变量
不使用static关键字访问对象的属性:
在这里插入图片描述
使用static关键字访问对象的属性:
在这里插入图片描述
注意:如果一个类的成员变量被static修饰了,那么所有该类的对象都共享这个变量。无论这个类实例化多少对象,它的静态变量只有一份拷贝。
如:
在这里插入图片描述
输出:
李四
李四
李四
2.修饰方法
用static关键字修饰的方法叫做静态方法。静态方法我们已经用过,它有一个特点相信你已经很熟悉,那就是不需要创建对象就可以直接使用。
如:
在这里插入图片描述
注意:
静态方法不能使用类的非静态变量;
在这里插入图片描述
静态方法可以直接调用静态方法,但是调用普通方法只能通过对象的实例才能调用。
在这里插入图片描述
3.静态代码块
我们先来看一段静态代码块的运行效果:
在这里插入图片描述
输出结果:
我被调用了
上图中static{ }就是一个静态代码块。
我们在main方法中没有编写任何代码,可是运行的时候,程序还是会输出我被调用了,由此我们可以发现静态代码块是不需要依赖main方法就可以独立运行的。
关于静态代码块你只需要记住一句话:在类被加载的时候运行且只运行一次。
静态代码块中变量和方法的调用也遵守我们之前所说的规则,即只能直接调用静态的属性和方法。
编程要求
现在编辑器中代码有异常,请利用本关所学知识修改右侧代码使其能输出如下结果:
hello educoder
我叫楚留香
我喜欢在educoder上学习java
注意: 在Java中是不能用static关键字修饰局部变量的,为什么? 因为这个是老大说的,我们做小弟的不能不听呀。
本关概念较多,需要你用心记下来哦,开始你的任务吧,祝你成功!
参考代码:

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关:选择题
任务描述
本关任务:运用所学知识完成本关选择题。
相关知识(略)
编程要求
根据相关知识,按照要求完成右侧选择题任务,运用所学知识完成本关选择题。
测试说明
平台会对你选择的答案进行判断,全对则通过测试。
开始你的任务吧,祝你成功!
参考答案:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 46
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【练习题】01.成员变量 猜数字游戏 一个A有一个成员变量v 有一个初值100。定义一个 对A成员变量v 进行猜。如果大了则提示大了 小了则提示小了。等于则提示猜测成功。 【练习题】02.成员变量 请定义一个交通工具(Vehicle)的 其中有: 属性 速度(speed) 体积(size)等等 方法 移动(move()) 设置速度(setSpeed(int speed)) 加速speedUp(),减速speedDown()等等. 最后在测试Vehicle中的main()中实例化一个交通工具对象 并通过方法给它初始化sp eed,size的值 并且通过打印出来。另外 调用加速 减速的方法对速度进行改变。 【练习题】03.成员变量与方法、构造方法 在程序中 经常要对时间进行操作 但是并没有时间型的数据。那么 我们可以自己实现 一个时间 来满足程序中的需要。 定义名为MyTime的 其中应有三个整型成员 时 hour 分 minute 秒 second 为了保 证数据的安全性 这三个成员变量应声明为私有。 为MyTime定义构造方法 以方便创建对象时初始化成员变量。 再定义diaplay方法 用于将时间信息打印出来。 为MyTime添加以下方法 addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou) 分别对时、分、秒进行加减运算。 【练习题】04.构造方法 编写Java程序 模拟简单的计算器。 定义名为Number的 其中有两个整型数据成员n1和n2 应声明为私有。编写构造方法 赋 予n1和n2初始值 再为该类定义加 addition 、减 subtration 、乘 multiplication 、 除 division 等公有成员方法 分别对两个成员变量执行加、减、乘、除的运算。 在main方法中创建Number的对象 调用各个方法 并显示计算结果。 【练习题】05.构造方法 编写Java程序 用于显示人的姓名和年龄。 定义一个 Person 该类中应该有两个私有属性 姓名 name 和年龄 age 。定义构造 方法 用来初始化数据成员。再定义显示 display 方法 将姓名和年龄打印出来。 在main方法中创建人的实例 然后将信息显示。 【练习题】06.get方法和set方法 定义一个 该类一个私有成员变量 通过构造方法将其进行赋初值 并提供该成员的g etXXX()和setXXX()方法 提示 假设有private String name。则有 public void setName(String name){ this.name = name。 } public String getName(){ return this.name。 } 【练习题】07.构造方法与重载 为"无名"一个 class WuMingFen 要求 1.有三个属性 面码:String theMa 的分量(两) int quantity 是否带汤 boolean likeSoup 2.一个构造方法 以便于简化初始化过程 如 WuMingFen f1 = new WuMingFen("牛肉",3,true)。 3.重载构造方法 使得初始化过程可以多样化 WuMingFen f2 = new WuMingFen("牛肉",2)。 4.如何使得下列语句构造出来的对象是酸辣面码、2两、带汤的 WuMingFen f3 = new WuMingFen()。 5.一个普通方法 check() 用于查看是否符合要求。即 将对象的三个属性打印在控 制台上。 【练习题】08.构造方法的重载 定义一个名为Vehicles 交通工具 的基 该类中应包含String型的成员属性brand 商 标 和color 颜色 还应包含成员方法run 行驶 在控制台显示"我已经开动了" 和showI nfo 显示信息 在控制台显示商标和颜色 并编写构造方法初始化其成员属性。 编写Car 小汽车 继承于Vehicles 增加int型成员属性seats 座位 还应增加成员方 法showCar 在控制台显示小汽车的信息 并编写构造方法编写Truck 卡车 继承于Vehicles 增加float型成员属性load 载重 还应增加成员 方法showTruck 在控制台显示卡车的信息 并编写构造方法。 在main方法中测试以上各。 【练习题】09.构造方法与重载 定义一个网络用户 要处理的信息有用户ID、用户密码、email地址。在建立的实例 时 把

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值