学习JavaEE的日子 day12 构造方法 类的制作

Day12

需求:创建人类的对象,并操作对象

分析:

人类 - Person

属性:name、sex、age

方法:eat、sleep

场景:创建多个对象,去操作对象

//测试类:该类中有main方法,测试我们写好的代码
public class Test01 {
public static void main(String[] args) {
		
		Person p1 = new Person();
		Person p2 = new Person();
		
		p1.name = "巴得伟";
		p1.sex = '男';
		p1.age = 23;
		
		p2.name = "波多野结衣";
		p2.sex = '女';
		p2.age = 18;
		
		p1.eat();
		p1.sleep();
		
		p2.eat();
		p2.sleep();
		
		Person.method();
		
	}
}
public class Person {

	//成员变量
	String name;
	char sex;
	int age;
	
	//成员方法
	public void eat(){
		System.out.println(this.name + "吃饭饭");
	}
	
	//成员方法
	public void sleep(){
		System.out.println(this.name + "睡觉觉");
	}
	
	//静态方法
	public static void method(){
		System.out.println("静态方法");
	}
}

面向对象内存图:
在这里插入图片描述

注意:

1.class文件只加载一次

2.class文件中包含了该类中的所有信息(包含方法等)

3.new对象会在堆中开辟空间,存储成员变量

4.成员变量系统会赋默认值

5.每个对象共享一份成员变量

6.方法中的this表示调用该方法的对象(谁调用的,this - 就指向谁)

7.成员方法可以调用this

8.静态方法使用类名调用,所以静态方法内不能使用this

1.构造方法

前言 - 创建对象的语法:类型 引用 = new 构造方法;

含义:与类名相同,且没有返回项的方法(在类中定义的。方法名与类名字相同,无返回值类型声明(包括void))

作用:

1.和new关键字在一起表示创建对象
2.初始化数据

无参构造:new对象时,成员变量系统会赋默认值,之后会调用无参构造(可以进行初始化数据,测试类中一个一个给属性赋值),构造方法执行完,对象创建成功;

有参构造:new对象时,成员变量系统会赋默认值,之后会调用无参构造,再调用有参构造(可以进行初始化数据,将传进来的参数赋值给对象的属性),构造方法执行完,对象创建成功;

注意:

1.创建对象的过程( Person p = new Person() ),也叫做实例化
2.当类中没有有参构造时,系统会默认实现无参构造

经验:类中编写了有参构造,我们记得把无参构造加上

需求:创建人类,操作对象

public static void main(String[] args) {
		
		//类型 引用 = new 构造方法;
		Person p = new Person("巴得伟", '男', 23);
		
		System.out.println(p.name);
		System.out.println(p.sex);
		System.out.println(p.age);
		
		p.eat();
		p.sleep();
	}
}

public class Person {
	
	//成员变量
	String name;
	char sex;
	int age;
	
	//构造方法 - 无参构造
	public Person(){
		System.out.println("无参构造");
		
		//初始化数据
		this.name = "默认值";
		this.sex = '男';
		this.age = 0;
	}
	
	//构造方法 - 有参构造
	public Person(String name,char sex,int age){
		
		System.out.println("有参构造");
		
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	
	//成员方法
	public void eat(){
		System.out.println(this.name + "吃饭饭");
	}
	
	//成员方法
	public void sleep(){
		System.out.println(this.name + "睡觉觉");
	}
}

构造方法内存图:

在这里插入图片描述

public class Person{
    //注意:这种不是构造方法,是成员方法
    public void Person(){}
}

1.1 构造方法的注意事项

* 构造方法的创建

如果没有定义构造方法,系统将给出一个默认的无参数构造方法

如果定义了构造方法,系统将不再提供默认的构造方法

* 构造方法的重载

如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

* 推荐的使用方式

无论是否使用,都手工书写无参数构造方法

* 重要功能

可以使用带参构造,为成员变量进行初始化

1.2 赋值方式

创建对象并为其成员变量赋值的两种方式

  1:无参构造方法创建对象后使用setXxx()赋值
 
  2:使用带参构造方法直接创建带有属性值的对象
public class StudentDemo {

  public static void main(String[] args) {

    //无参构造方法创建对象后使用setXxx()赋值

   Student s1 = new Student();

   s1.setName("小彭");

   s1.setAge(21);

   s1.show();

   //使用带参构造方法直接创建带有属性值的对象

   Student s2 = new Student("小彭",21);

   s2.show();

  }

}

1.3 idea直接生成构造方法

鼠标右键,选择生成,找到get、set,ctrl+a全选一键生成。

或者鼠标右键,选择 ptg to javaBean,一键生成。

2.标准类制作

① 类名需要见名知意

② 成员变量使用private修饰

③ 提供至少两个构造方法

无参构造方法

带全部参数的构造方法

④ get和set方法

提供每一个成员变量对应的setXxx()/getXxx()

⑤ 如果还有其他行为,也需要写上

案例:

public class User {

     //1.私有化全部的成员变量

     //2.空参构造

     //3.带全部参数的构造

     //4.针对于每一个私有化的成员变量都要提供其对应的get和set方法

     //5.如果当前事物还有其他行为,那么也要写出来,比如学生的吃饭,睡觉等行为

     private String username;//用户名

     private String password;//密码

     private String email;//邮箱

     private char gender;//性别

     private int age;//年龄

     //空参构造方法

     public User() {

     }
     //带全部参数的构造
     public User(String username, String password, String email, char gender, int age) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.gender = gender;
        this.age = age;
     }

    //get和set

     public String getUsername() {
        return username;
     }
     public void setUsername(String username) {
        this.username = username;
     }

     public String getPassword() {
        return password;
     }

     public void setPassword(String password) {
        this.password = password;
     }

     public String getEmail() {
        return email;
     }

     public void setEmail(String email) {
        this.email = email;
     }
     public char getGender() {
        return gender;
    }

     public void setGender(char gender) {
        this.gender = gender;
     }

     public int getAge() {
        return age;
     }
 
     public void setAge(int age) {
        this.age = age;
     }

     public void eat(){
        System.out.println(username + "在吃饭");
     }
 }

测试类:

public class Test {

  public static void main(String[] args) {

    //写一个标准的javabean类

    //咱们在课后只要能把这个标准的javabean能自己写出来,那么就表示今天的知识点就ok了

    //利用空参构造创建对象

    User u1 = new User();

    //如果利用空参创建对象,还想赋值只能用set方法赋值

    u1.setUsername("zhangsan");

    u1.setPassword("1234qwer");

    u1.setEmail("pcb@qq.cn");

    u1.setGender('男');
    u1.setAge(23);
    //获取属性的值并打印
    System.out.println(u1.getUsername() + ", " + u1.getPassword()
              + ", " + u1.getEmail() + ", " + u1.getGender() + ", " + u1.getAge());
    u1.eat();

    System.out.println("=============================");
        
        //简单的办法
        //利用带全部参数的构造来创建对象
        //快捷键:ctrl + p
        User u2 = new User("lisi","12345678","pcb@qq.cn",'女',24);
        System.out.println(u2.getUsername() + ", " + u2.getPassword()
                + ", " + u2.getEmail() + ", " + u2.getGender() + ", " + u2.getAge());
        u2.eat();
    }
}

简答题

1. 构造器 Constructor 是否可被 override?

Constructor 不能被 override(重写),但是可以 overload(重载),所以你可以看到一个类中有多个构

造函数的情况。

2. Java 中定义一个不做事且没有参数的构造方法的作用

Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父

类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又

没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到

没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A 北枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值