第1关 类的定义 与 对象的创建
package task01;
import java.util.Scanner;
/*
* 说明:根据提示,补充完整 begin 和 end 之间的代码。
* (其他代码可以不用改)
*/
/**************** begin *****************/
// 定义学生类名
class student
/**************** end *****************/
{
/**************** begin *****************/
// 在此定义2个成员变量:姓名name和年龄age
String name;
int age;
/**************** end *****************/
void speak() {
System.out.println("我的姓名:"+name+",年龄:"+age);
}
}
public class Task01
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
/**************** begin *****************/
// 定义一个学生对象
student s=new student();
s.name=scan.next();
s.age=scan.nextInt();
s.speak();
// 给学生对象姓名赋值,值为运行时接收从键盘输入
// 给学生对象年龄赋值,值为运行时接收从键盘输入
// 调用学生对象 speak() 方法
/**************** end *****************/
}
}
第2关 同一对象被多个变量引用
package task02;
import java.util.Scanner;
/*
* 说明:根据提示,补充完整 begin 和 end 之间的代码。
* (其他代码可以不用改)
*/
/**************** begin *****************/
// 在此定义学生类名
class Student
/**************** end *****************/
{
/**************** begin *****************/
// 在此定义2个成员变量:姓名name和年龄age
String name;
int age;
public Student(){}
public Student(String name,int age){
this.name=name;
this.age=age;
}
/**************** end *****************/
void speak() {
System.out.println("我的名字是" + name + ",今年" + age + "岁");
}
}
public class Task02{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
/**************** begin *****************/
/*
* 创建Student类的第一个对象,其引用变量为s1,
* 使用s1分别为name和age赋值,值为运行时接收从键盘输入
* 然后调用speak()方法。
*/
Student s1=new Student(scan.next(),scan.nextInt());
s1.speak();
/**************** end *****************/
/**************** begin *****************/
/*
* 创建Student类的第二个对象,其引用变量为s2,
* 使用s2分别为name和age赋值,值为运行时接收从键盘输入,
* 然后调用speak()方法。
*/
Student s2=new Student(scan.next(),scan.nextInt());
s2.speak();
/**************** end *****************/
/**************** begin *****************/
/*
* 创建Student类的第三个对象,其引用变量为s3,
* 将s2的值赋给s3,
* 然后使用s3调用speak()方法。
*/
Student s3=new Student();
s3=s2;
s3.speak();
/**************** end *****************/
}
}
第3关 类的封装
package task03;
import java.util.Scanner;
/*
* 说明:根据提示,补充完整 begin 和 end 之间的代码。
* (其他代码可以不用改)
*/
/**************** begin *****************/
// 在此定义学生类名
class student
/**************** end *****************/
{
/**************** begin *****************/
// 将名字name和年龄age属性定义为私有的
private String name;
private int age;
/**************** end *****************/
/**************** begin *****************/
/*
* 定义4个公有的方法:getName()、setName(String n)、
* getAge()和setAge(int a),
* 用于对外访问name和age。
*
* 在setAge(int a)方法中对传入的参数进行检查,
* 如果输入值为负数,则打印出“设置的年龄不合法”,
* 如果不为负数,才将其设置为age属性的值。
*/
public String getName(){
return name;
}
public void setName(String n){
this.name=n;
}
public int getAge(){
return age;
}
public void setAge(int a){
if(a<0){
this.age=0;
System.out.println("设置的年龄不合法");
}else
this.age=a;
}
/**************** end *****************/
void speak() {
System.out.println("我的名字是" + name + ",今年" + age + "岁");
}
}
public class Task03{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String name1 = scan.next();
int age1 = scan.nextInt();
/**************** begin *****************/
/*
* 创建Student类的实例对象,
* 通过调用对象的setName(String n)和setAge(int a)方法
* 来设置实例对象的name属性和age属性值,
* 方法的参数值为运行时接收从键盘输入,
* 并调用speak()方法。
*/
/**************** end *****************/
student s=new student();
s.setName(name1);
s.setAge(age1);
s.speak();
}
}
第4关 构造方法及其重载
package task04;
import java.util.Scanner;
/*
* 说明:根据提示,补充完整 begin 和 end 之间的代码。
* (其他代码可以不用改)
*/
/**************** begin *****************/
// 在此定义学生类名
class student
/**************** end *****************/
{
/**************** begin *****************/
// 将姓名name和年龄age属性定义为私有的
/**************** end *****************/
private String name;
private int age;
/**************** begin *****************/
/*
* 定义三个重载的构造方法,
* 无参的构造方法:方法体为空;
* 接收一个String类型参数的构造方法:方法体中用参数为姓名赋值;
* 接收String类型和int类型两个参数的构造方法:方法体中用参数为姓名和年龄赋值;
*/
student(){
}
student(String n){
this.name=n;
}
student(String n,int a){
this.name=n;
this.age=a;
}
/**************** end *****************/
void speak() {
System.out.println("我的名字是" + name + ",今年" + age + "岁");
}
}
public class Task04{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
/**************** begin *****************/
// 使用无参的构造方法创建一个Student对象,并调用speak()方法
/**************** end *****************/
student s=new student();
s.speak();
/**************** begin *****************/
/*
* 使用一个参数的构造方法创建一个Student对象,参数值为运行时接收从键盘输入,
* 然后调用speak()方法
*/
/**************** end *****************/
String name=scan.next();
student s1=new student(name);
s1.speak();
/**************** begin *****************/
/*
* 使用两个参数的构造方法创建一个Student对象,参数值为运行时接收从键盘输入,
* 然后调用speak()方法
*/
String name1=scan.next();
int age=scan.nextInt();
student s2=new student(name1,age);
s2.speak();
/**************** end *****************/
}
}
第5关 this关键字访问构造方法
package task05;
import java.util.Scanner;
/*
* 说明:根据提示,补充完整 begin 和 end 之间的代码。
* (其他代码可以不用改)
*/
/**************** begin *****************/
// 在此定义学生类名
class student
/**************** end *****************/
{
/**************** begin *****************/
// 将姓名name和年龄age属性定义为私有的
/**************** end *****************/
private String name;
private int age;
/**************** begin *****************/
/*
* 定义一个无参的构造方法:方法体输出一行文字"无参的构造方法";
*/
/**************** end *****************/
student(){
System.out.println("无参的构造方法");
}
/**************** begin *****************/
/*
* 定义一个接收一个String类型参数的构造方法:
* 方法体中:使用this关键字调用无参构造方法,
* 并使用String类型参数为姓名赋值,再输出一行文字"一个参数的构造方法";
*/
/**************** end *****************/
student(String s)
{
this();
this.name=s;
System.out.println("一个参数的构造方法");
}
/**************** begin *****************/
/*
* 定义一个接收String类型和int类型两个参数的构造方法:
* 方法体中:使用this关键字调用一个参数的构造方法,
* 并使用int类型参数为年龄赋值(不用为姓名赋值),再输出一行文字"两个参数的构造方法";
*/
student(String s,int a)
{
this(s);
this.age=a;
System.out.println("两个参数的构造方法");
}
/**************** end *****************/
void speak() {
System.out.println("我的名字是" + name + ",今年" + age + "岁");
}
}
public class Task05 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
/**************** begin *****************/
/*
* 调用学生类的两个参数的构造方法创建对象,参数值为运行时接收从键盘输入;
* 使用对象调用speak()方法。
*/
String name=scan.next();
int age=scan.nextInt();
student s=new student(name,age);
s.speak();
/**************** end *****************/
}
}
第6关 静态变量
package task06;
import java.util.Scanner;
/*
* 说明:根据提示,补充完整 begin 和 end 之间的代码。
* (其他代码可以不用改)
*/
// 定义学生类名
class student
{
/**************** begin *****************/
/*
* 定义两个非私有属性:姓名name属性和学校school属性,
* 学校school属性为静态的,默认值为北京大学。
*/
/**************** end *****************/
String name;
static String school="北京大学";
void speak() {
System.out.println("我的名字是" + name + ",来自" + school);
}
}
第7关
静态代码块
package task07;
/*
* 说明:根据 TODO 提示,补充完整对应功能代码。
* (其他代码可以不用改)
*/
public class Task07 {
static {
System.out.println("静态代码块");
}
{
System.out.println("构造代码块");
}
public Task07() {
System.out.println("构造方法");
}
void localBlock() {
{
System.out.println("局部代码块");
}
}
public static void main(String[] args) {
System.out.println("---------");
// TODO 在此定义一个测试类的对象
Task07 t1=new Task07();
System.out.println("---------");
// TODO 在此再定义一个测试类的对象
Task07 t2=new Task07();
System.out.println("---------");
// TODO 在此使用第一个对象调用localBlock方法
t1.localBlock();
System.out.println("---------");
// TODO 在此使用第二个对象调用localBlock方法
t2.localBlock();
}
}