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 **********/
复制代码
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)构造方法没有返回值,没有参数,名称必须与类名相同。
1、选择题答案:C CD
2、题目总结:
(1)第二题尤为注意方法的重载,在同一类中,如果方法名称相同,则涉及到方法的重载,这两个方法的参数列表必须有所区别,可以是变量类型,可以是变量数量。
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则表示方法传入的值。
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 **********/
}
}
复制代码
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是用来声明全局变量或是被其他对象引用的变量。
1、选择题答案:D EG B