学习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.初始化数据

注意:

  • 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和setpublic 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 + pUser u2 = new User("lisi","12345678","pcb@qq.cn",'女',24);System.out.println(u2.getUsername() + ", " + u2.getPassword()+ ", " + u2.getEmail() + ", " + u2.getGender() + ", " + u2.getAge());u2.eat();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/345384.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI的力量:微软超越苹果,成为全球最有价值公司

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

x-cmd pkg | trash-cli - 类 Unix 系统的命令行垃圾桶

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 trash-cli 是类 Unix 系统的命令行垃圾桶,用于移动文件到回收站,同时会记录文件的原地址和删除日期。 该工具使用与 GNOME、KDE ​​和 XFCE 等桌面环境相同的垃圾桶,所以即使是非 …

Centos报错failovermethod 和 appstream

Centos报错failovermethod 和 appstream 报错failovermethod 编辑/etc/yum.repos.d/CentOS-Epel.repo vim /etc/yum.repos.d/CentOS-epel.repo将failovermethod选项删除即可 报错appstream 参考这篇文章:https://blog.csdn.net/weixin_46533577/article/details…

为什么不直接public,多此一举用get、set,一文给你说明白

文章目录 1. 封装性(Encapsulation)2. 验证与逻辑处理3. 计算属性(Computed Properties)4. **跟踪变化(Change Tracking)5. 懒加载与延迟初始化(Lazy Initialization)6. 兼容性与未来…

D课堂 | 为什么网站搭建好了却无法访问?(上)

在上一期D课堂中,D妹教大家如何用最简单的方法快速搭建一个网站,相信很多小伙伴已经跃跃欲试,尝试去搭建自己的网站。(点击这里可以快速复习) 然而,有不少人明明每个步骤都跟着做了,但最后在浏览…

PHP项目添加分布式锁,这里是ThinkPHP8框架实现分布式锁

背景:公司旧项目,最初访问量不多,单机部署的。后来,访问量上来了,有阵子很卡,公司决定横向扩展,后端代码部署了三台服务器。部署调整后,有用户反馈,一个订单支付了三次。…

计算机毕业设计----SSH高校科研管理系统平台

项目介绍 本项目包含超级管理员、管理员、教师三种角色; 超级管理员角色包含以下功能: 登录,教师管理,管理员管理等功能。 管理员角色包含以下功能: 登录,专业参赛奖项管理,科技论文发表管理,出版专业著作管理,科研项目立项管理,科研项目结…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-8 可观测性与分离原理

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-8 可观测性与分离原理

kubebuilder+code-generator开发k8s的controller

本文记录用kubebuilder和code-generator开发k8s的crd控制器。 概览 和k8s.io/code-generator类似,是一个码生成工具,用于为你的CRD生成kubernetes-style API实现。区别在于: Kubebuilder不会生成informers、listers、clientsets&#xff0c…

python,序列的切片

序列的切片就是指从一个序列中取出子序列 语法: 序列[起始下标:结束下标:步长] 步长为1表示一个一个的取元素,步长为2表示每次跳过一个元素的取元素,步长为负数表示反向切片,取元素时取到结束下标&#…

RK3568驱动指南|第十二篇 GPIO子系统-第128章 GPIO入门实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

【LeetCode:530. 二叉搜索树的最小绝对差 | 二叉搜索树】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…