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

发布时间:2024年01月12日

Day12

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("静态方法");
}

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

分析:

人类 - 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.初始化数据

注意:

  • 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();
    }
}
文章来源:https://blog.csdn.net/weixin_69595694/article/details/135545135
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。