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