7-2 jmu-Java-03面向对象基础-02-构造方法与初始化块

PTA Java程序设计

7-2 jmu-Java-03面向对象基础-02-构造方法与初始化块


懒人一键copy


思路分析

1.定义一个Person类

  属性String name, boolean gender, int age, int id,static int num ,所有的变量必须为私有(private)。(在编写初始化块中需要添加static的变量用于赋值给id)
  无参构造函数:Person(), 功能:打印This is constructor ,将name,age,gender,id按照name,age,gender,id格式输出。
  有参构造函数:Person(name, gender, age) ,功能:给属性赋值。
建议:使用快捷生成toString方法

分析:

  • 定义Person的类,创建String name, boolean gender, int age, int id并且定义为私有属性(privat)
  • 使用快捷生成创建无参构造器Person(),输出格式
  • 生成有参构造器和**toString()**方法
    ps:(生成的toStirng()方法有一对单引号,记得删除哦)
private String name;
    private int age;
    private boolean gender;
    private int id;
    private static int num;
    //定义一个静态变量
    public Person() {
        System.out.println("This is constructor");
        System.out.println(name+","+age+","+gender+","+id);
    }
    public Person(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

2.定义类的初始化块

  为Person类加入初始化块,在初始化块中对id属性赋值,并且要保证每次的值比上次创建的对象的值+1。然后在下一行打印This is initialization block, id is ... 其中...id的值。
  提示:可为Person类定义一个static属性来记录所创建的对象个数。

分析:

  • 创建一个初始化块,并在Person类中定义一个static的属性用来赋值给id,并且这个属性要自增,在下一行打印"This is initialization block, id is "+id
  //初始化块
    {
        id = num;
        //对id属性赋值
        num++;
        System.out.println("This is initialization block, id is "+id);
    }

3.编写静态初始化块

打印This is static initialization block

分析:

  • 定义一个静态初始化块,然后输出
	static {
        System.out.println("This is static initialization block");
    }

4.编写main方法

  • 首先输入n,代表要创建的对象数量。
  • 然后从控制台分别读取n行的name age gender,并调用有参构造函数Person(name, age, gender)新建对象 。
  • 将创建好的n个对象逆序输出(即输出toString()方法)。
  • 使用无参构造函数新建一个Person对象,然后直接打印该对象。

分析:

  • 在main方法中使用Scanner输入n,并且数组的长度为n (代表有几个对象存入)
  • 遍历数组,在遍历的过程中创建对象,并将创建的对象逆序输出 (使用for循环倒序输出)
  • 创建一个Person对象,直接打印该对象的toString()方法
    Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Person[] s = new Person[n];
        //创建数组长度为n
        for (int i = 0; i < n; i++) {
            String a = sc.next();
            int b = sc.nextInt();
            boolean c=sc.nextBoolean();
            s[i] = new Person(a,b,c);
            //将对象赋值给数组s的索引为0
        }
        //i=3
        //但是索引只有到2,故-1
        for (int i = n-1; i >=0; i--) {
            System.out.println(s[i].toString());
            //打印出数组s的索引为i(调用对象)的toString方法
        }
        Person person = new Person();
        System.out.println(person.toString());

5.思考

  初始化类与对象有几种方法,构造函数、初始化块、静态初始化块。这三种方法执行的先后顺序是什么?各执行几次。

分析:

  • 构造代码块用于初始化对象,每创建一个对象就会被执行一次;
  • 静态代码块用于初始化类,随着类的加载而执行,不管创建几个对象,都只执行一次
  • 静态代码块优先构造代码块的执行
  • 都定义在类中,一个带static关键字,一个不带static 构造函数
  • 非静态初始化块静态代码块都是用于初始化,三者的执行顺序依次是:
    静态代码块>构造代码块>构造函数

懒人一键copy

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Person[] s = new Person[n];
        for (int i = 0; i < n; i++) {
            String a = sc.next();
            int b = sc.nextInt();
            boolean c=sc.nextBoolean();
            s[i] = new Person(a,b,c);
        }
        for (int i = n-1; i >=0; i--) {
            System.out.println(s[i].toString());
    
        }
        Person person = new Person();
        System.out.println(person.toString());
    }
}
class Person{
    private String name;
    private int age,id;
    private boolean gender;
    private static int num;
    public Person() {
        System.out.println("This is constructor");
        System.out.println(name+","+age+","+gender+","+id);
    }
    public Person(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    
    @Override
    public String toString() {
        return "Person [" +
                "name=" + name +
                ", age=" + age +
                ", gender=" + gender +
                ", id=" + id +
                ']';
    }
    {
        id = num;
        num++;
        System.out.println("This is initialization block, id is "+id);
    }
    static {
        System.out.println("This is static initialization block");
    }
}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值