第1关:什么是类,如何创建类
1、编程要求:
根据提示,在右侧编辑器Begin-End
处补充代码:
-
声明一个
Dog
类,给Dog
类添加三个String
类型的属性,分别是name
,color
,variety
,定义两个方法,分别是,eat
,run
。 -
在
main
方法中创建一个名为wuhuarou
的Dog
对象,并设置name
为五花肉
,color
为棕色
,variety
为阿拉斯加
。 -
使得调用
wuhuarou
对象的eat
方法能输出啃骨头
,调用run
方法能输出叼着骨头跑
。
2、测试效果:
测试输入:无
预期输出:使用中文冒号
名字:五花肉,毛色:棕色,品种:阿拉斯加
啃骨头
叼着骨头跑
3、程序设计思路:
(1)定义属性和方法。
(2)在主类的main方法中创建对应对象,设置Dog类的属性。
(3)采用对象调用两个类中的方法。
4、程序实现:
package step1; public class Test { public static void main(String[] args) { /********** Begin **********/ Dog wuhuarou = new Dog(); //创建Dog对象 //设置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("叼着骨头跑"); } } /********** End **********/
第2关:构造方法
1、编程要求:
根据提示,在右侧编辑器Begin-End
处补充代码:
-
创建一个
Person
类,给Person
类定义一个无参构造方法和一个有参构造方法,有参构造方法定义两个String
类型参数name
和sex,
在main
方法中调用无参构造和有参构造方法; -
调用无参构造方法输出:
一个人被创建了
; -
调用有参构造方法应根据输入的数据输出对应的结果,如输入:
张三
,男
,则输出:姓名:张三,性别:男,被创建了
。
2、测试效果:
测试输入:张富贵
,未知
预期输出:
一个人被创建了
姓名:张富贵,性别:未知,被创建了
3、程序设计思路:
(1)注意无参构造法的创建格式。
(2)有参和无参构造方法本质上涉及到的是方法的重载。
4、程序实现:
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 p1 = new Person(); Person p2 = new Person(name, sex); /********** End **********/ } } //创建Person对象,并创建两种构造方法 /********** Begin **********/ class Person{ public Person() { System.out.println("一个人被创建了"); } public Person(String name,String sex) { System.out.println("姓名:" + name + ",性别:" + sex + ",被创建了"); } } /********** End **********/
5、题目总结:
(1)对象在被创建的时候,也就是被new
的时候,会自动调用构造方法。
(2)如果定义的类没有声明构造方法,对象在创建时默认使用空的构造方法。
(3)构造方法没有返回值,没有参数,名称必须与类名相同。
第3关:选择题
1、选择题答案:C CD
2、题目总结:
(1)第二题尤为注意方法的重载,在同一类中,如果方法名称相同,则涉及到方法的重载,这两个方法的参数列表必须有所区别,可以是变量类型,可以是变量数量。
第4关:This关键字
1、编程要求:
右侧编辑器中已经编写好了代码,但是输出结果不能让我们满意,请根据所学知识修改代码,使其能输出如下结果:
name:baby
age:45
sex:女
2、测试效果:
测试输入:
baby
,45
,女
预期输出:
name:baby
age:45
sex:女
3、程序设计思路:
(1)运用this关键字使构造方法传入的参数修改类中的成员变量。
4、程序实现:
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(){ System.out.println("name:" + name); System.out.println("age:" + age); System.out.println("sex:" + sex); } /********** End **********/ }
5、题目总结:
(1)this()
调用的是Person
自己的无参构造方法。
(2)this.name
访问的是Person
对象自身的name
,而方法参数中的name
则表示方法传入的值。
第5关:类与对象练习
1、编程要求:
我已经帮你创建好了两个文件一个是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()
,用于查看粉是否符合要求。即:将对象的三个属性打印在控制台上。
2、测试效果:
我会对你编写的代码进行测试:
测试输入:
牛肉
,3
,true
预期输出:
面码:牛肉,粉的份量:3两,是否带汤:true
面码:牛肉,粉的份量:3两,是否带汤:false
面码:酸辣,粉的份量:2两,是否带汤:true
测试输入:
三鲜
,1
,true
预期输出:
面码:三鲜,粉的份量:1两,是否带汤:true
面码:三鲜,粉的份量:1两,是否带汤:false
面码:酸辣,粉的份量:2两,是否带汤:true
3、程序设计思路:
(1)首先观察输出中的不同点,一和二只有是否带汤不同,三前两项和一二都不相同,而根据要求三的构造方法没有参数,所以想到在设置属性时先将面码和粉的份量定下来。
(2)一和二和明显是构造方法不同重载形式造成的,由于一利用参数可以修改是否带汤属性,所以二的是否带汤属性一定来自WuMingFen的成员变量。
4、程序实现:
(1)WuMingFen类:
/********** Begin **********/ //在这里添加包名 step4 package step4; //创建类 添加属性和方法 public class WuMingFen{ String theMa = "酸辣"; int quantity = 2; boolean likeSoup = false; public WuMingFen() { likeSoup = true; } 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 ); } } /********** End **********/
(2)Test类:
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(); //分别调用三个类的 check方法 f1.check(); f2.check(); f3.check(); /********** End **********/ } }
第6关:static关键字
1、编程要求:
现在编辑器中代码有异常,请利用本关所学知识修改右侧代码使其能输出如下结果:
hello educoder
我叫楚留香
我喜欢在educoder上学习java
2、程序设计思路:
(1)修改代码即可,知道static修饰的规则。
3、程序实现:
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 **********/ }
4、题目总结:
(1)如果一个类的成员变量被static
修饰了,那么所有该类的对象都共享这个变量,对于方法也一样。(类名.变量名/方法名)
(2)静态方法不能使用非静态变量。
(3)静态代码块是不需要依赖main
方法就可以独立运行的,其中只能直接调用静态的属性和方法,在类被加载的时候运行且只运行一次(必定运行一次)。
(4)在Java中是不能用static
关键字修饰局部变量的。(人为规定)
其实这些变量都之所以叫局部变量,其作用域也只限于声明它的方法体内。在方法被调用时,这些局部变量获得内存空间,到方法执行结束时,他们所占据的内存空间就被释放。
而static,public是用来声明全局变量或是被其他对象引用的变量。
第7关:选择题
1、选择题答案:D EG B